現代雲原生設計理念

_小碼甲發表於2021-02-06

前文傳送門

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

相關文章