現代雲原生設計理念

前文傳送門

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