
源起
回望整個計算機技術發展史,我們會發現 “抽象、解耦、內建” 的主題貫穿其中。産業每一次的抽象、解耦、內建,都将創新推向新的高度,也催生出龐大的市場和新的商業模式。
大型機時代,硬體和軟體都是定制化的,使用專有的硬體、作業系統和應用軟體。
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 架構在可靠性、成本和研發運維效率等方面獲得顯著的收益。
小程式/Web/Mobile/API 後端服務
在小程式、Web/Moible 應用、API 服務等場景中,業務邏輯複雜多變,疊代上線速度要求高,而且這類線上應用,資源使用率通常小于 30%,尤其是小程式等長尾應用,資源使用率更是低于 10%。Serverless 計算的免運維,按需付費的特點非常适合建構小程式/Web/Mobile/API 後端系統,通過預留計算資源+實時自動伸縮,開發者能夠快速建構延時穩定、能承載高頻通路的線上應用。在阿裡内部,使用 Serverless 建構後端服務是落地最多的場景,包括前端全棧領域的 Serverless For Frontends,機器學習算法服務,小程式平台實作等等。
大規模批處理任務處理
典型的離線任務批處理系統,例如大規模音視訊檔案轉碼服務,包含計算資源管理、任務優先級排程、任務編排、任務可靠執行、任務資料可視化等一系列功能。如果從機器或者容器層次開始建構,使用者通常使用消息隊列進行任務資訊的持久化和計算資源的配置設定,使用 K8S 等容器編排系統實作資源的伸縮和容錯,自行搭建或內建監控報警系統。如果任務涉及多個步驟,還需要整合工作流服務實作可靠步驟執行,而通過 Serverless 計算平台,使用者隻需要專注于實作任務處理邏輯,而且 Serverless 計算的極緻彈性能很好的滿足突發任務對算力的需求。
基于事件驅動架構的線上應用和離線資料處理
典型的 Serverless 計算服務通過事件驅動的方式廣泛的與雲端各種類型服務內建,使用者無需管理伺服器等基礎設施和編寫內建多個服務的膠水代碼,輕松建構松耦合、分布式的事件驅動架構的應用。
以阿裡雲函數計算為例,通過 API 網關和函數計算的內建,使用者可以快速實作 API 後端服務。通過對象存儲和函數計算的事件內建,函數能實時響應對象建立、删除等事件,實作以對象存儲為中心的大規模資料處理。通過消息中間件和函數計算的事件內建,使用者能快速實作海量消息的處理。通過和阿裡雲 EventBridge 的內建,無論是一方雲服務,還是三方的 SaaS 服務,或者是使用者自建的系統,所有的事件都可以快速便捷的被函數計算處理。
運維自動化
通過定時觸發器,使用者能夠用函數快速實作定時任務,而無須管理執行任務的底層伺服器。通過雲監控觸發器,使用者可以接收 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 将重塑企業創新的方式,幫助雲成為社會發展的強大動力。