- Serverless工程實踐:從入門到進階
- 劉宇
- 3865字
- 2021-07-30 09:07:47
第0章 從云計算到Serverless
自世界上第一臺通用計算機ENIAC(Electronic Numerical Integrator And Computer)誕生以來,計算機科學與技術的發展就從未停止過前進的腳步,尤其是近些年計算機技術的發展更是日新月異,有不斷取得突破的人工智能技術,有潛力無限的物聯網技術和區塊鏈技術,當然還有本書的主題——不斷更新、不斷迭代、已走進“尋常百姓家”的云計算。
提起云計算,不得不提效用計算(Utility Computing)。在1961年麻省理工學院百年紀念典禮上,人工智能之父、1971年圖靈獎獲得者約翰·麥卡錫第一次提出了效用計算的概念,這個概念可算是云計算的一個“最初的”“超前的”遐想模型。麥卡錫認為,計算資源在未來將變成一種公共資源,會像生活中的水、電、煤氣一樣被每個人使用。1984年,SUN公司聯合創始人約翰·蓋奇提出了“網絡就是計算機”的重要猜想,認為分布式計算技術將會帶來一個新世界。12年后,即1996年,康柏公司的一群技術主管在討論計算業務的發展時,首次使用了“云計算”(Cloud Computing)這個詞,并認為商業計算會向云計算的方向轉移。這就是“云計算”從雛形到正式被提出的基本過程。
自被提出之后,云計算如同雨后春筍般蓬勃發展。2003年到2006年,谷歌先后發表了多篇文章,指明了HDFS(分布式文件系統)、MapReduce(并行計算)和HBase(分布式數據庫)的技術基礎以及未來機會,奠定了云計算的發展方向。2006年,Google首席執行官埃里克·施密特在搜索引擎大會上首次正式提出“云計算”的概念。同年,亞馬遜第一次將其彈性計算能力作為云服務進行售賣,這也標志著云計算這種新的商業模式正式誕生。兩年后,即2008年,微軟發布云計算平臺Windows Azure,嘗試將技術和服務托管化、線上化。到了2009年,著名的《伯克利云計算白皮書》(Above the Clouds: A Berkeley View of Cloud Computing)發表,文中指出:云計算是一個即將實現的古老夢想,是計算作為基礎設施這一長久以來夢想的新稱謂,它在最近正快速變為商業現實。文中明確地為云計算下了定義:云計算包含互聯網上的應用服務及在數據中心提供這些服務的軟硬件設施。同時文中也提出了云計算所面臨的問題和機遇,如表0-1所示。
表0-1 云計算面臨的問題和機遇

在伯克利團隊的這篇文章中,作者不僅對云計算下了一個比較明確的定義,提出了它面臨的挑戰和存在的機遇,更對云計算的未來發展方向等進行了大膽預測。同年,阿里巴巴在江蘇南京建立首個“電子商務云計算中心”(即現在的阿里云)。至此,云計算進入了更快速的發展階段。
在云計算飛速發展的階段如圖0-1所示,云計算的形態也在不斷地演進,從IaaS到PaaS,再到SaaS,云計算逐漸“找到了正確的發展方向”。2012年在由Iron.io的副總裁Ken Form所寫的一篇名為“Why The Future of Software and Apps is Serverless”的文章中,他提出了一個新的觀點:即使云計算已經逐漸興起,大家仍然在圍繞著服務器轉;不過,這不會持續太久,云應用正在朝著無服務器方向發展,這將對應用程序的創建和分發產生重大影響。2014年Amazon發布了AWS Lambda,讓Serverless這一范式提高到一個全新的層面,為云中運行的應用程序提供了一種全新的系統體系結構,至此再也不需要在服務器上持續運行進程以等待HTTP請求或API調用,而是可以通過某種機制觸發代碼執行,通常這只需要在AWS的某臺服務器上配置一個簡單的功能。著名IT咨詢顧問Ant Stanley在2015年7月發文解釋他心目中的Serverless,認為“服務器已死”。

