Serverless and Microservices

探討Serverless和 Microservices有什麼不同或者異同,可以從三個面向來看: Infrastructure, Architecture, and Applications.

Infrastructure

Microservices並不關心這面向,但是Serverless本質上是FaaS。如同下圖,這對於DevOps和程式開發人員,有會很大的不同點,尤其是在思考 scale 和 state 的存放,會影響到程式開發的邏輯設計。

https://gyazo.com/88032693eaa5affca8f98a57e9849887
來源: Ali雲

Architecture

90% Serverless的架構設計,都是Event Driven Architecture (EDA)。Google cloud function的首頁,立刻說明 Lightweight Event-based Microservices。

Microservices的軟體架構實踐有很多種手法,Event Driven Architecture (EDA) 只是其中的一個手法。

但這邊需要特別強調一件事,EDA的架構設計的中心是以Event為主,第一個Priority是回應 Event 事件,the source of truth 是 the log of events。這和我們習慣的 Data Centric 的架構是不同的。

舉例來說,你對著 Amazon Echo 說,請幫我下訂單買娃娃屋。EDA的架構是先回應:是的,我收到你的需求了。你不希望等 Echo 把訂單下好 1 分鐘後才回應吧??

EDA的 source of truth 是 events log,因此要考慮到Events重複,失敗,重送,順序性等等的問題。在這架構下,Queue Services扮演了很重要的角色。

https://gyazo.com/63147dae1a2a1abe6afcbe280aaec53c

Applications

Microservices在軟體應用層扮演了很重要的角色,一個 Microservices 背後可能包含一個到多個的 serverless function calls

以Amazon的Mobile網頁為例

source:nigx

這頁面包含了購物車的Item數目,使用者對這商品Review的星等,商品的主要訊息,推薦相關的商品,庫存資料,和運送資訊。如果以傳統的寫法,可能透過Middleware,去資料庫不同的Table把相關的訊息拿出來後,在全部回給mobile client。

如果透過Microservices的架構,可能會用到下面的服務:

  • Shopping Cart Services: 提供購物車Item數量
  • Order Services: 提供 order history
  • Catalog Services: 提供商品主檔訊息
  • Review Services: 商品星等
  • Inventory Services: 商品庫存
  • Shipping Services: 商品運送方法
  • Recommendation Services: 推薦相關商品

這樣 Mobile client需要與很多的Microservices溝通,例如 servicesName.api.company.com,變得 mobile client與services之間沒有辦法 loose couple。如果各個的 services api還用了不同的protocols或者是認證,cache的機制不同,如下圖:

source:kong

因此在軟體應用層上,需要一個 "Mediator" 扮演這樣的角色,因此會看到 API Gateway:去統整這些 microservices的溝通,也讓 API 的管理能夠一致。

而且 API Gateway可以沿用舊的 uri:/ProductDetails=xxx 的介面,把後面相關的 microservices 給封裝起來。

目前AWS APIGateway提供了AWS Lambda functions的功能,所以後面的Microservices不在侷限於 EC2 了,可以透過 FaaS 的方式去提供。

results matching ""

    No results matching ""