Serverless系列 | 雲計算究竟如何進化出了Serverless?

導讀:近期靈雀雲技術專家邵明岐翻譯了Mike Roberts & John Chapin所著的《What is serverless》一書的部份內容,能夠說是對Serverless科普與觀察的上佳素材。本文爲第1篇,他首先經過回溯雲計算的發展史,來找出是什麼緣由致使進化出了 Serverless,而後解釋 Serverless 到底爲什麼物,最後總結爲何 Serverless 是雲計算成長的必然產物,同時也是應用交付方式的巨大飛躍,很是值得一讀!sql

原著:《What is serverless : understand the latest advances in cloud and service-based architecture》 做者:Mike Roberts & John Chapin 譯文來源:深刻淺出談架構(ID:deep-easy-arch) 譯者:靈雀雲邵明岐編程

讓咱們回到2006年, 那時候尚未 iPhone 和移動互聯網,Ruby on Rails 是一個很是熱門的編程框架,Web 2.0 在當時是互聯網最火熱的名詞。那時候大部分應用程序的後端服務,都是運行在託管或者自建的數據中心和物理服務器上。後端

雲的誕生api

2006年8月發生的事情將從根本上改變這種模式。 亞馬遜新的IT部門 AWS 宣佈推出Elastic Compute Cloud(EC2),EC2是衆多基礎架構即服務(IaaS)產品中的第一個, IaaS容許公司租用計算資源 (主要是面向互聯網應用的虛擬主機),而不是購買本身的服務器, 它還容許人們在幾分鐘以內就能夠獲取到主機資源。 EC2的五個主要優點是:服務器

1.下降人工成本網絡

在 IaaS 出現以前,公司須要僱傭有專門技能的人來管理數據中心和裏面的物理服務器,他們須要管理從電源和網絡,到貨架和安裝,到修復機器的磁盤等物理問題,到設置操做系統(OS)。 經過IaaS,全部這些都消失了,而是都交給 IaaS 服務提供商,好比 AWS 或者阿里雲。架構

2.下降風險框架

在管理本身的物理服務器時,常常會遭遇一些意外事件,好比硬件故障,從而致使系統不穩定或者長時間宕機,由於硬件問題很難預測,而且可能須要很長時間才能解決。 經過IaaS,客戶雖然仍須要作一些工做來對抗硬件故障發生的風險,但再也不須要知道如何修復硬件, 相反,能夠簡單地在幾分鐘內申請到新機器實例,並從新安裝應用程序,從而限制了這些問題的風險。less

3.下降基礎設施成本異步

在大部分狀況下,當您考慮電源、網絡等成本的時候,EC2實例的成本比運行本身的硬件便宜,尤爲是當您只想臨時須要運行主機幾天或幾周而不是幾個月時。

4.靈活擴展

考慮到IaaS帶來的擴展優點,基礎設施成本顯着降低,經過IaaS,公司在擴展其運行的服務器的數量和類型方面具備更大的靈活性, 再也不須要提早幾個月預先購買10臺高端服務器,相反,您能夠從一個或兩個低功耗,廉價的實例開始,而後隨着時間的推移逐漸擴展您的實例數量和類型。

5.交付時間短

在託管服務器的舊時代,爲新應用程序採購和配置服務器可能須要數月時間。 若是你想出新的想法,而且但願儘快嘗試一下,在傳統的方式下很難辦到。 使用IaaS,交付時間從幾個月縮短到幾分鐘。

基礎設施外包

使用 IaaS,本質上咱們能夠認爲是基礎設施外包的技術。 當咱們開發和運營軟件時,咱們須要作的工做大體能夠分爲兩類:一類是針對需求須要定製的工做。另一類是和其餘公司都差很少,比較通用的工做。

基礎設施就是屬於第二種,其範圍包括物理的設備,例如運行咱們機器,電路,網絡等,也包括一些通用的軟件功能,好比用戶認證。

基礎設施外包一般能夠由服務提供商(SP)提供。 例如,電力由電力供應商提供,而且網絡由互聯網服務提供商(ISP)提供,他們經過 2 種模式來減低成本和提升效率:規模化和技術創新。

規模化

幾乎全部形式的基礎設施外包都經過規模化的模式來下降成本,把大量工做打包在一塊兒批量作,成本比單獨一件一件作,效率大大提升。例如,AWS 能夠以遠低於小公司的價格購買相同規格的服務器,由於 AWS 一次性購買成千上萬的服務器,而不是購買幾十臺服務器。 一樣,AWS 的每臺服務器運營成本遠低於自建 IDC 的公司。

技術創新

基礎設施外包一般也部分歸因於技術創新。好比 EC2,是經過硬件虛擬化的技術來實現的。在IaaS出現以前,一些IT供應商已經開始容許公司來按月租用物理服務器。顯然,EC2 的按小時租用主機的方式更具吸引力,並且,虛擬化技術能夠將物理服務器細分爲許多更小的,快速啓動和關閉的虛擬機(VM),這樣 IaaS 才變得可行。

