一文詳解 Serverless 架構模式

2020-12-15 阿里云云棲號

什麼是 Serverless 架構?按照 CNCF 對 Serverless 計算的定義,Serverless 架構應該是採用 FaaS(函數即服務)和 BaaS(後端服務)服務來解決問題的一種設計。這個定義讓我們對 Serverless 的理解稍顯清晰,同時可能也造成了一些困擾和爭論。

隨著需求和技術的發展,業界出現了一些 FaaS 以外的其它形態的 Serverless 計算服務,比如 Google Cloud Run,阿里雲推出的面向應用的 Serverless 應用引擎服務以及 Serverless K8s,這些服務也提供了彈性伸縮能力和按使用計費的收費模式,具備 Serverless 服務的形態,可以說進一步擴大了 Serverless 計算的陣營;

為了消除冷啟動影響,FaaS 類服務如阿里雲的函數計算和 AWS 的 Lambda 相繼推出了預留功能,變得不那麼「按使用付費」了;

一些基於伺服器(Serverful)的後端服務也推出了 Serverless 形態產品,比如 AWS Serverless Aurora,阿里雲 Serverless HBase 服務。

這樣看來,Serverless 的界線是有些模糊的,諸多雲服務都向著 Serverless 方向演進。一個模糊的東西如何指導我們解決業務問題呢?Serverless 有一個根本的理念是一直沒有改變的,即讓用戶最大化地專注業務邏輯,其它的特徵如不關心伺服器、自動彈性、按使用計費等,都是為了實現這個理念而服務。

著名的 Serverless 實踐者 Ben Kehoe 這樣描述 Serverless 原生心智,當我們在業務中考慮做什麼時可以體會一下這種心智:

我的業務是什麼?

做這件事情能不能讓我的業務出類拔萃?

如果不能,我為什麼要做這件事情而不是讓別人來解決這個問題?

在解決業務問題之前沒有必要解決技術問題。

在實踐 Serverless 架構時,最重要的心智不是選擇哪些流行服務和技術,攻克哪些技術難題,而是時刻將專注業務邏輯銘記在心,這樣更容易讓我們選擇合適的技術和服務,明確如何設計應用架構。人的精力是有限的,組織的資源是有限的,Serverless 的理念可以讓我們更好地用有限的資源解決真正需要解決的問題,正是因為我們少做了一些事情,轉而讓別人做這些事情,我們才可以在業務上做的更多。

接下來我們介紹一些常見的場景,並探討如何使用 Serverless 架構支持這些場景。我們主要會採用計算、存儲和消息通信等技術來設計架構,從可運維性、安全性、可靠性、可擴展性、成本幾個角度來衡量架構的優劣。為了讓這種討論不過於抽象,我們會用一些具體的服務作為參考,但是這些架構的思想是通用的,可以用其它類似產品實現。

靜態 Web 站點

假如我們要做一個信息展示的網站,需求很簡單,就像早年的中國黃頁那樣,信息更新很少,大概有以下幾種主要選擇:

買臺伺服器放在 IDC 機房裡託管,運行站點;

去雲廠商上買臺雲伺服器運行站點,為了解決高可用的問題又買了負載均衡服務和多個伺服器;

採用靜態站點方式,直接由對象存儲服務(如 OSS)支持,並使用 CDN 回源 OSS。

這三種方式由雲下到雲上,由管理伺服器到無需管理伺服器,即 Serverless。這一系列的轉變給使用者帶來了什麼變化呢?前兩種方案需要預算,需要擴展,需要實現高可用,需要自行監控等,這些都不是馬老師當年想要的,他只想去展示信息,讓世界了解中國,這是他的業務邏輯。Serverless 正是這樣一種理念,最大化地讓人去專注業務邏輯。第三種方式就是採用了 Serverless 架構去構建一個靜態站點,它有其它方案無法比擬的優勢,比如:

可運維性:無需管理伺服器,比如作業系統的安全補丁升級、故障升級、高可用性,這些雲服務(OSS,CDN)都幫著做了;

可擴展性:無需對資源做預估和考慮未來的擴展,因為 OSS 本身是彈性的,使用 CDN 使得系統延遲更小、費用更低、可用性更高;

成本:按實際使用的資源付費,包括存儲費用和請求費用,沒有請求時不收取請求費用;

安全性:這樣一個系統甚至看不到伺服器,不需要通過 SSH 登錄,DDoS 攻擊也交給雲服務來解決。

單體和微服務應用