圖0-1 云計算發展歷程
Serverless概念進一步發酵。2016年10月在倫敦舉辦了第一屆ServerlessConf大會,來自全世界的40多位演講嘉賓與開發者分享了關于這個領域的進展,介紹了Serverless的發展機會以及所面臨的挑戰。這場大會是針對Serverless領域的第一場較大規模的會議,在Serverless的發展史上具有里程碑意義。
如圖0-2所示,截至2017年,各大云廠商基本上都已經在Serverless方向進行了基礎的布局,國內的幾大云廠商也都在這一年先后邁入“Serverless時代”。從IaaS到PaaS再到SaaS的過程中,如圖0-3所示,云計算所表現出的去服務器化越來越明顯,那么Ken Form所提出來的Serverless又是什么?它在云計算發展的過程中在扮演什么角色呢?它的去服務器化又到了什么程度呢?

圖0-2 部分Serverless產品發布時間

圖0-3 IaaS、PaaS、SaaS的區別
Serverless翻譯成中文是無服務器,所謂的無服務器并非是說不需要依靠服務器,而是說開發者再也不用過多考慮服務器的問題,可以更專注在產品代碼上,同時計算資源也開始作為服務出現,而不是作為服務器的概念出現。Serverless是一種構建和管理基于微服務架構的完整流程,允許用戶在服務部署級別而不是服務器部署級別來管理用戶的應用部署。與傳統架構的不同之處在于,它完全由第三方管理,由事件觸發,暫存(可能只存在于一次調用的過程中)在計算容器內。Serverless部署應用時不涉及更多的基礎設施建設,即可實現自動構建、部署并啟動服務。
近些年來,微服務成為軟件架構領域另一個熱門的話題。如果說微服務以專注于單一責任與功能的小型功能塊為基礎,利用模塊化的方式組合出復雜的大型應用程序,那么就可以認為Serverless是一種可以讓代碼更加碎片化的軟件架構范式。Serverless的這一功能被稱為“函數即服務(Faas,Function as a Services)。而所謂的“函數”提供的是相比微服務更加細小的程序單元。例如,微服務可以代表為某個客戶執行所有CRUD操作所需的代碼,而FaaS中的函數可以代表客戶所要執行的每個操作。當觸發“創建賬戶”事件后,將通過函數的方式執行相應的“函數”。單就這一層意思來說,可以簡單地將Serverless架構與FaaS概念等同起來。但Serverless和FaaS還是不同的,Serverless和FaaS被廣為接受的關系是:
Serverless = FaaS + BaaS(+ …)
可見,Serverless的組成除了FaaS和BaaS之外,還有一系列的省略號,其實這是Serverless給予大家的遐想空間,給予這個時代的一些期待。
隨著各大廠商在Serverless領域布局的展開,Serverless也逐漸從啟蒙階段(市場教育階段)進入到更深一步生產應用階段(最佳實踐階段)。
2017年,CNCF Serverless工作組成立,開始以社區的力量推進Serverless布局,并進行相關的立項研究與探索。2017年年末,eWEEK的Chris J. Preimesberger發表文章“Predictions 2018: Why Serverless Processing May Be Wave of the Future”。在這篇文章中,多位來自知名團隊以及公司的相關負責人對Serverless表達了自己的想法。
- Sumo Logic產品營銷副總裁Kalyan Ramanathan: Serverless可能是繼容器之后的未來。
- Avere Systems技術總監Dan Nydick:我們將看到更多Serverless技術和托管服務。
- Atlassian平臺負責人Steve Deasy:2018年,軟件的構建方式將改變。
- Evident.io的首席執行官Tim Prendergast和客戶解決方案副總裁John Martinez:容器和Serverless正在興起,但它們會帶來安全問題。
- Contino美國總裁Jason McDonald:Serverless將繼續擴大其影響力。
- 美國OVH布道師兼原理系統工程師Paul Stephenson:在2018年我們將會更清楚地認識到Serverless可以解決哪些問題。
- 數據探險首席執行官Seth Noble:Serverless將在2018年與其他技術進行集成。
- Platform9首席執行官Sirish Raghuram:Kubernetes將在Serverless產品AWS Lambda的部署中發揮更大的影響力。
- Accelerite首席執行官Nara Rajagopalan:Serverless將改變開發模式。
而到了2018年,Serverless的發展速度要比想象中的更快。在這一年,Google發布了Knative,一個基于Kubernetes的開源Serverless框架,具備構建容器、流量調配、彈性伸縮、零實例、函數事件等能力。AWS發布了Firecracker,一個開源的虛擬化技術,面向基于函數的服務,創建和管控安全的、多租戶的容器。Firecracker的目標是把傳統虛擬機的安全性和隔離性與容器的訴求和資源效率結合起來。在這一年,CNCF也正式發布了Serverless領域的白皮書CNCF Serverless Whitepaper V1.0,闡明Serverless技術概況、生態系統狀態,為CNCF的下一步動作做指導。加州大學伯克利分校也在2018年發表文章“Serverless Computing: One Step Forward, Two Steps Back”,表達了對Serverless的擔憂。伯克利團隊認為Serverless會影響開源服務創新,它讓FaaS產品在云編程方面邁出了一大步,提供了一種實際上可管理的、看似無限的計算平臺,但是忽略了高效數據處理的重要性,并阻礙了分布式系統的開發。
任何一個新的技術和概念,都會遇到挑戰、引發擔憂,就如同當年云計算在出現時也被一些人(如Oracle公司總裁Larry Ellison、GNU發起人Richard Stallman)認為只是又一個商業炒作的概念,毫無新意。當然,事實也證明,任何一個新的事物,都只有在經歷各種挑戰和質疑之后,才能更茁壯地成長。Serverless也不例外。從2019年開始,Serverless進入到了一個真正意義上的生產應用、最佳實踐快速發展階段。2019年對Serverless而言是非常關鍵的一年,也是Serverless具有里程碑式發展的一年,被很多人定義為“Serverless正式發展的元年”。在這一年,國內最大的開源活動之一KubeCon + CloudNativeCon在上海舉行,大量Serverless主題演講在此次活動中發表。著名的伯克利斷言“Cloud Programming Simplified: A Berkeley View on Serverless Computing也在這一年發表。伯克利的態度已從一年前的質疑與悲觀轉變成了自信與期待。伯克利斷言Serverless將會在接下來的十年間被大量采用,將會得到飛速的發展,并且表達了以下觀點。
- 新的BaaS存儲服務會被發明,以擴展在Serverless計算上能夠運行更加適配的應用程序類型。這樣的存儲能夠與本地塊存儲的性能相匹配,而且具有臨時和持久兩個選項。
- 將出現比現有的x86微處理器更多的異構計算機。
- Serverless架構下的編程更安全、易用。Serverless架構不僅具有高級語言的抽象能力,還有很好的細粒度的隔離性。
- 基于Serverless計算的價格將低于Serverful計算,至少不會高于Serverful計算。
- Serverless將會接入更多的后臺支撐服務,如OLTP數據庫、消息隊列服務等。
- Serverless計算一旦取得技術上的突破,將會導致Serverful服務下滑。
- Serverless將會成為云時代默認的計算范式,將會取代Serverful計算,因此也意味著服務器-客戶端模式的終結。
在學術界,不僅僅加州大學伯克利分校針對Serverless發表過多篇論文,很多國內外高校也都已經在Serverless領域投入了大量精力。Serverless已經成為學術界的研究熱點,從2017年開始,每年相關論文數呈2倍速增長。
如圖0-4所示,從2012年Serverless概念被正式提出,2014年AWS Lambda的發布開啟Serverless的商業化,到2017年各大廠商紛紛布局Serverless領域,再到2019年Serverless成為熱點議題,Serverless正在逐漸朝著更完整、更清晰的方向發展。隨著5G時代的到來,Serverless將會在更多領域發揮至關重要的作用。

圖0-4 Serverless發展歷程
從IaaS、FaaS到SaaS,再到如今的Serverless,云計算在十余年中發生了翻天覆地的變化,從虛擬空間到云主機,從自建數據庫等業務到云數據庫等服務,云計算發展迅速,沒人知道云計算的終態是什么。有人說Serverless實現了當初云計算的目標,Serverless才是真正的云計算,但是沒人可以肯定Serverless就是云計算的終態?;蛟SServerless也僅僅是一個過渡產物,這還需要時間來驗證,但可以明確的是,技術可以改變世界,未來可期。
- LaTeX Cookbook
- Docker and Kubernetes for Java Developers
- Practical UX Design
- LabVIEW入門與實戰開發100例
- DevOps for Networking
- Servlet/JSP深入詳解
- Python自然語言處理(微課版)
- Mastering AndEngine Game Development
- PHP+MySQL網站開發項目式教程
- Access 2016數據庫管
- 可解釋機器學習:模型、方法與實踐
- D3.js By Example
- App Inventor少兒趣味編程動手做
- ASP.NET求職寶典
- Learning Bootstrap 4(Second Edition)