基礎設施外包與 IaaS 的五大好處徹底一致:

• 下降人工成本 :減小人員,減小維護基礎設施工做所需的時間; • 下降風險 :消除了一部分對特殊技能專家的需求,而且可以得到及時的運營支持能力; • 下降資源成本 :一樣功能的成本更低; • 提升擴展的靈活性:能夠訪問更多資源和不一樣類型的相似資源,而不會形成重大損失或浪費; • 縮短交付週期:縮短重新想法到生產可用性的交付時間;

固然,基礎設施外包也有其缺點和侷限性,咱們將在後面的部分介紹。

雲計算的發展

雲計算的發展是從IaaS開始的,好比EC2和AWS Simple Storage Service(S3), AWS是雲計算早期的推進者,緊隨其後的還有微軟、谷歌、阿里雲等。當咱們談論「雲」時,咱們一般指的是公共雲,可是,咱們也看到了私有云的市場發展的也不錯,好比OpenStack。

公共雲以後的另一個潮流是PaaS,Heroku是當時最受歡迎的PaaS廠商之一, PaaS層面置於IaaS之上,將操做系統(OS)添加到外包的基礎架構中,使用PaaS,您只需部署應用程序,雲平臺負責操做系統安裝、補丁升級、系統級監控、服務發現等。

Heroku是公有云服務,Cloud Foundry是PaaS的一個私有云版本, 因爲PaaS位於現有虛擬化解決方案之上,所以您能夠在企業內部部署或者在IaaS公共雲服務上部署「私有PaaS」,同時使用公共雲和私有云一般被稱爲混合雲, 可以在混合雲環境中實現一個統一的PaaS平臺對企業特別有用。

在虛擬機之上使用PaaS的最新方式是使用容器,Docker在過去幾年中變得很是很是受歡迎,由於它能夠從操做系統開始,更清楚地描述應用程序的系統需求,而管理/編排容器的雲服務,一般稱爲容器服務(CaaS),好比Google的Container Engine和AWS的ECS。 一些私有云的CaaS是Kubernetes和Mesos,您也能夠把它們搭建在公共IaaS或者私有IaaS之上運行。

就像IaaS同樣,PaaS和CaaS都是基礎設施外包的另一種更加高級的形式,它們和IaaS的主要不一樣之處是,有更高級別的抽象性,容許咱們將運行應用的更多技術細節交給雲平臺,所以,PaaS和CaaS帶給咱們的好處,與咱們以前列出的IaaS的五個好處徹底同樣,因此,咱們能夠將全部這三個(IaaS,PaaS,CaaS)組合爲計算即服務(Compute as a Service)。

** Serverless時代到來**

前面解釋了半天雲計算的發展史,主要就是想引入主題——Serverless。它將會是雲計算演進的下一個重要技術,也是另一種形式的基礎設施外包,它一樣具備咱們已經看到的雲計算的五大優點,雲廠商一樣也是經過規模化和技術創新來提供這些優點。

Serverless 並不等於 FaaS

大部分人開始瞭解Serverless時,會有一個誤區,覺得Serverless就是FaaS,好比AWS的Lambda,Google的Cloud Function。但深刻研究就會發現,Serverless實際上涵蓋了一系列技術,咱們將這些技術分爲兩類:Backend as a Service(BaaS)和Functions as a Service(FaaS),因此,簡單來講Serverless=BaaS+FaaS。

BaaS

BaaS就是用現成的第三方服務替換原來本身編碼實現或者本身搭建的服務器端組件,它在概念上更接近於Software as a Service(SaaS),不一樣之處在於SaaS一般是關於外包業務流程,好比人力資源或銷售工具,或者像Github這樣的服務技術工做者的產品。然而對於BaaS來講,其實是將應用程序分解成更小的組件,並將其中一部分組件用第三方提供的服務來完成,這個第三方服務一般就叫作BaaS。

BaaS服務是經過API遠程調用的組件,而不是SDK,或者Library,咱們經過遠程API的調用,來完成應用程序的一部分功能。這裏有一個很好的例子是身份驗證,許多應用程序經過本身的代碼來實現註冊、登陸、密碼管理等功能,可是這些代碼在不少應用程序中很是類似,一樣的事情無數的公司和團隊作過了無數遍,已經很是成熟了,能夠把它們抽象出來變成一個第三方公共服務再好不過,這正是Auth0和亞馬遜的Cogono等產品的目標,這兩種產品都容許任何人,不須要寫一行代碼的狀況,就能夠在移動應用程序和Web應用程序上實現很是完善的身份驗證和用戶管理功能。