靜態頁面和站點適合用於內容少、更新頻率低的場景,反之,就需要動態站點了。比如淘寶的商品頁面,採用靜態頁面方式管理商品信息是不現實的。如何根據用戶請求動態地返回結果呢?我們來看兩種常見的解決方案:

Web 單體應用:所有的應用邏輯都在一個應用中完成,結合資料庫,這種分層架構可以快速實現一些複雜度較低的應用;

微服務應用:隨著業務發展,功能多了,訪問量高了,團隊大了,這時候一般就需要將單體應用中的邏輯拆分成多個執行單元,比如商品頁面上的評論信息、售賣信息、配送信息等,都可以對應一個單獨的微服務。這種架構的好處是每個單元是高度自治的,易於開發(比如使用不同技術)、部署和擴展。但是這種架構也引入了分布式系統的一些問題,如服務間通信的負載均衡、失敗處理等。

處在不同階段不同規模的組織可以選擇適合自身的方式,來解決它面臨的首要業務問題,淘寶最初被人們接受一定不是因為它使用了哪種技術架構。但是無論選擇哪種架構,上面提到的 Serverless 原生心智都有助於我們專注業務。比如:

是否需要自己購置伺服器安裝資料庫,實現高可用、管理備份、升級版本等,還是可以把這些事情交給託管的服務如 RDS;是否可以使用表格存儲、Serverless HBase 等 Serverless 資料庫服務,實現按使用的彈性擴容縮容和付費;

單體應用是需要自己購置伺服器運行,還是可以交給託管服務,如函數計算和 Serverless 應用引擎;

是否可以通過函數來實現輕量級微服務,依賴函數計算提供的負載均衡、自動伸縮、按需付費、日誌採集、系統監控等能力;

基於 Spring Cloud、Dubbo、HSF 等實現的微服務應用是否需要自己購置伺服器部署應用,管理服務發現,負載均衡,彈性伸縮,熔斷,系統監控等,還是可以將這些工作交給諸如 Serverless 應用引擎服務。

上圖右側的架構引入了 API 網關、函數計算或者 Serverless 應用引擎來實現計算層,將大量的工作交給了雲服務完成,讓用戶最大程度上專注實現業務邏輯。其中系統內部多個微服務的交互如下圖所示,通過提供一個商品聚合服務,將內部的多個微服務統一呈現給外部。這裡的微服務可以通過 SAE 或者函數實現。

這樣的架構還可以繼續擴展,比如如何支持不同客戶端的訪問,如上圖右側所示。現實中這種需求是常見的,不同的客戶端需要的信息可能是不同的,手機可以根據位置信息做相關推薦。如何讓手機客戶端和不同瀏覽器都能受益於 Serverless 架構呢?這又牽扯出了另一個詞——Backend for fronted(BFF),即為前端定做的後端,這受到了前端開發工程師的推崇,Serverless 技術讓這個架構廣泛流行,因為前端工程師可以從業務角度出發直接編寫 BFF,而無需管理伺服器相關的令前端工程師更加頭疼的事情。更多實踐可以參見基於函數計算的 BFF 架構。

事件觸發

前面提到的動態頁面生成是同步請求完成的,還有一類常見場景,其中請求處理通常需要較長時間或者較多資源,比如用戶評論中的圖片和視頻內容管理,涉及到如何上傳圖片和處理圖片(縮略圖、水印、審核等)及視頻,以適應不同客戶端的播放需求。

如何對上傳多媒體文件實時處理呢?這個場景的技術架構大體經歷了以下演變:

基於伺服器的單體架構:多媒體文件被上傳到伺服器,由伺服器處理,對多媒體的顯示請求也由伺服器完成;

基於伺服器的微服務架構:多媒體文件被上傳到伺服器,伺服器處理轉存到 OSS,然後將文件地址加入消息隊列,由另一組伺服器處理文件,將處理結果保存到 OSS,對多媒體的顯示請求由 OSS 和 CDN 完成;

Serverless 架構:多媒體直接上傳到 OSS,由 OSS 的事件觸發能力直接觸發函數,函數處理結果保存到 OSS,對多媒體的顯示請求由 OSS 和 CDN 完成。

基於伺服器的單體架構面臨以下問題:

如何處理海量文件?單臺伺服器空間有限,購買更多的伺服器;

如何擴展 Web 應用伺服器?Web 應用伺服器是否適合 CPU 密集型任務?

如何解決上傳請求的高可用?

如果解決顯示請求的高可用?

如何應對請求負載的波峰波谷?

基於伺服器的微服務架構很好地解決了上述的大部分問題,但是仍然面臨一些問題:

