Serverless 的初心、現狀和未來
導讀:Serverless 是如何產生的?當前有哪些落地場景?Serverless 的未來又將如何?本文分享了阿里云高級技術專家不瞋對于 Serverless 的看法,回顧其發展歷程,并對 Serverless 的發展趨勢做出預測。
源起
回望整個計算機技術發展史,我們會發現 “抽象、解耦、集成” 的主題貫穿其中。產業每一次的抽象、解耦、集成,都將創新推向新的高度,也催生出龐大的市場和新的商業模式。
大型機時代,硬件和軟件都是定制化的,使用專有的硬件、操作系統和應用軟件。
PC 時代,硬件被抽象解耦成 CPU、內存、硬盤、主板、USB 設備等標準化的部件,不同廠商生產的部件可以自由組合,組裝成整機。軟件被抽象解耦為操作系統、庫等可復用組件。硬件和軟件的抽象解耦,創造了新的商業模式,釋放了生產力,造就了 PC 時代的繁榮。
云的時代,硬件軟件化和軟件服務化成為最顯著的兩個趨勢。
- 硬件軟件化的核心在于硬件功能中越來越多的部分由軟件來呈現,從而在迭代效率、成本等方面獲得顯著優勢。以軟件定義存儲(Software Defined Storage,SDS)為例,SDS 是位于物理存儲和數據請求之間的一個軟件層,允許用戶操控數據的存儲方式和存儲位置。通過硬件與軟件解耦,SDS 可運行于行業標準系統或者 X86 系統上,意味著用戶可以無差別的使用任何標準的商用服務器來滿足不斷增長的存儲需求。硬件與軟件解耦也讓 SDS 能夠橫向擴展,消除容量規劃,成本管理等方面的復雜性。
- 云時代的另一趨勢是軟件服務化。應用軟件的功能通過網絡以遠程調用的模式被海量用戶使用。服務成為應用構建的基礎,API 被實現為服務提供給開發者,微服務架構獲得廣泛的成功。服務也成為云產品的基本形態。過去 10 年,云已經證明了它的成功。用戶只需要通過調用 API 就能獲取服務器,而無需自己建設數據中心。算力以前所未有簡潔的方式提供給用戶。
還記得 Google 那篇著名的 “Datacenter as a computer “ 論文嗎?如果我們把云看作是 DT 時代的計算機,那么一個很自然的問題是:隨著云的 API(全托管服務)越來越豐富,什么才是適合于云的編程模型?我們應當以何種 “抽象、解耦、集成” 的方式構建基于云的應用?
在回答上述問題之前,讓我們首先將目光轉向 SaaS 領域。Salesforce 是 SaaS 領域的明星企業,在平臺化能力建設方面的布局為我們提供了一個絕佳的案例。早期的 SaaS 產品采用標準化的交付模式,通過開放 API 接口實現被集成的能力。隨著 Salesforce 產品越來越豐富,客戶規模日益增長,企業開始面臨新的挑戰:
- 如何更快地推出新產品,加強產品間的整合和協同?
- 客戶迅速增長,需求多樣。如何高效地滿足客戶的定制化需求,增加客戶粘性?
- 如何提高產品被集成的能力,更好的銜接上下游資源?
- 當產品能力和 API 完整度到達一定水準后,如何讓開發者快速整合 API,圍繞 Salesforce 能力便捷地開發應用?
- 如何設計好的商業模式,讓客戶、企業和開發者共贏?
Salesforce 的策略是讓整個業務、技術和組織平臺化。平臺放大了企業的價值,讓企業、客戶、開發者三方受益。通過不斷提升平臺的應用交付能力,對內大幅提高產品的研發效率,加強產品的集成和整合;對外則大幅提高了產品的被集成能力,建立開發者生態。
從 2006 年開始,Salesforce 在平臺化能力建設上大力投資,推出了 Apex,Visualforce 等編程語言,允許客戶、合作伙伴和開發者在多租戶環境下編寫和運行自定義的邏輯代碼。在此基礎上,2008 年推出自研 Force.com PaaS 平臺,客戶能夠在該平臺上圍繞 Salesforce 的能力構建自己的應用程序。2010 年收購了流行的 PaaS 服務商 Heroku,2019 年推出 Serverless 計算平臺 Evergreen,進一步加強應用構建和集成與被集成能力。除了應用的構建能力,Salesforce 近幾年來也在應用的移動化、數據化和智能化方面進行了大量的投資,延伸平臺在相關領域的能力,幫助客戶實現管理流程的數據化和智能化,并通過數據分析和交易撮合為客戶帶來增量業務。
總結 Salesforce 的發展歷程,我們可以得出一些觀點:
- API 已成為價值交付最重要的形式;
- 把 API 作為價值交付形式的產品或組織,當 API 豐富度和能力完整度達到一定水準后,會升級為平臺,通過平臺突破能力瓶頸,實現業務、產品和技術新的進化;
- 平臺能力高低體現在其編程模型上,即是否能幫助用戶高效、低成本的構建新一代應用;
- 平臺除了大幅提升企業價值交付的能力,更重要的是建立起應用開發生態。
雖然云遠比上述 SaaS 案例復雜,但遵循著類似的發展邏輯。幾乎所有云服務的產品功能都通過 API 體現,云服務商也把發展平臺編程模型,提升用戶價值交付能力和建立應用開發生態作為最重要的目標。當我們從編程模型的視角去審視云的產品體系,紛繁復雜的云服務各自的定位逐漸清晰。
基礎設施即服務(IaaS)和容器技術是云的基礎設施,以 K8S 為代表的容器編排服務是云原生應用的操作系統,面向特定領域的后端服務(BaaS)則是云的 API。為了實現更高的生產力,在存儲、數據庫、中間件、大數據、AI 等領域,大量的 BaaS 服務是全托管、Serverless 的形態,這一趨勢已持續多年。例如現在客戶已經非常習慣使用 Serverless 化的對象存儲,而不是自己基于服務器搭建數據存儲系統。當云提供了豐富的 Serverless BaaS 服務后,需要一種新的通用計算服務,能夠屏蔽基礎設施的復雜度,基于云服務快速構建應用。因此 Serverless 計算應運而生,它包含了以下要素:
- Serverless 計算是全托管的計算服務,客戶編寫代碼構建應用,無需管理和運維服務器等底層基礎設施;
- Serverless 計算是通用、普適的,結合云 API(BaaS 服務)的能力,能夠支撐云上所有重要類型的應用;
- Serverless 計算不但實現了最純粹的按需付費(為代碼實際運行消耗的資源付費),也應當支持預付費等計量模式,使得客戶成本在各種場景下,與傳統方式相比都極具競爭力;
不同于虛擬機或容器等面向資源的計算平臺,Serverless 計算是面向應用的。要能整合和聯動云的產品體系及其生態,幫助用戶在價值交付方式上實現顛覆式創新。
現狀:當下 Serverless 在哪些場景落地?
隨著用戶心智的建立,產品本身能力的完善,Serverless 近年來呈加速發展的趨勢。我們看到在很多場景下,用戶使用 Serverless 架構在可靠性、成本和研發運維效率等方面獲得顯著的收益。
1. 小程序 / Web / Mobile / API 后端服務
在小程序、Web/Moible 應用、API 服務等場景中,業務邏輯復雜多變,迭代上線速度要求高,而且這類在線應用,資源利用率通常小于 30%,尤其是小程序等長尾應用,資源利用率更是低于 10%。Serverless 計算的免運維,按需付費的特點非常適合構建小程序/Web/Mobile/API 后端系統,通過預留計算資源+實時自動伸縮,開發者能夠快速構建延時穩定、能承載高頻訪問的在線應用。在阿里內部,使用 Serverless 構建后端服務是落地最多的場景,包括前端全棧領域的 Serverless For Frontends,機器學習算法服務,小程序平臺實現等等。
2. 大規模批處理任務處理
典型的離線任務批處理系統,例如大規模音視頻文件轉碼服務,包含計算資源管理、任務優先級調度、任務編排、任務可靠執行、任務數據可視化等一系列功能。如果從機器或者容器層次開始構建,用戶通常使用消息隊列進行任務信息的持久化和計算資源的分配,使用 K8S 等容器編排系統實現資源的伸縮和容錯,自行搭建或集成監控報警系統。如果任務涉及多個步驟,還需要整合工作流服務實現可靠步驟執行,而通過 Serverless 計算平臺,用戶只需要專注于實現任務處理邏輯,而且 Serverless 計算的極致彈性能很好的滿足突發任務對算力的需求。
3. 基于事件驅動架構的在線應用和離線數據處理
典型的 Serverless 計算服務通過事件驅動的方式廣泛的與云端各種類型服務集成,用戶無需管理服務器等基礎設施和編寫集成多個服務的膠水代碼,輕松構建松耦合、分布式的事件驅動架構的應用。
以阿里云函數計算為例,通過 API 網關和函數計算的集成,用戶可以快速實現 API 后端服務。通過對象存儲和函數計算的事件集成,函數能實時響應對象創建、刪除等事件,實現以對象存儲為中心的大規模數據處理。通過消息中間件和函數計算的事件集成,用戶能快速實現海量消息的處理。通過和阿里云 EventBridge 的集成,無論是一方云服務,還是三方的 SaaS 服務,或者是用戶自建的系統,所有的事件都可以快速便捷的被函數計算處理。
4. 運維自動化
通過定時觸發器,用戶能夠用函數快速實現定時任務,而無須管理執行任務的底層服務器。通過云監控觸發器,用戶可以接收 ECS 重啟/宕機,OSS 對象存儲流控等 IaaS 層服務的運維事件,并自動觸發函數處理。
未來:Serverless 將向何處去?
近年來,Serverless 一直在高速發展,呈現出越來越大的影響力。主流的云服務商也在不斷地豐富云產品體系,提供更好的開發工具,更高效的應用交付流水線,更好的可觀測性,更細膩的產品間集成,但一切才剛剛開始。
趨勢 1:Serverless 將無處不在
任何足夠復雜的技術方案將被實現為全托管、Serverless 化的后端服務。不只是云產品,也包括合作伙伴和三方服務。云及其生態的能力將通過 API + Serverless 來體現。事實上,對于任何以 API 作為功能透出方式的平臺型產品或組織,例如釘釘、微信、滴滴等等,Serverless 都將是其平臺戰略中最重要的部分。
趨勢 2:和容器生態將更加緊密融合
容器在應用的可移植性和交付流程敏捷性上實現了顛覆式創新,是現代應用構建和交付的一次重要變革。
絕佳的可移植性:通過操作系統虛擬化技術,應用及其運行環境被虛擬化為容器,實現了 build once,run anywhere,容器化的應用能夠無差別的運行在開發機,on-premise,以及公有云的環境中;
敏捷的交付流程:容器鏡像已經成為應用封裝和分發事實上的標準,今天全世界的開發人員都習慣將容器作為應用交付和分發的方式,圍繞容器,已經建立了完整的應用交付工具鏈。
容器已經成為現代應用運行的基礎,但用戶仍然需要負責服務器等基礎設施的管理,包括水位預估、機器運維等等。因此業界出現了 AWS Fargate,阿里云 ECI 等 Serverless container 服務,幫助用戶專注于容器化應用的構建,而無需負擔基礎設施的管理成本。從 Serverless 視角來看,函數計算等 Serverless 計算服務為用戶帶來了全自動的伸縮模式、極致彈性以及完全按需的計量方式,卻在用戶開發習慣的兼容性、可移植性、完工具鏈和生態等方面面臨挑戰,而這正是容器的優勢。相信隨著技術的發展,未來容器鏡像也將成為函數計算等更多 Serverless 應用的分發方式,容器龐大的工具生態和 Serverless 免運維、極致彈性結合在一起,為用戶帶來全新的體驗。
趨勢 3:Serverless 將通過事件驅動的方式連接云及其生態中的一切
我們已經在前述章節中討論了函數計算通過事件驅動和云服務連接的意義,這樣的能力也會擴展到整個云的生態。無論是用戶自己的應用,還是合作伙伴的服務;無論是 on-premise 環境,還是公有云,所有的事件都能以 Serverless 的方式處理。云服務及其生態將更緊密的連接在一些,成為用戶構建彈性高可用的應用的基石。
趨勢 4:Serverless 計算將持續提高計算密度,實現最佳的性能功耗比和性能價格比
虛擬機和容器是兩種取向不同的虛擬化技術。前者安全性強,開銷小,后者則相反。Serverless 計算平臺一方面要求最高的安全性和最小的資源開銷,魚與熊掌必須兼得;另一方面要保持對原有程序執行方式的兼容,比如支持任意二進制文件,這使得適用于特定語言 VM 的方案不可行。因此 AWS Firecracker,Google gVisor 這樣新的輕量虛擬化技術應運而生。以 AWS Firecracker 為例,通過對設備模型的裁剪和 kernel 加載流程的優化,實現了百毫秒的啟動速度和極小的內存開銷。一臺裸金屬實例支持數以千計的實例運行。結合應用負載感知的資源調度算法,云服務商有望在保持穩定性能的前提下,將超賣率提升一個數量級。
當 Serverless 計算的規模和影響力變得越來越大,從應用框架、語言、硬件等層面,根據 Serverless 的負載特點進行端對端優化就變得非常有意義。新的 Java 虛擬機技術大幅提高 Java 應用的啟動速度,非易失性內存幫助實例更快被喚醒,CPU 硬件和操作系統協作對高密環境下性能擾動實現精細隔離,所有新技術正在創造嶄新的計算環境。
實現最佳性能功耗比和性能價格比的另一個重要方向是支持異構硬件。長期以來,X86 處理器的性能越來越難以提升。而在 AI 等對算力要求極高的場景,GPU、FPGA、TPU(Tensor Processing Units) 等架構的處理器的計算效率更具優勢。隨著異構硬件虛擬化、資源池化、異構資源調度、應用框架支持的成熟,異構硬件的算力也能通過 Serverless 的方式釋放,大幅降低用戶使用門檻。
后記
2009 年,UC Berkeley 發表了一篇著名的論文“Above the Clouds: A Berkeley View of Cloud Computing”,討論了云及其價值、挑戰和演進路徑,其中的真知灼見在云的十年發展歷程中陸續被驗證,今天已沒有人懷疑云的價值和對各行各業深刻的影響。2019 年,他們發表了新的論文,“Cloud Programming Simplified: A Berkeley View on Serverless Computing”,預言 Serverless 將主導下一個十年云的發展,產業的發展是螺旋式上升,Serverless 的誕生和興起邏輯早已蘊含其中。相信下一個十年, Serverless 將重塑企業創新的方式,幫助云成為社會發展的強大動力。