BaaS最先的時候,在移動應用程序開發中特別受歡迎,一開始人們甚至把它叫作Mobile Backend as a Service(MBaaS),可是實際上,BaaS除了被用做移動應用的後端服務以外,還能夠應用到很是多的場景,好比咱們能夠不須要本身搭建和維護Mysql實例,而是使用亞馬遜的RDS服務,或者能夠用Kinesis替換本身搭建和管理的Kafka消息隊列,其餘數據基礎設施服務包括文件系統、對象存儲和數據倉庫、語音分析、以及咱們以前提到的身份驗證,這些服務都是BaaS,均可以做爲一個應用的後端服務的一部分。

FaaS

Serverless的另外一半是FaaS, FaaS是Compute as a Service的另外一種形式,概念上容易混淆的地方在於,AWS有時候將本身的FaaS服務,Lambda,稱爲Serverless Compute。

FaaS是一種構建和部署服務器端軟件的新方法,只不過粒度更細,可以獨立的部署某一個函數,許多人認爲Serverless就是FaaS,可是實際上並不徹底正確。

咱們經過傳統方式部署服務器端軟件時,從主機實例開始,一般是虛擬機(VM)實例或容器(參見下圖), 而後咱們在主機中部署應用程序,若是主機是VM或容器,那麼應用程序是一個操做系統進程, 一般咱們的應用程序中的代碼實現了一些不一樣功能的操做,例如,Web服務提供檢索和更新資源的操做。

FaaS改變了這種部署模式(以下圖), 部署模型中少了主機實例和應用程序進程,咱們只關注實現應用程序邏輯的各個操做和函數,將這些函數代碼單獨上傳到雲供應商提供的FaaS平臺。

可是,這些函數在雲服務託管的服務器進程中缺省處於空閒狀態,直到須要它們運行的時候纔會被激活(以下圖), 經過配置FaaS平臺來監聽每一個函數的激活事件。 當該事件發生時,FaaS平臺實例化函數,而後使用觸發事件調用它。

一旦該函數執行結束了,理論上FaaS平臺能夠銷燬掉實例,不過,一般爲了優化性能,會將函數實例保留一段時間,能夠被下一個事件複用。

FaaS本質上是一種事件驅動的模型,除了提供託管和執行代碼的平臺以外,FaaS平臺還集成了各類同步和異步事件源,HTTP API網關就是一種同步事件源,消息總線、對象存儲或相似於(cron)的定時器就是一種異步源。

AWS在2014年就推出了Lambda,到目前爲止成熟度和接受度已經得到大幅的提升,一些公司天天在使用Lambda處理數十億的事件,到目前爲止,Lambda集成了超過20種不一樣類型的事件源,能夠支持各類不一樣類型的應用程序。

除了AWS Lambda以外,還有其餘一些來自Microsoft,IBM,Google廠商的商業FaaS產品,正如咱們以前討論的各類其餘計算即服務平臺(IaaS,PaaS,CaaS)同樣,也有能夠運行在私有云上開源FaaS項目,私有的FaaS領域目前比較早期,沒有絕對的領先者,一些比較活躍的項目有OpenWhisk、Fission、IronFuncions、Serverless、Nuclio等。

** 爲何FaaS和BaaS都叫Serverless?**

從表面上看,BaaS和FaaS徹底不一樣,BaaS是託管應用程序的一部分依賴組件,FaaS託管應用程序的代碼,那麼爲何咱們把它們放在一塊兒,都叫作Serverless呢?

這裏的關鍵就是不須要管理本身的服務器主機或服務器進程,徹底使用Serverless架構的應用程序,將再也不須要考慮服務器或者進程,應用程序的全部邏輯。不管您是本身編寫的,仍是與第三方服務集成的部分,都運行在徹底彈性的環境中,狀態也採用以相似彈性的形式存儲,無服務器並不意味着服務器已經消失,這只是意味着着您再也不須要關心它們了。

Serverless帶給雲計算的重大變化

在雲計算過去十年的發展中,咱們已經將應用程序的運行環境和通用組件,愈來愈多的外包給雲廠商。Serverless也一樣符合這一趨勢,主機管理、操做系統管理、資源分配、擴展、甚至應用邏輯的整個組件,都外包給雲廠商,在成本和運營效率方面得到了顯著的提高。

可是,在應用程序架構方面,Serverless有很大的變化。以前的雲計算服務,並無從根本上改變設計應用程序的方式,例如,當使用Docker這樣的工具時,咱們在應用程序周圍放置了一個更薄的「盒子」,但它仍然是一個盒子,邏輯架構不會發生顯著的變化,在雲中託管MySQL實例時,咱們仍然須要考慮工做負載所需的虛擬機資源,並且仍須要考慮故障切換。

這種狀況隨着Serverless而發生變化,而且是很是大的變化,FaaS本質上是和傳統架構很是不同的架構類型——事件驅動模型。它的部署方式更加細粒度,以及須要將狀態保存到FaaS組件以外,BaaS使咱們無需編寫完整的邏輯組件,但須要將應用程序與雲廠商提供的特定接口和模型集成。

那麼,Serverless的應用程序架構到底有什麼不一樣之處,它看起來到底長什麼樣子? 這是咱們接下來要討論的內容。

相關文章
相關標籤/搜索