管理應用伺服器的高可用性和彈性;

管理文件處理伺服器的彈性;

管理消息隊列的彈性。

而第三種 Serverless 架構很好地解決了上述所有問題。開發人員原來需要做的負載均衡、伺服器的高可用和彈性伸縮、消息隊列都轉移到了服務內部。我們可以看到隨著架構的演進,開發人員做的事情越來越少,系統更加成熟,業務上更加聚焦,大大提升了交付速度。

這裡的 Serverless 架構主要體現的價值是:

事件觸發能力:函數計算服務與事件源(OSS)的原生集成讓使用者無需管理隊列資源,隊列自動擴展,實時處理上傳的多媒體文件;

高彈性和按需付費:圖片和視頻(不同大小的視頻)需要的計算資源規格是不同的,流量的波峰波谷對資源的需求是不同的,現在這種彈性由服務提供,按照用戶的真實使用去擴容縮容,讓用戶 100% 地利用資源,無需為閒置資源付費。

事件觸發能力是 FaaS 服務的一個重要特性,這種 Pub-Sub 事件驅動模式不是一個新的概念,但是在 Serverless 流行之前,事件的生產者、消費者以及中間的連接樞紐都是用戶負責的,就像前面架構演進中的第二個架構。Serverless 讓生產者發送事件,維護連接樞紐都從用戶職責中省略了,而只需關注消費者的邏輯,這就是 Serverless 的價值所在。

函數計算服務還集成其它雲服務事件源,讓你更方便地在業務中使用一些常見的模式,如 Pub/Sub、事件流模式、Event Sourcing 模式。關於更多的函數組合模式可以參見函數組合的 N 種方式。

服務編排

前面的商品頁面雖然複雜,但是所有的操作都是讀操作,聚合服務 API 是無狀態、同步的。我們來看一下電商中的一個核心場景——訂單流程。

這個場景涉及到多個分布式寫的問題,這是引入微服務架構導致的最麻煩的一個問題。單體應用在一定程度上可以比較容易地處理這個流程,因為使用了一個資料庫,可以通過資料庫事務保持數據一致性。但是現實中可能不得不去跟一些外部服務打交道,需要一定的機制保證流程的前進和回退順利完成,解決這個問題的一個經典模式是 Saga 模式,而實現這種模式有兩種不同架構:

一種做法是採用事件驅動模式,驅動流程完成。在這個架構裡,有一個消息總線,感興趣的服務如庫存服務監聽事件,監聽者可以使用伺服器或者函數。藉助於函數計算和消息主題的集成,這個架構也可以完全不使用伺服器。

這個架構模塊是鬆耦合的,職責清晰。不足之處是隨著流程變得更長更加複雜,這個系統變得難以維護。比如很難直觀地了解業務邏輯,執行時的狀態也不宜跟蹤,可運維性比較差。

另外一種架構是基於工作流的 Saga 模式。在這個架構裡,各個服務之間是獨立的,也不通過事件傳遞信息,而是有一個集中的協調者服務來調度單個業務服務,業務邏輯和狀態由集中協調者維護。而實現這個集中的協調者通常面臨以下問題:

編寫大量代碼來實現編排邏輯、狀態維護和錯誤重試等功能,而這些實現又很難被其它應用重用;

維護運行編排應用的基礎設施,以確保編排應用的高可用性和可伸縮性;

考慮狀態持久性,以支持多步驟長時間運行流程並確保流程的事務性。

依賴於雲服務,比如阿里雲的 Serverless 工作流服務,這些事情都可以交給平臺來做,用戶又回到了只需關注業務邏輯的狀態。

下圖右側是流程定義,我們可以看到這實現了前面基於事件的 Saga 模式的效果,並且流程大大簡化,提升了可觀測性。

數據流水線

隨著業務的進一步發展,數據變得越來越多,這時候就可以挖掘數據的價值。比如,分析用戶對網站的使用行為並做相應的推薦。一個數據流水線包括數據採集、處理、分析等多個環節。這樣的服務如果從頭搭建雖然是可行的,但是也是複雜的,我們這裡討論的業務是電商,而不是去提供一個數據流水線服務。有了這樣一個目標,我們做選擇時就會變得簡單明確。

日誌服務(SLS)提供了數據採集、分析和投遞功能;函數計算(FC)可以對日誌服務的數據進行實時處理,將結果寫入其它服務,如日誌服務、OSS;Serverless 工作流服務可以定時批量處理數據,通過函數定義靈活的數據處理邏輯,構建 ETL 作業;數據湖分析(DLA)提供了 Serverless 化的交互式查詢服務,它使用標準 SQL分析對象存儲(OSS)、資料庫(PostgreSQL / MySQL等)、NoSQL(TableStore 等)等多個數據源的數據。

總結

限於篇幅,我們只討論了 Serverless 架構在幾個場景中的應用,但是在實踐中我們可以看出一種共性,即如何將業務邏輯中與業務不相關的工作剝離出去,交給平臺和服務完成。這種各司其職、分工協作的做法在其它場合併不陌生,但是 Serverless 的思想讓這種形態更為明確。Less is more,少的不只是 Server 和圍繞 Server 相關的負擔,還可以是業務以外的方方面面,多的是專注的業務和產品的核心競爭力。

相關焦點

  • 重磅| 阿里開源首個 Serverless 開發者平臺Serverless Devs
    Serverless Devs 包含 Serverless Devs Tool (Serverless 開發者工具)和 Serverless Devs App Store(Serverless 應用中心):   · Serverless Devs Tool 是一款可以讓 Serverless 開發者的開發和運維效率翻倍的工具。
  • AWS發布新一代Amazon Aurora Serverless 更方便SQL Server遷移 |...
    此次AWS繼續這一強勁勢頭,發布了新一代Amazon Aurora Serverless,一個使SQL Server遷移到Amazon Aurora更方便的新功能,以及一個讓更多企業組織更輕鬆的從SQL Server遷移到PostgreSQL的開源項目,。
  • 數據中臺到底包括什麼內容 一文詳解架構設計與組成
    ▲圖4-2數據中臺功能架構1.工具平臺層工具平臺層是數據中臺的載體,包含大數據處理的基礎能力技術,如集數據採集、數據存儲、數據計算、數據安全等於一體的大數據平臺;還包含建設數據中臺的一系列工具,如離線或實時數據研發工具、數據聯通工具
  • 一文詳解架構設計與組成
    ;還包含建設數據中臺的一系列工具,如離線或實時數據研發工具、數據聯通工具、標籤計算工具、算法平臺工具、數據服務工具及自助分析工具。前文提到,數據中臺是需要持續運營的。隨著時間的推移,數據不斷湧入數據中臺,如果沒有一套井然有序的數據資產平臺來進行管理,後果將不堪設想。數據資產管理工具既能幫助企業合理評估、規範和治理信息資產,又可以發揮數據資產價值並促進數據資產持續增值。對於數據資產管理,我們不推薦事後管理,而要與數據研發的過程聯動。
  • 鐵拳7GHOST模式怎麼玩 鐵拳7GHOST模式詳解
    導 讀 大家知道鐵拳7GHOST模式怎麼玩嗎?今天小編為大家帶來了鐵拳7GHOST模式詳解,下面一起來看看吧!
  • 你從未見過的,最全微服務實戰詳解,誰說微服務架構模式只有6種
    下面小編就為大家分享兩份PDF一份是Spring Cloud與Docker高並發微服務架構設計實施:從架構設計、應用開發和運維部署三個方面出發,對微服務架構設計的實施進行全方位的介紹和詳細說明,在這一過程中將使用一個網際網路平臺的實例展開分析和深入實踐。
  • 一文詳解HDMI製造過程
    打開APP 一文詳解HDMI製造過程 線纜行業朋友圈 發表於 2021-01-09 11:17:48 隨著HDMI2.1認證的開啟
  • 《原神》拍照模式怎麼玩 拍照模式玩法功能詳解
    導 讀 《原神》是一款風景非常優美的開放世界遊戲,在遊戲中有一個拍照功能,能夠讓玩家在遇見美麗的風景的時候拍照
  • 一文詳解To B權限設計
    這是」一文」系列的第二篇。本篇主要介紹基於RBAC模型權限設計的方法。看來還是申請成為「圖書館管理員」比較靠譜,雖然需要寫申請書,找老師籤字等走一系列的流程,雖然麻煩,但是這是晚上10點以後進入圖書館的正規途徑。2. 進圖書館小場景和RBAC模型有什麼聯繫?
  • 「集成架構」2020年最好的15個ETL工具(第三部)
    現代應用程式和工作方法需要實時數據來進行處理,為了滿足這一目的,市場上有各種各樣的ETL工具。  使用這樣的資料庫和ETL工具使數據管理任務更加容易,同時改進了數據倉庫。  市場上可用的ETL平臺在很大程度上節省了資金和時間。其中一些是商業的、授權的工具,少數是開源的免費工具。  在本文中,我們將深入研究市場上最流行的ETL工具。
  • 《地牢守護者:覺醒》召喚師技能領主模式效果詳解
    《地牢守護者:覺醒》中召喚師的領主模式技能是非常強大的,很多玩家都不太清楚這個技能的效果是什麼,今天小編就給大家帶來玩家「水槍戰士」分享的召喚師技能領主模式效果詳解,希望能對大家有所幫助。召喚師技能領主模式效果詳解激活技能後,召喚師會前往「水晶維度」,給予你全局戰場視角。特點:激活技能後召喚師會從地圖上消失,玩家可用自上而下的全局視角把握戰鬥局勢。
  • 波士頓諮詢胡瑩詳解險企組織架構調整:多元分化重構客戶邏輯,前臺...
    今天我要蹭一下熱點,講一講「中臺」這個話題,但是我不是技術人員,所以不會從技術的角度講中臺,而是從組織的角度講中臺。面對當下複雜多變的分化環境,組織架構調整是解決方案之一,接下來我跟大家分享的是如何從組織架構看中臺,怎樣打造中臺。
  • 單眼相機手動模式詳解
    我們知道單眼相機有很多曝光模式,有全自動曝光模式、半自動曝光模式和全手動曝光模式,其中全自動曝光模式和半自動曝光模式都是單眼相機根據拍攝環境來設置一些參數,從而達到曝光準確,而全手動模式就不是單眼相機設置參數了,二是拍攝者手動設置所有的參數,接下來我們就來看看單眼相機手動模式詳解。
  • 《荒野大鏢客2》線下模式攻略 新增藏寶圖圖文詳解
    導 讀 《荒野大鏢客2》線下模式新增加了一份寶藏,包含有6根金條,需要玩家找到藏寶圖,根據藏寶圖找到寶藏位置
  • 《荒野大鏢客2》線下模式新增藏寶圖圖文詳解
    《荒野大鏢客2》線下模式新增加了一份寶藏,包含有6根金條,需要玩家找到藏寶圖,根據藏寶圖找到寶藏位置,下邊就給大家帶來「phillytemple」分享的線下模式新增藏寶圖圖文詳解,大家可以來看一看。線下模式新增藏寶圖圖文詳解第一張藏寶圖位置,位於西伊莉莎白西部山坡上的一個方尖碑裡第二章藏寶圖位於聖丹尼北邊沼澤地裡的一個微型教堂屋頂的那個鐘裡第三張圖在那個霍比特人屋子頂上窗戶裡
  • 生化危機啟示錄2突襲模式詳解 突襲模式攻略
    ,其中突襲模式還是非常具有吸引力的,還是挺新奇的。 巴裡來輔助,克萊爾來攻擊   1、怎麼玩突襲模式?   購買特殊版本,或者使用破解版,將會包含克拉爾和巴裡的故事模式內容以及54個突襲模式任務,三個難度設置。隨後的章節中也會包含許多額外的突襲模式地圖,章節2和3中會添加36個任務模式,章節4則會有68個任務。一共擁有超過200的任務並且越來越困難,突襲模式玩家會有激烈的地圖、一波又一波的敵人。   2、突襲模式是在線合作還是離線合作?
  • 《騎馬與砍殺2》領軍者模式阿塞萊兵種詳解
    在《騎馬與砍殺2》的領軍者模式中,阿塞萊是一個考驗配合的勢力,騎兵和弓箭手配合起來很猛,當然全騎兵衝鋒也可以玩,下邊就給大家帶來「lancelot0001」分享的領軍者模式阿塞萊兵種詳解,大家可以來看一看。
  • 卡奧斯COSMOPlat補充聯邦雲架構 大規模定製模式賦能德國工業4.0
    報導提到,卡奧斯COSMOPlat已於今年8月底正式加入IDSA,成為歐盟外首個將平臺架構融入到歐洲數據和雲主權中的工業網際網路平臺。據悉,為了建立安全的數據基礎設施,加強歐洲經濟的競爭力,德國聯邦經濟部長彼得?阿爾特梅爾和法國外長布魯諾?勒梅爾在 6 月 4 日宣布了GAIA-X項目的技術架構和組織結構規劃。
  • PC版《死亡擱淺》拍照模式詳解 或將加入PS4版本
    PC版《死亡擱淺》拍照模式詳解 或將加入PS4版本 今日(3
  • 《荒野大鏢客2》線上模式全槍械手感詳解
    《荒野大鏢客2》線上模式全槍械手感詳解 2018-12-06 12:18  3DMGAME