![](/uploadfile/2022/0609/20220609033531326.jpg)
此外,云原生應用通常遵循12因素應用框架的原則。它們圍繞以下方面構建:
性能:應用程序在設計時考慮可擴展性,旨在在規模上表現良好。
彈性:應用程序由伸縮性良好的小型、可擴展的組件構建而成。
韌性:應用程序對故障具有很強的復原能力,可自動更換發生故障的組件且不會中斷其他組件的運行。
安全性:在構建應用程序時考慮安全性,確保應用程序或其數據不被攻擊者破壞。
原生架構原則
在構建云原生應用程序時,首先應構建一個可以在多個維度上不斷移動的系統,以實現動態擴展,自動處理故障,并盡可能輕松的添加或刪除組件。以下幾個原則可以使構建的云原生架構更加強大、更加適應變化并且更容易維護。
1.自動化設計
創建可以部署、修復和擴展系統的自動化流程,并且生成相關日志和事件。構建系統以自動處理:
提供的基礎架構,如機器實例;
CI/CD管道中的生成、測試和部署階段;
基于工作負載或其他應用程序要求的動態可擴展性;
備份、運行狀況監視和故障恢復。
2.盡可能保持無狀態
雖然一些云原生純粹主義者認為云原生應用程序應該是無狀態的,但在現實世界中可能很難實現無狀態應用程序的開發。然而也應盡可能使用無狀態組件,因為跟蹤分布式應用程序中的管理狀態(如當前正在運行的實例數)是困難的。無狀態組件使擴展(添加更多副本)、修復(刪除并替換為新實例)、回滾和工作負載平衡(無需關心哪個實例正在處理哪些事務的復雜邏輯)變得更加容易。
3.彈性設計
通過在設計中添加冗余將彈性構建到云原生應用程序中。云原生應用程序通過使用實例集群、數據復制以及多可用區或多區域云部署來避免單點故障。那些必須在本地運行的應用程序應使用混合架構利用公有云以實現高可用性和災難恢復,至少對于其某些組件而言。
一些常見的彈性機制:
能夠識別由連接丟失或服務超時等臨時問題引起的暫時性故障,進行重試請求;
實現斷路器模式,檢查重試操作的次數,并在后續重試時返回錯誤而不激活服務;
允許服務在它們所依賴的其他服務出現故障時正常降級,并且仍提供合理的用戶體驗;
根據應用程序的使用速率限制和節流來識別和限制大容量用戶;
使用補償事務,將業務事務分解為一系列較小的事務,更容易在分布式系統中實現事務一致性。
4.使用微邊界構建每個組件
云原生應用不僅應該從一開始就設計安全性,還應該在假設沒有可信任組件的情況下進行設計。因為應用程序與其用戶之間,甚至內部組件之間可能沒有專用網絡,此時應該致力于強化所有組件、加密數據并在組件之間實現身份驗證,使應用程序更具彈性,并能夠在不受信任的環境中靈活地部署組件。
5.構建多語言架構
云原生應用不需要高度集成的架構、使用相同語言編寫的組件以及使用相同的技術和框架。由于REST
API可以公開每個組件的功能,允許異構組件相互通信和使用,因此可以在充分考慮團隊能力之后,使用能夠提供最大價值和最快上市時間的語言或技術編寫每個組件。
6.組件不可變
通過基礎架構組件不可變以引入高級別的敏捷性和靈活性。這也就意味著不允許在部署后對配置服務器或虛擬機(VM)進行修改。
在部署不可變服務器后,就可以不再對其進行修改,相反,若沒有部署不可變服務器,則應確保已部署的服務器保持原樣且不進行任何修改,以便如果出現問題也可以快速輕松地更換服務器并保持應用程序運行。
以下是使用不可變基礎架構的幾個主要優點:
不可變組件有助于實現一致且可靠的基礎架構,使測試變得更加簡單明了。
部署不可變組件可以更簡單、更可預測。
不可變組件的每次部署都是版本化和自動化,這使得環境回滾更加容易和簡單。
配置飄逸、雪花服務器和錯誤得到緩解,甚至完全消除。
使用云服務時,自動伸縮也毫不費力。
可變服務器會增加成本和迭代時間,嚴重延遲上市時間,不可變的基礎設施則促進了敏捷開發。不可變基礎架構可提高已部署環境的可靠性、一致性和效率,開發人員可以在幾分鐘內重新創建環境。
云原生架構的優缺點
云原生架構有許多優點:
成本:云提供低成本選項,確保系統不間斷運行,為客戶提供服務,此外還可以利用各種云交付功能。若在企業內部提供這些功能,則既耗時又昂貴。
可靠性:云環境提供彈性和可靠性選項,例如可用性區域,可以確保系統永遠不會出現故障,免受中斷的影響,因此避免停機造成的不可挽回的損失。
敏捷性:敏捷開發需要不斷的測試和優化,這在傳統的整體架構中是很困難的,因為一個小小的改變可能會破壞整個系統。云原生系統在構建時考慮了持續變化,因此可以更輕松地更新和調整應用程序。
靈活性:云原生設計與平臺無關,因此若當前系統不適合開發,可以切換到新環境,而不必從頭開始重新編譯。
云原生架構的缺點包括:
解決問題:在傳統體系架構中可以遵循線性計劃來識別問題。而云原生設計存在復雜網絡中相互連接和交互的容器,并且特定組件集之間的路徑可能不明確。如果問題的根源分散在多個容器中,則可能更難找出根本原因。
安全性:由于系統是由大量動態分布式組件構成,云原生架構通常更難以監控和保護。
知識差距:如果開發人員不熟悉云原生系統,則需要重新學習,就像使用新語言一樣,重要的是需要能夠很好地理解新概念,以避免造成嚴重損失的錯誤。
在考慮構建新的云原生架構時,企業組織需要仔細權衡各種優缺點,以便為業務、客戶和利益相關者做出正確的決策。