摘要:Serverless架構近幾年頻繁出現在一些技術架構大會的演講標題中。很多人對于Serverless架構,僅從字面意義上理解,認為是一種無服務器架構,實際上它真正的含義是開發者再也不用過多考慮服務器的問題,它不是完全去除服務器,而是依靠第三方資源服務器后端。Serverless架構依托容器技術,提供了高并發、高兼容的特性,為開發者隱藏了底層服務器的細節,同時采取了更經濟的按調用次數或時間計費的服務運營模式,因而備受關注。文章首先介紹Serverless架構的概念、組成以及特點,然后分析了Severless架構前后端一體化研發模式,隨后列舉了Severless架構適用場景的實踐,最后闡述了Severless架構的技術缺點、當前面臨的挑戰以及未來的展望。
關鍵詞:Serverless架構;云計算;FASS;研發模式
doi:10.3969/J.ISSN.1672-7274.2023.03.007
中圖分類號:TP 393.09" " " " " " " "文獻標示碼:A" " " " " " " "文章編碼:1672-7274(2023)03-00-03
Analysis of Application Development Based on Serverless Service Architecture
LIU Qiang
(Nanjing Newspaper Media Group, 210000, Nanjing, China)
Abstract: Serverless architecture has frequently appeared in the title of some technical architecture conferences in recent years. Many people regard the Serverless architecture as a Serverless architecture only in the literal sense. In fact, its real meaning is that developers no longer need to think too much about servers. Instead of completely removing the server, it relies on the back-end of the third-party resource server. Relying on container technology, the Serverless architecture provides high concurrency and high compatibility, hides the details of the underlying server for developers, and adopts a more economical service operation mode based on the number of calls or time, which attracts much attention. The article first introduces the concept, composition and characteristics of the Serverless architecture, then introduces the integrated Ramp;D model of the front and rear ends of the Severless architecture, then lists the practice of the Severless architecture application scenarios, and finally expounds the technical shortcomings of the Severless architecture, the current challenges and the future prospects.
Key words: Serverless architecture; cloud computing; FASS; Ramp;D mode
1" Serverless架構概念、組成以及特點
1.1 Serverless架構概念
Serverless的全稱是Serverless Computing無服務器運算,是云計算的一種模型。所謂的無服務器并非是說不依賴于服務器等資源,而是由開發者實現服務端邏輯,實現的應用邏輯運行在無狀態的計算容器中,由事件觸發,并完全被第三方管理,其業務層面的運行狀態則存儲在數據庫或其他存儲介質中。在無服務器模型中,云服務商負責物理服務器運行并根據用戶的應用需求動態分配資源,而用戶則可以直接將應用邏輯代碼部署到生產環境中[1]。
1.2 Serverless架構組成
Serverless架構是一種無服務器架構模式,它無需關心程序運行環境、資源及數量,只需要將精力聚焦到業務邏輯上。從技術的角度來說,Serverless架構實際上是Backend as a Service——后端即服務(BaaS)和Functions as a Service——功能即服務(FaaS)的組合。在大多數情況下,當開發人員提到無服務器時,所指的基本是FaaS模型。在FaaS下,應用功能仍然需要開發人員編寫自定義服務器端邏輯。但是和傳統架構不同,它可以在完全由云服務商提供的容器中按需運行。此外,開發者使用云服務商提供的整合后端組件,無須開發和維護后端服務,通過調用API/SDK可以自動擴展和透明操作云端服務,可獲得例如數據存儲、消息推送、負載均衡、音視頻處理、AI、IoT等服務能力,這些基于API/SDK的云端第三方服務被稱為(BaaS)[2]。
1.3 Serverless架構特點
(1)不需要預先分配資源:在Serverless架構下,用戶不用全程運行和管理自己的服務器。應用在需要時自動運行;當應用空閑一定時長時,會被自動停止和卸載。這意味著應用不總是持續在線的,不會持續占用計算資源。只有當有應用請求到達或者有事件發生時才會被部署和啟動。
(2)高度擴容性和彈性:Serverless架構原生可以支持高可用性,可以根據業務流量波動,自動進行資源的分配和銷毀,以最大限度地實現平衡穩定、高性能以及提高資源利用率。云計算平臺縮放可以在沒有開發人員干預的情況下自動進行,可以動態即時而精確地擴展,以處理每個單獨的傳入請求,從而保證有足夠的計算資源和足夠數量的應用實例對請求進行處理。
(3)事件驅動,按需使用,按量計費:傳統的服務器端需長期維持業務服務端進程來處理客戶端請求,而在Serverless架構中,空閑容量不會產生任何成本,其由事件觸發,可在需要時自動運行。同時Serverless架構支持用戶按照實際的資源使用量進行付費,當代碼沒有運行或者沒有進行有意義的工作時,不收費,從而可以最大限度地提高用戶側資源使用效率,降低成本。這一方面減少了用戶自己維護的麻煩,另一方面用戶可以根據自己實際使用的粒度支付成本。
(4)無狀態:功能即服務(FaaS),是很短暫的,同時也讓數據集成變得更加簡單。因此用戶不能在內存中存儲任何內容,因為運行代碼的計算容器將由平臺自動創建和銷毀。通過不在計算實例中存儲應用數據內容,能夠啟動更多的實例,而無須擔心實例應用的狀態,從而實現水平擴展。
相對于傳統架構,Serverless架構具備業務聚焦、彈性伸縮、按量付費等優勢。中間件和硬件服務器資源都托管給了云服務商,按需擴展和計費,無需考慮基礎設施。其在降低開發成本的同時,使得開發人員更加專注于業務服務的實現。這些優勢往往是開發者在技術選型時的重要參考[3]。
1.4 Serverless架構技術實現
Serverless架構是更容易實現事件驅動的應用。事件驅動的架構是指在松耦合系統中通過生產和消費事件來互相交換信息,事件的方式更解耦,并且更加自治。基于Serverless更容易構建3層架構應用,即將應用分為3層:即展示層、業務層及數據層,并且部署在不同的物理位置。例如典型的Web應用,在基于Serverless的云服務部署中,展示層托管在對象存儲服務中,業務層由FaaS托管,數據層則由云數據庫托管,從而實現三層在物理上的獨立部署,并且各層獨立擴展,技術上各自演進[4]。
2" 前后端一體化研發模式
2.1 傳統應用研發模式
在傳統的前端研發的流程中,大抵會有如下兩種前后端的研發協作方式:前后端分離模式、BFF(Backend For Frontend)模式[5]。
前后端分離的開發模式特征非常明顯。前端負責視圖展現,以SPA(Single-Page Application)為代表的通用解決方案,后端負責業務和數據邏輯的處理。相比于傳統的Web開發,比如JavaWeb,前后端分離帶來的優勢是明顯的。但對于前端領域希望的優化的方向,可能受限于后端架構,比較有代表性的場景是SSR(Server Side Render)。
BFF,即Backend For Frontend(服務于前端的后端),也就是服務器設計API時會考慮前端的使用,并在服務端直接進行業務邏輯的處理。這是為了讓后端API滿足不同的前端使用場景而演進出來的一種模式。在后端服務化的現今,BFF的出現可以降低一定的溝通成本,通過BFF組裝接口架構上會更合理。前端能更好地掌控服務能力,讓SSR等方案的應用也將變得更加順滑。但BFF這一層引入導致的問題也很明顯,特別是鏈路復雜度上升,除了前端資源和后端資源發布,還需要關心Node應用,維護成本也隨之增加[6]。
2.2 前后端一體的框架設計
前后端一體的研發框架,包括前端React框架以及Node框架。前端以函數調用的方式請求后端服務,通過函數式的編程范式,讓開發更貼近現代前端Web研發的方式。即前端顯式地引入后端代碼,為了在構建階段能夠正確進行前端資源和Node服務的打包,框架通過約定方式進行API的編譯及轉化;后端API按目錄約定生成指定的API路由,前端的函數調用在編譯階段默認轉化成request請求,開發者在多數情況下無須關心API的調用地址。
前后端一體的研發模式設計,提供了更加符合直覺的應用開發方式,開發、調用、測試均像純函數一樣簡單,讓前后端開發方式更加一致。
3" Severless適用場景的實踐
3.1 突發或服務使用量不可預測的場景
以答題紅包業務舉例,特點是平時流量比較小,在高峰的時候流量突然增加,QPS最高和最低差距能達到10倍以上,在部署傳統的容器過程中,需要開發者去維護機器。業務面臨的痛點主要有三個:服務器的成本比較高、運維成本比較高、應急響應不及時。而采用Serverless架構模式則憑借資源池化、代碼緩存等技術,降低函數啟動時延,實現秒級擴縮容,靈活應對突發流量,高并發,負載能力始終和流量是匹配的。不需要像傳統云主機架構那樣在技術人員的干預下應對流量的波峰和波谷,其彈性能力(包括擴容和縮容)均由云廠商提供。
取得的效果:首先服務實例是可以自動伸縮的,通過自動擴容、定時擴容,可以應對流量高峰場景;其次是有全面的監控能力,包括系統、流量、性能監控等監控數據會有一站式的解決方案。體現在收益上有以下幾個方面:服務器成本降低;運維成本降低,一站式監控,遷移后零運維;應急響應,秒級發布、實例異常自動隔離,系統層面的緊急情況由平臺承擔。
3.2 異步分任務處理的場景
在物聯網(IoT)領域如智能音箱產品,用戶對智能音箱說一句話,智能音箱通過互聯網將這句話傳遞給后端服務,然后得到反饋結果,再返給用戶。或者在視頻應用、社交應用等場景中,用戶上傳的圖片、音視頻往往總量大、頻率高,對處理系統的實時性和并發能力都有較高要求。對于客戶端上傳的圖片、音頻,我們可以使用多個函數對其分別處理,包括文件的壓縮、格式轉換等,通過Serverless架構所支持的豐富的事件源、事件觸發機制、代碼和簡單的配置,對數據進行實時處理,廠商可以將API網關、云函數以及數據庫產品結合起來,以替代傳統的服務器或者虛擬機等[7]。
Serverless架構一方面可以確保資源能按量付費,即用戶只有在使用時,函數部分才會計費;另一方面當用戶量增加時,通過Serverless架構實現的后端也會進行彈性伸縮,保證用戶側的服務穩定,且對其中某個功能的維護相當于對單個函數的維護,并不會給主流程帶來額外風險,相對來說會更加安全、穩定等。
4" Serverless架構的劣勢
沒有十全十美的技術,Serverless架構方法解決不了所有問題,且在解決一些問題的同時也會帶來一些新問題,或者說有其局限性和適用場景。目前,Serverless架構適合應用于一些邏輯相對簡單、外部依賴相對較少、不需要復雜編排治理、沒有極致性能要求的業務中,這取決于開發者的選擇[8]。
4.1 本地測試
Serverless應用的本地測試困難是一個很棘手的問題。雖然可以在測試環境中使用各種數據庫和消息隊列來模擬生產環境,但是對于無服務應用的集成或者端到端測試尤其困難,很難在本地模擬應用程序的各種連接,并與性能和縮放的特性結合起來測試。
4.2 部署的復雜性
應用的整體部署會涉及從微服務的部署再到函數的部署,這就會把一個部署動作分解成多個部署服務動作。無服務計算在服務編排以及服務治理方面是比較弱的,雖然主流云廠商都提供無服務計算的函數編排產品,但想要實現函數的限流降級、調用鏈追蹤、自動注冊發現等比較復雜的編排治理以及可探測性還是需要做很多額外的工作,彌補這些不足所要做的工作遠大于無服務計算本身節省的工作量。這點也是和無服務計算無須運維、配置簡單、開箱即用的思想是背道而馳的。
4.3 可移植性
Serverless應用的實現在很大程度上依賴于云服務商對其組件的交互方式,若有嚴格的限制則會影響用戶系統的靈活性和定制能力。不同IT廠商的Serverless平臺和解決方案的具體實現并不相同,這意味著用戶會受制于云服務商技術鎖定。即便用戶決定要更換遷移到新的云服務商,也可能需要升級系統以符合新供應商的規范,而這無疑會增加成本。
4.4 生態
Serverless技術的發展很快,但其還是一門相對較新的技術,雖然可以利用現有的生態,但是因其局限性,一些特有的解決方案,開發工具等還是不夠健全。目前,Serverless架構操作模式和流程在一定程度上通過各個云廠商的控制臺進行函數的創建、更新也會更為方便,但開發者對于完善工具鏈的需求會更加迫切,而相關平臺、框架和工具還處在一個不斷變化和演進的階段,開發流程和部署調試的用戶體驗還需要進一步提升。
5" 結束語
Serverless從架構、開發模式、基礎設施等層面都有不同程度的創新,它的出現給我們帶來更多的選擇與可能性,同時也帶來了機遇與挑戰。基于Serverless一體化應用的開發模式,以其高效開發、便捷部署的特點將會占據應用開發的一席之地,而針對特定領域的解決方案,在配合平臺服務能力的基礎上會有更大的想象空間。也許現在的Serverless模式存在很多不完善的地方,無論是BaaS模式或者是FaaS模式,產品、效率、成本之間的問題都沒有完全解決;或許Serverless也可能是一個過渡產物,這還需要時間來驗證,但可以明確的是,技術可以改變世界,未來可期。■
參考文獻
[1] 劉宇,田初東,盧萌凱,王仁達.Serverless架構下的AI應用開發:入門、實戰與性能優化[M].北京:機械工業出版社,2022.
[2] 楊柏藹,趙山,劉芳.無服務器計算技術研究綜述[J].計算機工程與科學.2022,44(4):49-50.
[3] aoho.周末漫談|什么是Serverless架構[EB/OL].2020-11-21.https://blog.csdn.net/keets1992/article/details/109912852.
[4] 陳愛珍.淺析無服務器的微服務架構與實踐[EB/OL].2016-12-22.https://mp.weixin.qq.com/s/3QqTE4Ru6ApVXQ9F82ni6w.
[5] 鯤塵.邁向應用研發新時代,前后端一體化研發模式即刻體驗[EB/OL].2021-10-20.https://mp.weixin.qq.com/s/PvZbW1Nm2-w2F1qYaNfLpg.
[6] 宋文龍.無服務計算應用場景探討及FaaS應用實戰[EB/OL].2020-8-28.https://mp.weixin.qq.com/s/x7OObZbsiPl5t9FFigHg-Q.
[7] Einic Yeo.Serverless淺析[EB/OL].2019-8-9.https://www.infvie.com/ops-notes/Serverless.html.
[8] 阿里云云棲號.詳解Serverless架構的6大應用場景[EB/OL].2022-08-31.https://developer.aliyun.com/article/1005078.