云函數是一項Serverless計算服務,提供FaaS(Function as a Service)能力。一方面,云函數能夠將開發測試的對象聚焦到函數級別,使得整體的開發、聯調、交付、上線過程更加靈活;另一方面,云函數作為Serverless的核心與樞紐,開發者在應用中集成云函數SDK后,能夠像拼搭積木一樣自由便捷地組織各項服務如云數據庫、云存儲等來實現業務邏輯,提升業務功能構建的便利性。
此外,云函數可以根據函數的實際流量對函數進行彈性伸縮,開發者無需對服務器資源進行管理,運維管理的難題隨之解決。
簡單來說,云函數可以大幅度降低開發成本。下面看看云函數具體是如何做到的:
某權限管理服務器主要為用戶提供基于憑據的授權和鑒權的能力,日訪問流量近6.85億,且流量集中在一個核心接口中,伴有明顯的波峰低谷,非常符合云函數彈性伸縮的特征。
該服務器一直使用ECS來自動調整計算資源(EC2 Container Service是一個高度可擴展的軟件容器管理服務),為了提升資源使用率、降低時延以及節約資源和開發成本,其使用FaaS函數重構了代碼架構,并通過分次切換流量驗證保證了重構后服務器功能的可用性和穩定性。
使用FaaS函數重構了代碼架構的服務器上線后,正值6·18大促活動,日調用量大幅度提高至27億,實現了四倍彈性伸縮,流量無損抗住5W+峰值流量。并且CPU利用率達到60%,相比之前提高了25%;通過準確的流量預測,冷啟動次數降低了近30%,費用比傳統ECS微服務模式降低了近90%。(具體收益結合業務場景和使用案例預估)
在流量低谷期,資源自動降低;而當流量逐步走高,乃至峰時,應用可以快速啟動滿足流量峰值,是應用可靠性和資源彈性的直接表現。而這都離不開應用的快速啟動能力。
說到這里,就不得不提到本案例中用到的兩個云函數關鍵技術點:
1、冷啟動優化:冷啟動的時延降低95%
使用了“快照恢復”的技術:將當前的函數實例以及函數狀態保存為函數快照,啟動時從函數快照并行恢復,省去JVM運行時,Spring框架和業務初始化階段的耗時(如下圖所示)。
“快照恢復”的兩種實現方式:
1)高速快照緩存:基于共享內存同節點上的函數實例零拷貝恢復;
2)并行快照恢復:對于函數快照,按照運行時、進程數據結構、依賴文件等構建依賴樹,并行進行恢復重建。
2、調用量的預測預熱:盡量避免冷啟動的發生
運用了彈性預測的能力:利用機器學習技術,預測未來一段時間內函數調用請求次數,提前預熱適量函數實例,避免冷啟動。
兩種預測模型,滿足多種類型數據預測需求:
1)FFT:基于傅里葉統計模型(一維時序數據)提取周期性信息,對強周期性任務進行預熱;
2)LSTM:基于深度學習模型(支持多維數據)對業務多維特征進行學習擬合,對弱/非周期性任務進行預熱。
(本文數據及圖片來源華為開發者聯盟)
云函數采用三層隔離,實現了內核、容器、網絡三層安全防護能力,在提高資源使用率、降低成本的同時,也保障了云端數據的安全。此外,云函數還提供面向流量洪峰(精準容量+極致彈性+限流降級)的高可用方案,確保在升級時不會造成業務的中斷,您可以直接創建函數,不用申請額外資源,即開即用,流程極簡。
想了解更多Serverless相關內容,可訪問AppGallery Connect>我的項目>構建>云函數。