支撐性服務 & 自動化

連載傳送門:

  • 什麼是雲原生?
  • 雲原生設計理念
  • .NET 微服務
  • 談到雲原生,繞不開「容器化」

Backing services

雲原生系統依賴於許多不同的輔助資源,例如數據存儲、消息隊列、監視和身份服務。這些服務統稱為支撐性服務。

下圖顯示了雲原生系統使用的許多常見支撐性服務

支撐性服務幫助實現了「十二要素應用」中的Statelessness原則

要素6提到:「每個微服務應在獨立隔離的進程中執行,將所需狀態資訊作為外部支撐性服務,例如分散式快取或數據存儲」

最佳實踐是將支撐性服務視為附加資源,並使用外部掛載的方式將配置(URL和憑據)動態綁定到微服務。

要素4指出: 「支撐性服務「應通過可定址的URL公開,這樣做解耦了將資源與應用」
要素3指出: 「將配置資訊從微服務中移出並外掛」

Stateless和支撐性服務,這樣鬆散的設計使你可以將一項支撐性服務換成另一項支撐性服務,或將您的程式碼移至其他公有雲,而無需更改主線服務程式碼。

支撐性服務將在第5章「雲原生數據模式」和第4章「雲原生通訊模式」中詳細討論。


自動化

如你所見,雲原生依賴(微服務、容器和現代設計理念)來實現速度和敏捷性。
但是,那只是故事的一部分,你如何配置運行這些系統的雲環境?你如何快速部署應用程式功能和更新?

被廣泛認可的作法是基礎設施即程式碼(IaC)

藉助IaC,你可以自動化平台配置和應用程式部署,你將諸如測試和版本控制之類的軟體工程實踐應用於您的DevOps實踐。你的基礎架構和部署是自動化,一致且可重複的。

Automating infrastructure

在底層,IaC是冪等的,這意味著你可以一遍又一遍地運行相同的腳本,而不會產生副作用。
如果團隊需要進行更改,可以編輯並重新運行腳本,(僅)需要更新的資源受到影響。

在《基礎架構即程式碼》一書中,作者Sam Guckenheimer指出:「實施IaC的團隊可以大規模、快速、穩定地交付。團隊不用手動配置環境,通過程式碼表示的所需環境狀態,來增強交付預期。使用IaC進行基礎架構部署是可重複的,可防止由於配置差異或缺少依賴關係而導致運行時問題」。

Automating deployments

"十二要素應用"指出了從程式碼開發到交付落地的原則

要素5指出:「嚴格區分構建、發行和運行階段。每個發行階段都應標有唯一的ID,並支援回滾功能。」

現代CI/CD實現了這一原則。它們提供的獨立部署步驟,確保將一致的、高品質的程式碼交付給用戶。

下圖演示了獨立的部署過程:

在上圖中,要特別注意任務分離。

開發人員在其開發環境中創建feature分支,反覆迭代「inner loop」(運行和調試)。
完成後,該程式碼將被推送到程式碼存儲庫中,例如GitHub,Azure DevOps或BitBucket。

推送觸發自動構建,構建階段將程式碼轉換為二進位產物。這項工作是通過持續集成(CI)管道實現的,它會自動生成,測試和打包應用程式。

發布階段拾取前面的二進位產物,加上外部應用程式和環境配置資訊,產生不可變更的發行版。該版本將會部署到指定的環境。這項工作是通過持續交付(CD)管道實現的。每個版本都應該是可識別、可追溯的。你可以說:「這次部署的是應用程式的Release 2.1.1版本」。

最後,發布的版本放在目標執行環境中運行。版本不可變,這意味著任何更改都必須創建一個新版本。

應用這些實踐,從根本上發展了軟體發布方式。許多人已經從季度發布轉為按需更新。通過集成過程的一致性,團隊可以更頻繁地提交程式碼更改,從而改善協作和軟體品質。

Tags: