現代雲原生設計理念
- 2021 年 2 月 6 日
- 筆記
- Cloud Native, DevOps
前文傳送門
Modern design
您將如何設計雲原生應用程序? 您將遵循哪些原則、模式和最佳實踐?哪些基礎和操作需要特別關注?
The Twelve-Factor Application
目前被普遍接受的基於雲的方法論是”十二要素應用程序”。它給出了開發人員遵循的一組原則和實踐,以構建針對現代雲環境優化的應用程序。
儘管適用於任何基於Web的應用程序,但許多從業者都將「十二要素」視為構建雲原生應用程序的堅實基礎。基於這些原則構建的系統可以快速部署和擴展,並可以添加功能以對市場變化做出快速反應。
重申「十二要素」方法論:
| 要素 | 描述 |
|---|---|
| Code Base | 代碼倉庫中一套代碼,多處部署 |
| Dependencies | 每個微服務顯式聲明並打包自己的依賴項、變更項 |
| Configurations | 在環境中外掛配置 |
| Backing Services | 將支撐性服務(數據存儲,緩存,消息代理)看做附加資源,通過可尋址的URL公開,解耦資源與應用 |
| Build, Release, Run | 嚴格區分構建和運行階段,現代CI/CD技術實現了這一原則。 |
| Processes | 將應用程序作為一個或多個無狀態進程執行 |
| Port Binding | 通過端口綁定暴露服務 |
| Concurrency | 對進程模型進行橫向擴展 |
| Disposability | 快速啟動和正常關閉可最大程度地提高魯棒性 |
| Dev/Prod Parity | 保持開發、生產儘可能相似 |
| Logging | 將日誌視為事件流。使用事件聚合器將事件傳遞到數據挖掘/日誌管理工具 |
| Admin Processes | 用一次性動作 執行管理任務 |
凱文·霍夫曼(Kevin Hoffman)詳細介紹了最初的12個要素(寫於2011年)。此外,他針對現代雲應用程序提出另外三個因素。
| 新要素 | 描述 |
|---|---|
| API First | 使一切成為服務(如果你的代碼將被前端、網關或其他服務使用) |
| Telemetry | 在程序設計中包含遙測、健康檢查 |
| Authentication/Authorization | 一開始就實現身份認證和鑒權 |
關鍵的設計考量
除了十二要素方法提供的指導之外,還必須注意幾個關鍵的設計考量。
Communication 通信
-
前端如何與後端服務通信?是直接溝通嗎?或者提煉出後端網關,提供靈活性、管控力和安全性?
-
後端服務之間如何通信? 直接Http調用,可能導致耦合併影響性能和敏捷性?還是考慮使用queue/Topic技術解耦消息?
第4章「雲原生通信模式」詳細介紹了通信。
Resiliency 彈性
微服務架構將系統從進程內網絡通信轉移到進程外網絡通信。在分佈式體系結構中,當服務B不響應來自服務A的網絡請求會發生什麼?或者,當服務C暫時不可用,其他調用C的服務被阻塞時該怎麼辦?
第6章「雲原生彈性」詳細介紹了彈性。
Distributed Data 分佈式數據
按照設計,每個微服務都封裝自己的數據,通過公開接口暴露。
如果是這樣,您如何實現跨多個服務的數據查詢/事務?
分佈式數據將在第5章「雲原生數據模式」中詳細介紹。
Identity 身份
您的服務將如何識別誰在訪問它以及他們擁有哪些權限?
身份將在第8章「身份」中詳細介紹。
Ref
- //tanzu.vmware.com/content/blog/beyond-the-twelve-factor-app
- //docs.microsoft.com/en-us/dotnet/architecture/cloud-native/definition
- 👉公眾號後台回復 cloud-native, 獲取微軟出品《Architecting Cloud Native .NET Apps》PDF


