2006年,AWS釋出了其第一個Serverless儲存服務S3和第一個Serverful計算服務EC2,這也是AWS正式釋出的前兩個服務,開啟了雲端計算波瀾壯闊的旅程。2014年,AWS釋出了業界第一個Serverless計算服務AWS Lambda。在今年(2021年)的AWS re:Invent大會上,AWS又釋出三個Serverless新品:Redshift Serverless、EMR Serverless和MSK Serverless。AWS的15年發展史(2006到2021年),也是一部AWS創造和深耕Serverless的歷史,一部從Serverful不斷向Serverless演進的歷史。
那麼,為什麼AWS服務要不斷從Serverful演進到Serverless呢?在AWS心中到底Serverless是什麼呢?為什麼AWS一直不遺餘力地推進Serverless呢?Serverless到底是一種技術模式還是商業模式呢?對雲端計算行業影響如何呢?以下內容是筆者和幾個業界朋友討論後的成果,總結後分享出來。
一、AWS Serverless是什麼?
在看什麼是Serverless之前,我們來看看典型的Serverful服務EC2。在筆者看來,EC2和在使用者自己資料中心內的物理伺服器或虛擬機器沒有本質區別,主要區別只是位置變了(從使用者資料中心挪到了AWS資料中心),以及管理角色變了(使用者自己管理變為AWS託管),而使用者還是要負責EC2伺服器的選型、確定規格、配置和運維,及其生命週期管理。
而Serverless則是一個全新物種。在AWS Serverless Q&A頁面(https://aws.amazon.com/cn/serverless/faqs/)中,AWS是這麼定義Serverless的:
-
no server management:使用者不需要管理伺服器
-
pay-for-value services:按價值付費
-
continuous scaling:能自動持續擴容
-
built-in fault tolerance:內建高可用和容錯能力
這定義非常簡潔。簡而言之,AWS Serverless服務就是客戶不需要自己管理伺服器(Server)的服務。這不是說這些服務就不需要Server,而是AWS把這些服務與Server相關的事情都替客戶幹了。
AWS已有的Serverless服務如下表所列:
領域 |
Serverless 服務 |
計算 |
AWS Lambda,AWS Fargate |
程式整合 |
Amazon EventBridge,Amazon SNS,AWS Step Functions, Amazon SQS, Amazon API Gateway, AWS AppSync |
儲存 |
AWS S3,Amazon DynamoDB,Amazon RDS,Amazon Aurora Serverless |
分析 |
Redshift Serverless,EMR Serverless,MSK Serverless |
實際上,AWS一直在做從Serverful到Serverless持續進化的過程:
(till 2019)
一服務被Serverless化後會帶來什麼變化呢?以EMR Serverless為例,AWS官網中的下圖將其與託管EMR服務做了對比。使用者在使用託管EMR服務時,首先需要確定例項的規格和叢集規模,然後建立叢集並配置叢集引數,再提交job,任務處理完畢後銷燬叢集。而使用EMR Serverless服務時,使用者只需要建立應用、提交job,叢集的事情完全由AWS負責。
利用Serverless服務開發的應用就是Serverless架構的應用程式。在下面這個例子中:
-
每當一個新的帖子文字檔案被新增到 S3 儲存桶中,一個專用的 API 閘道器就會觸發一個 Lambda 函式1,該函式負責初始化mp3檔案生成的過程,並將資訊的副本儲存在 DynamoDB 中。
-
函式1還向 SNS 釋出訊息,觸發 Lambda 函式3。這個函式呼叫 Amazon Polly 介面,將文字轉換成與文字相同語言的mp3音訊,並將音訊檔案儲存在S3儲存桶中,並將儲存桶中的地址資訊儲存到DynamoDB的相應資訊的記錄中。
-
函式2則負責從Dynamodb中獲取文字檔案的完整資訊,包括對應的mp3音訊在S3儲存桶中的地址。
二、Serverless對AWS客戶的價值:節省成本、減少管理和技術負擔、加快應用交付速度
(一)節省成本
國內某公有云廠商對其1000多雲客戶進行了資源利用情況分析,抽樣超過一萬計算節點發現,42%的節點資源利用率低於10%,72%的節點資源利用率低於20%。在AWS上,許多客戶一直都只使用 EC2例項可用容量的10-20%。這說明,大部分公有云使用者都存在一定程度的資源浪費,這一方面是在浪費使用者自己的錢,另一方面雲服務商的伺服器空轉導致不環保。
AWS Serverless服務能根據任務處理的需要而自動增減伺服器資源,使用者只需為所用資源付費。因為這些資源是真正為使用者創造價值的資源,沒有資源被浪費,因此,AWS將這種付費模式稱為“按價值付費(Pay-for-value)”。此外,無伺服器架構可以降低總體擁有成本(TCO) ,因為許多叢集的網路、安全和配置調優等管理任務也不再需要了。
這是因為Serverless架構的服務和應用採用事件驅動(Event-driven)架構,只有在任務處理啟動後,AWS才會建立必要的Server資源,並在處理過程中自動調整資源,處理完畢後就釋放資源。
從這原理出發,我們能看出來,通常認為Serverless服務只適合於低頻場景,因為每次Server的冷啟動會帶來一定的應用時延,這會帶來不好的使用者體驗。但是,在特定場景中,體驗要求可以稍微降低一點,而省錢是主要的需求。另一方面,Serverless免去了使用者配置、優化、運維伺服器叢集的負擔,簡化了使用者操作,這又提升了使用者體驗。
在https://www.simform.com/blog/aws-lambda-pricing/中,作者對比了兩種場景下AWS Lambda和EC2的費用:
-
在圖1所示的低頻場景中,每個月只進行2萬次處理,此時Lambda大大節省成本。
-
在圖2所示的高頻場景中,每個月要進行3千萬次處理,Lambda成本遠高於EC2。
(圖1)
(圖2)
(二)降低技術和管理負擔
從企業管理者角度來看,使用Serverless服務,不需要建立、配置和管理伺服器叢集,也就不需要這方面的技術人員,這也能降低使用門檻、人力成本和管理負擔。
從開發人員角度來看,Serverless讓開發者不用關心繁瑣的基礎設施運維工作,使開發者可以把更多的精力放在核心業務的實現上。因此,無論是前端開發者,還是後端開發者,Serverless都可以幫助他們提升效率,降低交付時間。
可以說,Serverless是雲端計算的未來,是整個軟體和應用架構的未來,符合“雲端計算讓應用越來越簡單”這個大方向。
(三)加快應用交付速度
有了Serverless後,雲服務廠商底層架構承擔的事情越多,業務層面需要關注的架構和運維工作就越少,應用交付的時間就越快。
在AWS官網中,AWS宣稱使用Serverless服務能加快應用交付速度。其Coca-Cola的案例中,使用 AWS Lambda 等無伺服器構建塊,1 周內即開發出應用原型,在 150 天內將 Web 應用程式從原型擴充套件到 10000 臺機器。
三、Serverless對AWS自己的價值:討好使用者、施壓追隨者、環保標杆
AWS為什麼一直不遺餘力地推廣Serverless呢?可能有以下幾個原因:
-
AWS是在踐行其“以客戶為中心”的理念:一方面,Serverless是一種新型雲資源使用模式,對低頻場景的客戶來說能切實降低雲成本;另一方面,Serverless又能減輕使用者負擔、降低使用門檻、優化使用者體驗。
-
Serverless架構下,伺服器資源顆粒度會更細,更有利於填充其資源池的波峰,提高伺服器使用率。而且,節省出來的伺服器可以通過Spot Instance方式售賣給客戶。這能提升AWS的毛利率。
-
AWS服務價格比較貴,所以搞Serverless對低頻客戶的成本削減幫助會很大,效果會很顯著,能收到更多客戶點贊,俘虜更多使用者的芳心,可收穫更多成本敏感型新使用者。
-
AWS淨利潤超過20%,有足夠的利潤空間來承受可能的利潤下降。
-
Serverless能減少空閒伺服器空轉,這將能降低碳排放,這符合環保主義者的要求,有助於樹立AWS的環保形象。
-
有助於施壓追隨者。
為什麼說Serverless能幫助AWS施壓追隨者呢?
-
AWS做Serverless的榜樣在先,使用者能得到切實的好處,追隨者不得不跟進。
-
本來追隨者為了追趕AWS,往往定價降低,或者折扣很大,大規模上Serverless後收入減少將對其財務帶來很大壓力。
-
追隨者沒有AWS那麼大的規模和那麼強的運營能力,大規模上Serverless後對其財務壓力會進一步增大。
四、Serverless的路還很長
一方面,與其說Serverless是一種新技術模式,不如說它是一種新商業模式。AWS搞Serverless確實是一著好棋,既討好了使用者,又施壓了追隨者,還討好了環保主義者,還還進一步強化了其創新引領者的形象。這既是AWS創新能力的體現,也是其以使用者為中心的理念的體現。
另一方面,Serverless的路還很長,因為還有大量問題待解決,比如冷啟動時間比較長、函式除錯手段缺乏、適用場景有限、產品種類較少、應用尚未推廣開來、尚未形成開發者大群體、缺乏業界統一標準等問題。這些問題還需要AWS和業界繼續努力。
相信AWS會發布更多更好的Serverless服務,相信AWS會持續優化Serverless應用架構及模式,相信有越來越多使用者採用Serverless,相信雲上應用開發會變得越來越簡單高效。
感謝您的閱讀,歡迎關注我的微信公眾號!