Serverless Components在騰訊云的落地和實踐,serverless web應用Serverless Components在騰訊云的落地和實踐導語Serverless Components是Serverless Framework推出的最新解決 案,具有基礎設施編排能,開發者通過使Serverless ......
導語Serverless Components是Serverless Framework推出的最新解決 案,具有基礎設施編排能,開發者通過使Serverless Components,可以靈活構建、組合和部署Serverless應。本文是對騰訊云云函數團隊前端負責人蔡衛峰在云+社區沙龍online的分享整理,介紹Serverless Components在騰訊云的落地和實踐,希望與大家一同交流。
一、Serverless Components實現原理
1.Serverless CLI工具
Serverless是一個重開發和部署的產品應用,服務提供了彈性伸縮、自動運維的能力,開發者主要關心開發和部署。所以,開發和部署的體驗對于serverless業務來說是非常重要的。
Serverless的函數本身只是提供了計算的資源,要想實現一個完整的應用,必然會涉及到云上的其他資源,比如網關、cdn、數據庫等。
如果是控制臺操作,需要在不同的服務之間跳來跳去,比較割裂。如果能有一個基于應用的統一的命令行管理工具,對于開發者必然會方便很多
Serverless CLI是用戶授權后,通過命令行工具,調用云API幫助用戶管理云資源,方便對云上資源進行比較完整的操作。
2.什么是Serverless Framework
Serverless Framework現在大量的使用者是web服務的開發者,主要定位于web服務場景,它是北美研發團隊開源的一個項目,是業界常受歡迎的服務器應框架,開發者需關底層資源即可部署完整可的Serverless應架構。
Serverless Framework定義了一套完整的標準化規范,各公有云的插件遵循這套規范,通過對云上資源的編排,覆蓋編碼、調試、部署、排障等全命周期,幫助開發者通過聯動云資源,迅速構建Serverless應。
3.Serverless Framework CLI
Serverless Framework CLI是一個開源命令行工具,它使用基于事件觸發的計算資源,例如騰訊云云函數,AWS Lambda,阿里云函數計算等。
Serverless Framework為開發和部署Serverless架構提供腳手架,自動化工作流以及最佳實踐。并且它支持通過豐富的插件進行功能擴展。
Serverless Framework在Github有將近4萬的Star,在國外比較受歡迎。我們團隊最開始也維護了一個自己的CLI,但是維護成本比較高,想做體驗好操作流暢的CLI需要投入大量人力精力,Serverless Framework的CLI開發者接受程度比較高,它的協議也開放,所以按照規范接入即可。
我們也有用戶原來用Serverless Framework的命令行工具,從AWS遷移到騰訊云云函數環境時候提出了這樣的要求。對用戶而言底層的云資源操作是屏蔽的,只需要跟Serverless Framework打交道就可以了,希望我們也可以提供對接Serverless Framework的方式,這樣遷移到騰訊云上比較方便。
通過和Serverless Framework團隊的溝通,他們正好也有意愿打入國內市場,雙方的合作也就水到渠成了。
Serverless Framework強于CLI整體的體驗,但是對騰訊云本身的了解比較少,于是就有了基本的合作模式,北美團隊負責CLI的開發和整體體驗,騰訊云團隊負責具體落地到騰訊云的components的開發和維護。雙方合力,打造Serverless Framework在國內的實際落地方案。
4.什么是Serverless Components
Serverless Components是Serverless Framework的一個解決方案,本身具備快速部署、靈活配置、模板共享的理念。
公有云對接Serverless Framework后具有了公有云基本的操作能力,但是落地到具體的應用場景就會變得復雜。
外部應用不是單純靠計算資源,也會涉及到靜態資源,比如圖片、CSS、JS文件的托管和域名的管理,涉及到底層數據庫的管理,也有一些更復雜的應用會涉及到更多的云上的資源。
如果開發者要想實現一個應用的管理,則需要通過一系列的操作才能完成一個應用管理和部署,而Serverless Components是為了適配各種具體化的應用場景而開發的模板能力。
Serverless Components是Serverless Framework推出的最新解決方案,具有基礎設施編排能力,開發者通過使用Serverless Components,可以靈活構建、組合和部署Serverless應用。
二、Serverless Components全生命流程
Serverless Component部署流程
Serverless Components部署的完整全流程,首先讀取.env文件,在.env文件中可以輸入騰訊云固定的密鑰信息進行授權,也可以通過微信掃碼賦予CLI臨時的授權,授權Serverless Components CLI在某一段時間可以操作云上某些資源的能力。
同時在.env文件里面可以注入相應環境變量,你可以直接在serverless.yml中通過${env}的方式,直接引用環境變量配置(包含.env文件中的環境變量配置,以及手動配置在環境中的變量參數)。
接著讀取yaml配置。yaml文件要指定使用到的組件名以及組件相應的輸入參數,每個組件因為涉及的操作會不一樣,所以每個組件對參數也有自己的一套固定的規范。
通過CLI的命令進行部署的時候,會把用戶代碼壓縮之后上傳。首先壓縮指定的代碼目錄,上傳到一個公共的COS里面。然后新建或者更新組件的狀態,同時會在服務端把代碼下載下來,并注入Proxy代碼。
proxy代碼都實現了什么能力呢云函數主要的適用場景是事件驅動型的,對于http請求的實現是通過API網關觸發器轉發的。網關接收到的http request會轉換為云函數需要的參數對象,在函數執行包裝后的web框架,執行完后再把http response轉換成API Gateway需要的結構返回給網關,網關再把response轉換成標準的http response返回,這樣就實現了整個HTTP的訪問。
用戶不需要關注這部分的實現,按照正常的開發就可以,Components部署的時候會自動注入這部分轉換邏輯的代碼。服務端在注入完proxy代碼后會把代碼上傳到用戶COS里面,然后創建或更新云函數,同時會再創建或者更新API網關的配置。
這個時候再把整個創建的過程以及創建的狀態保存到服務端,控制臺再輸出整個組件最終需要給用戶看到的一些云上資源的信息,比如SCF的信息、API網關的信息、CDN的數據和數據庫信息等,整個部署就算是完成了。
應用部署完后會返回API網關公用的二級域名的一個訪問地址,跟正常的函數與自己組裝資源去訪問應用方式是一樣的。
大家可以看到,我們抹平了一些云函數和正常服務器差異化的實現,抹平后通過Serverless Components可以不用關心這些特殊的邏輯邏輯,也不需要關心其他的云上的資源。
如果自己要創建一個應用,同時要創建云函數,代碼里面要自己轉換HTTP請求,然后創建一個觸發器綁定到云函數。
如果需要做靜態資源的加速,需要拆分靜態資源部署到COS,并配置一個CDN。這中間涉及到多個云資源的操作。而我們在Serverless Components中已經將整套都實現了,只需要在yaml文件里把這些配置進去就可以,部署完成后就可以看到你的應用了。
三、Components生態建設
1.Serverless Components生態
如上圖所示,其中列舉了一些用戶使用比較多的Serverless Components組件,還有一些沒有列舉出來的,這些基礎的組件包括了騰訊云上的各種常用的基礎資源。可以通過對多個組件的組合來組成完整的應用,也可以直接使用現有的高階組件。
我們也歡迎第三方開發者貢獻他們的組件,現在就已經有很多第三方的開發者在貢獻他們的組件。
2.Serverless Next.js
接下來詳細介紹一個Serverless Components的具體實現。以Next jS項目為例,首先是初始化一個項目,安裝CLI,原來的項目不需要做什么改動,按照Serverless Components要求的規范進行配置后,直接用命令行工具進行部署。
執行部署后component會幫用戶通過CLI進行代碼的構建,完成構建后會把代碼部署到云函數上,創建API網關代理web服務,同時部署靜態資源,會把目錄下的靜態文件自動拆分,并部署到COS上面。
我們后面也會做更加智能化的優化,next框架代碼比較大,每次部署都要上傳兩三百兆代碼,對上傳的效率和啟動效率也有影響。
騰訊云提供layer的能力,我們會自動拆分用戶的n odemodules到layer,之后的部署只需要把業務代碼上傳和部署就可以了,對部署效率有很大的提升。
這里是部署一個有一些復雜度的next應用的屏幕截圖,可以看到完成部署僅需31秒,部署效率非常高
四、跨國合作:挑戰和收獲
1.跨國合作:挑戰
從開始合作到現在已經有一年多了,還在不斷的磨合中。下面是我總結下來的,我們在一年多的合作里口罩體的挑戰,與大家一起分享交流。
(1)溝通效率
由于時差,語言表達,以及東西方思考方式的差異,導致整體的溝通效率比較低。
(2)開發模式
他們那邊是游擊隊的開發模式,有一些研發發布比較隨意,導致了一些線上的問題。而我們其實是有比較嚴格的開發流程,發布前的驗證,發布后的確認,監控告警的體系等等,都有嚴格的要求。
慢慢把我們這一套嚴格的規范灌輸給他們,并要求他們能夠按照我們的要求執行。
(3)問題定位
由于整套體系比較龐大,大家在前面也看到了,一個完整的component的生命流程比較長,步驟比較多,之前也沒有統一的日志收集體系和系統,導致出現了用戶問題定位花費比較長的時間。
(4)目標
兩個團隊的目標導向不完全一樣,我們更注重用戶云上資源的安全,對于密鑰的使用及權限控制比較嚴格,而他們更多的考慮的是使用上的便利。
(5)人才招聘
整套體系采用nodejs開發,涉及到后端、存儲、數據庫等方方面面,對于開發的要求比較高。
另外,需要開發和產品有技術運營的理念,有開放的心態。對于英語也有一定的要求,最好能和北美的開發團隊直接對話。
(6)運營理念的問題
國內外開發者習慣是有差別的,國外比較多的開發者更容易接受命令行工具,而國內開發者對這套東西不熟悉,需要有一個接受的過程。
我們也會做一些妥協,比如后面可以考慮提供界面化的配置方式等。其實對于Serverless Framework與Serverless Components,騰訊云本地化的運營方式和引導上跟國外會有所差別,我們會針對國內開發者做一些貼合開發者習慣的嘗試。
其實在跨國合作中涉及CLI的時候,我們一直很迷惑。雖然我們很想把事情做好,但是對命令行工具的設計和交互設計方面受限于騰訊云的產品,無法突破自己的框架。
通過跟北美團隊的交流合作,對我們的思路也有很大的開拓,我們跟他們學習到了他們的產品設計理念,在產品設計方面,AWS和周圍的生態確實對于我們是很好的借鑒意義。
進行大型開源項目的實現,合作過程中對協作方式也學習到了不少,對于整個后期的開源項目推進,后面再去參加別的開源項目,對于我們而言都是非常寶貴的經驗。
同時,我們也把嚴格的軟件開發經驗輸出給北美,并獲得了他們的認可,對于我們而言也是比較自豪的一件事。以前軟件開發方面北美領先于我們,所有方面我們向他們學習。現在并不完全是這樣了,我們比較嚴格的軟件開發規范比他們走得更靠前,把我們的規范輸出給他們的同時也得到了北美團隊的認可。
2.跨國合作:收獲
·學習先進的交互設計以及產品設計理念;
·以AWS的理念要求我們自己的產品;
·大型開源項目的協作方式;
·輸出嚴格的軟件開發規范,獲得認可;
·同類型開源項目的借鑒和學習,開闊視野。
同類型開源項目的借鑒和學習開拓了我們的視野,北美團隊也會經常發一些他們能夠了解到的信息同步給我們,我們能夠從中得到借鑒和學習,并得到自己的增長。所以未來也會更加緊密合作。
QA
Q:Serverless現階段適用和適用的場景,騰訊內部有哪些業務在用
A:所有的場景都是可以的。小程序云開發底層云函數的能力就是用我們Serverless的實現,騰訊內部還有比如微信支付、微信讀書、騰訊視頻、騰訊課堂有不少場景在用Serverless的服務。
Q:部署而言Serverless相對TKE有什么優勢和劣勢
A:TKE本身是需要自己管理的,但是Serverless在計算資源方面完全不需要自己去管理,我們有一個完全的動態彈性伸縮能力,會根據訪問的請求量去做自動的伸縮,基本上省去了運營的需要。
Q:監控方面有什么成熟組件的接入
A:正常的外部應用都是可以接入的,和虛擬機、容器等計算資源使用的方式相同。我們平臺也提供了一些基礎的監控和日志能力,另一方面,也在聯合騰訊云的監控團隊做了自定義監控組件上報能力的接入,可以在代碼里面自定義的上報到騰訊云監控,自定義監控平臺可以看到監控的數據。
Q:Serverless對業務較復雜的大型項目是否適合
A:肯定適合,比如微信支付、微信讀書、騰訊視頻、騰訊課堂都有不少場景在用Serverless的服務。
Q:穩定性保障的情況如何
A:Serverless是基于騰訊云整套體系來建設的,穩定性方面也是經過了大規模的壓測,有可靠的保障。比較大型的項目提前跟架構師溝通,來做資源的預留或者是資源等級的提升
Q:學習路線是什么
A:部署自己的業務到Serverless服務上面來,可以在實踐中不斷的熟悉。還可以加入我們的微信或者qq群,和大量的開發者一起學習和探討,這樣在不斷的討論和學習過程中可以得到不斷的成長。有使用上的疑問或者問題也可以直接和我們的開發或者架構師溝通。
Q:冷啟動支持需要有低延時的應用嗎
A:如果對冷啟動比較敏感的業務,可以通過預置并發來應對冷啟動的問題,設置了預置并發后,服務保留一定的最小資源量,這些資源量長時間存在,更大的并發到來時再通過自動伸縮去拉起,就可以保證服務既可以解決低延時的問題也可以應對大請求的流量
Q:如果部署在騰訊云的Serverless服務受到DDoS攻擊怎么收費
A:用戶可以設置并發的上限,更多的請求自動幫著擋住,不會把這些流量放進來,實際消費用到消耗的Serverless請求才會收費,其他的擋在控制并發外的請求我們不會收費。
Q:平臺具體實施中如何避開Serverless的劣勢
A:關于Serverless的劣勢,一是冷啟動,二是開發習慣的一些改變,這些劣勢可以通過一些手段避開。冷啟動的問題可以通過預置并發等高階能力解決,web場景用Serverless Components的能力就可以幫助抹平中間的差異
Q:企業應該如何設置Serverless Components
A:要看具體的應用場景,騰訊內部的團隊在使用上也有各種差別,主要還是依賴具體的應用場景和需求。
Q:Java這種啟動慢的語言,未來可以在Serverless上應用嗎
A:其實國內java開發者比較多,我覺得這是非常有潛力的發展方向,我們也在考慮啟動比較慢的java應用如何部署到SCF上面,這是我們努力的一個方向。
特別聲明:以上文章內容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關于作品內容、版權或其它問題請于作品發表后的30日內與ESG跨境電商聯系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯系在線顧問
小程序
ESG跨境小程序
手機入駐更便捷
返回頂部