前文傳送門
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
- https://tanzu.vmware.com/content/blog/beyond-the-twelve-factor-app
- https://docs.microsoft.com/en-us/dotnet/architecture/cloud-native/definition
- ?公眾號後臺回覆 cloud-native, 獲取微軟出品《Architecting Cloud Native .NET Apps》PDF