序一:Serverless使能應用極簡開發和運維
雲計算的不斷發展,正在快速地改變著傳統IT的開發、運維。虛擬機、容器、微服務等技術不斷地提升著雲計算的能力。
Serverless無服務器計算的出現,為軟件開發帶來了跨越式的變革。它讓開發者隻需關注軟件產品的功能代碼實現,而無須花費精力在計算、存儲、網絡等基礎設施的資源分配與擴縮容上,也不必在軟件的部署與運維等領域花精力。這些功能現在由雲服務提供商以函數即服務(Function as a Service)和後端即服務(Backend as a Service)的雲服務方式提供。Serverless極大地解放了開發者,已成為最有潛力的雲計算技術發展方向,也必將成為智能數字化社會的未來開發模式。
隨著移動應用、IoT和小程序等的快速發展,Serverless的架構思想和開發方式逐漸被開發者所接受,有望用來支撐應用現代化的新生態。Serverless對開發者的價值主要體現在三個方面:
第一、極簡開發實現業務快速上線:在架構層面,函數的粒度相比微服務更小,業務構建更加靈活敏捷;在開發層面,函數計算平臺提供了更簡單的編程模型,讓開發者更聚焦業務邏輯,而BaaS服務有效管理了後端服務的對接與協同。基於Serverless模式,可實現以天為單位完成業務上線。
第二、彈性自運維降低維護成本:對於互聯網應用所面臨的高可用及突發流量挑戰,Serverless可以實現從計算到數據的大規模高並發彈性擴容,幫助開發者屏蔽底層基礎設施的運維,降低了開發者的維護負擔。
第三、按需收費降低資源使用成本:Serverless按實際使用量付費的特性,不但可以讓大中型企業提升資源利用率,而且可以讓創業公司降低基礎設施投入和減少資源使用成本。
華為公司近年來在Serverless技術方向進行了持續的研發和實踐。針對函數計算存在的一繫列痛點,如函數缺少有狀態支持、冷啟動時間長、彈性擴容慢、後端服務及中間件管理復雜等問題,設計、實現了支持函數計算的分布式內核—戎,並將其作為底座支撐華為終端雲的雲函數服務。在過去的三年中,華為終端雲在豐富的業務場景上對函數計算服務進行了大量實踐,如搜索、視頻、遊戲、機器學習、瀏覽器、全屋智能、運動健康等,並根據業務的反饋對函數計算內核進行了持續優化。截至目前,基戎的雲函數服務在全球華為終端雲正式上線,廣泛服務於HMS生態的移動應用開發者。
本書繫統性地介紹了Serverless的基礎知識、關鍵技術,以戎在Serverless先進性上的創新探索,提供了華為終端雲基於Serverless快速開發和上線翻譯業務的端到端完整案例。希望讀者通過閱讀本書,在深入了解Serverless技術原理和架構的同時,能在業務實踐中靈活運用Serverless高效構建應用。
華為雲CEO、消費者雲服務總裁 張平安
序二:Serverless將成為應用架構發展的未來趨勢
縱觀計算技術發展的歷史長河,計算設施從物理機發展到虛擬機,再從虛擬機發展到容器;計算服務架構從傳統單體繫統架構演進到微服務架構,再從微服務架構演進到近年來興起的Serverless架構,其驅動力主要聚焦在提高資源共享和利用效率、方便用戶做應用開發、簡化計算基礎設施運維管理及全方位降低計算基礎設施建設和運維成本等方面。
Serverless字面上的解釋是“無服務器”,但其真正含義是應用開發者無須考慮服務器的相關問題,可以直接依靠第三方的計算資源。該概念自2012年出現後,得到國內外各大雲計算廠商及學術界的高度關注和熱情支持,隨之湧現出laaS和PaaS等各層次不同形態的基於Serverless理念的服務,以及各種開源的社區和框架。這類衍生技術及產品在豐富Serverless生態的同時,也給用戶理解Serverless架構增加了復雜度。
《華為Senerles 核心技術與實踐》一書理論與實踐相結合, 繫統地介紹了構建 Serverless 平臺的設計思路和實現方案,對如何支持有狀態復雜應用、高性能函數運行時及高效對接後端服務等核心技術進行了有意義地探索,並在雲平臺上實戰演練了完整的應用案例。相信本書能對相關專業領域的學生和軟件從業人員掌握Serverless 技術原理和應用方法提供有益的幫助。
中國工程院院士,國防科技大學教授、博士生導師 盧錫城
序三:Serverless將成為微服務架構的終極模式
計算範式演進的最終目標是為開發者提供高階編程抽像,從而將他們從煩瑣的工作中解脫出來,更加專注解決業務本身的問題,進而使得開發者可以方便地使用更高效(往往也更復雜)的算法,或者解決更大規模的問題。在過去的數十年中,為了應對應用快速大規模發展的需要,我們的軟件開發模式從客戶端/服務器模式(C/S),發展到模型/視圖/控制(MVC),再到面向服務的架構(SOA),直至當前的微服務;應用的類型也從單體的企業應用,演化到大規模的分布式微服務應用。每一次這樣的演進,都給我們的開發範式帶來更大的靈活性,更高的可伸縮性,以及由此帶來的性能提升,但是卻使得開發範式本身變得更加復雜。相比數十年以前的單體應用,開發、調試、部署和維護大規模分布式微服務要復雜和困難許多。這不僅造成開發者的學習曲線相當陡峭,而且開發、維護一個微服務架構往往需要較高的初始成本。這種情況對於中小型應用是非常不友好的,這些應用的開發者在項目初期就需要面臨兩難的選擇:要麼在創業之初就承擔昂貴的開發成本,要麼在發展到一定規模之後承擔痛苦的重構。雲計算技術發展之初,盡管通過計算資源的虛擬化和池化,降低了我們部署應用的成本,但並沒有從本質上解決上述計算範式演進面臨的問題。而當前,伴隨著企業數字現代化進程的加快,越來越多的應用“為雲而生”,因而旨在簡化雲開發、方便構建分布式應用的新一代“雲原生”Serverless技術應運而生了。
在華為2012實驗室,有一支長期研究分布式並行和雲計算技術的團隊。從2017年起,他們就開始對Serverless技術進行深入研究和探索,從架構到理論,再到繫統實現戎 (分布式內核)就是他們在過去四年中不斷求索的成果。何為Serverless?從狹義上講,就是面向“函數”的計算(或稱“函數即服務”,FaaS);從廣義上講,還包含函數可以調用的一繫列後端服務,如對像存儲、數據管理、增長運營等。相比業界類似的Serverless技術戎首次將“狀態”納入函數計算的概念體繫,從而可以方便高效地實現多函數協同的、復雜的有狀態服務。同時戎進一步提出了統一、標準化的後端平臺概念(Event Bridge和Service Bridge),不僅方便函數和後端服務的集成,而且有助於Serverless應用的跨雲部署。可以說戎將Serverless技術推進到了一個新的高度。 2020年,通過各方通力合作,華為終端雲服務推出基戎的Serverless解決方案,面向廣大的開發者提供開發、構建、增長/運營及質量分析等一繫列服務。本書通過對華為Serverless技術剖析,深入淺出地講解了Serverless的原理、架構、繫統實現,以及相應的關鍵技術,並列舉了若干實戰示例,幫助讀者深入理解和學習Serverless技術。
值得一提的是,Serverless技術本身也是在持續發展的。從某種意義上講,Serverless將會成為微服務架構的終極模式。那時,應用的模塊化、獨立部署、可擴縮、高可用和雲計算技術可實現高度統一和深度結合。最終通過Serverless技術,雲原生應用將會像單機應用一樣可以簡單便捷地進行開發,同時擁有高性能和高可擴縮的能力,從而徹底解決前文提到的雲時代計算範式演進的困局。這種“單機思考,集群並行執行”的體驗會深刻地改變雲原生應用的開發模式,實現跨越式的生產力變革。正如伯克利RISE Lab主任Ion Stoica教授所言:“Serverless將會成為雲時代默認的計算範式,並取代Serverful的計算模式”。我們希望借助本書,為廣大的讀者和工程技術人員提供一些靈感和啟發,共同促進Serverless技術的進一步發展。
華為分布式與並行軟件Lab主任 譚焜博士
前言
風起雲湧的雲計算,在以虛擬化和容器化為技術特征的“資源雲化”階段,極大地簡化了基礎設施運維。如今,在以Serverless新理念標志的“應用雲化”階段,雲計算的目標是進一步簡化雲開發,屏蔽雲端分布式繫統和中間件等的復雜性。Serverless不但能使開發者聚焦業務邏輯以實現跨越式生產力變革,而且以極致彈性和免運維等優勢幫助應用降低成本、開發增效,已成為雲計算“下半場”中各大廠商和開源社區競相擁抱的戰略方向和新興技術。甚至伯克利在《簡化雲編程:伯克利視角下的Serverless計算》一文中預言:Serverless將會成為雲時代默認的計算範式,並取代Serverful(傳統雲)計算模式,而其商業模式變革也被生動地類比為從傳統的“租車”服務發展為真正隨用隨付的“計程車”服務。
廣大開發者、科研人員和信息專業的本科生與研究生應該如何把握快速發展的Serverless技術浪潮呢?最為行之有效的方法之一是,通過完整剖析一個有代表性的Serverless平臺的設計思路和實現方案,來深入學習和掌握Serverless的技術原理與架構精髓,這亦是本書創作的初衷。本書以華為2012實驗室研制的分布式內核—戎在Serverless方向的創新探索為例,詳細闡述了新一代Serverless編程模型、高性能運行時、後端服務對接等一繫列關鍵技術,並深入剖析了華為終端雲基於Serverless實現快速開發和上線翻譯業務的端到端商用案例,幫助讀者從理論走向繫統實踐,身臨其境地體會如何靈活運用Serverless高效構建應用。
本書的第1章重點介紹了Serverless的基礎知識、關鍵技術和生態現狀。通過對第1章的閱讀,讀者可以了解Serverless如何解決微服務實施的痛點,了解當前典型的Serverless平臺(如Lambda)和開源繫統(如OpenWhisk)等的差異化設計,以及Serverless的周邊組件,如開發與部署框架、事件總線、函數工作流等,進而通過總結當前Serverless繫統的不足之處及下一步技術探索方向,為讀者設計Serverless應用架構提供啟發和技術參考。
本書的第2~5章詳細介紹構建新一代Serverless平臺的核心技術。第2章以華為戎為例介紹新一代Serverless平臺的設計理念與技術架構,第3~5章分別對一繫列核心技術展開剖析。其中,第3章介紹有狀態函數編程模型的設計原理和技術實現,並通過生動的場景案例展示有狀態函數編程模型的用法與優勢。第4章分析如何在函數運行時中優化冷啟動、彈性伸縮和函數調度的性能,並提供具體設計方案和範例性能評測。第5章涉及用函數對接各種BaaS服務的通用框架,戎的Event Bridge和Service Bridge為例分別詳解雲上各種服務如何規範化觸發函數,以及在函數中如何標準化調用各種後端服務,如雲存儲和雲數據庫等。
完備的後端服務如雲托管、雲數據庫和雲存儲等也是Serverless平臺必不可少的組成部分,因此第6~8章介紹了華為終端雲為用戶和開發者提供的配套服務。其中,雲數據庫服務是一款Serverless化的數據庫,提供簡單易用的端/雲SDK,適用於移動應用、網頁和服務器開發,方便應用數據在各個客戶端之間、客戶端與服務端之間自動保持同步,幫助應用開發者快速構建安全可靠且多端協同的應用程序,從而讓應用開發者聚焦業務邏輯,無須關注後端繫統的復雜搭建、用戶數據的安全保護、多端數據的同步及服務器部署維護等,可顯著提高業務構建、部署和運營效率。雲存儲服務用於圖片、視頻、文件等內容的上傳、下載、歸檔和備份等。相比於傳統的存儲服務,雲存儲服務具有支持斷點續傳、網絡加速、可靠安全和彈性伸縮等特性,更適合移動應用的文件管理。雲托管服務為開發者的網頁內容提供快速和安全的全球托管服務,支持自定義域名和證書管理,開發者隻需提供申請的域名,無須關注CDN加速和SSL配置,通過控制臺一鍵發布版本即可向全球用戶分發網站內容。
雖然Serverless平臺為開發者提供了一繫列開箱即用的雲函數和後端服務,但是開發者在嘗試用新模式構建實際業務時難免會面臨各種挑戰,例如,業務函數的劃分粒度和策略、由數據變更觸發的業務流程執行及事件驅動編程等。鋻於此,本書的第9~10章以華為的實踐為例,從技術選型、架構設計到業務函數的劃分,再到雲函數、雲托管、雲數據庫和雲存儲服務的搭配使用和代碼示例,對基於Serverless技術構建的翻譯服務進行端到端完整解析,讓讀者能夠快速學習和全面掌握如何運用Serverless技術高效構建應用。
“眾人拾柴火焰高”,感謝華為公司2012實驗室中央軟件院分布式與並行軟件實驗室的大力支持,以戎團隊的不懈投入,感謝華為終端雲同仁們的傾力貢獻和緊密協作。大家共同踐行了“研發一代、應用一代”的務實創新精神,促成了本書中的Serverless架構和技術從原型逐步走向商用,未來更加可期!感謝電子工業出版社的寶貴建議與細致工作,這保證了本書的質量和盡早問世。另外,本書部分內容參考了公開資料和網上調研成果,在此也對相關參考文獻的作者及同行致以誠摯的謝意。
由於水平有限,加之Serverless技術日新月異且應用領域廣泛,書中難免有疏漏和不足之處,懇請廣大讀者批評指正,以便我們在後續版本中改進,並共同推動Serverless生態的蓬勃發展!