【摘要】 對于任何企業,MSA的實施都不能一蹴而就。企業在實施MSA的過程中應該避免教條主義、理想化、低估必需的投資、邊學習新流程邊變更架構、擔憂失敗等風險與陷阱。企業可以在MSA實施指導框架的指引下,進一步建立MSA的戰略目標、原則、實踐、工具平臺視圖,以更好地指導MSA落地。
隨著領域驅動設計(DDD,Domain Driven Design)、持續交付、云計算、小型自治團隊、大型集群系統等實踐的發展與流行,微服務架構(MSA,Microservices Architecture)也應運而生。在數字化轉型時代,許多組織為了提升業務敏捷性(Business Agility),發現MSA或許是幫助自己更快地交付軟件的強大武器,因為MSA有望在靈活的變更交付、技術靈活性、更精準的彈性等方面帶來益處。
然而企業卻很快發現,單純將MSA視為靈活的架構模式,往往難以保障MSA的成功實施。因而,若要成功實施MSA,除了改變軟件交付物的結構化方式,企業必須在以下方面進行改變:
??? 應用開發、交付與運維的組織方式
???? 維持流動性同時確保質量與彈性的流程
???? 微服務相關模式與實踐所必需的新工具與平臺
那么,企業到底應該如何實施MSA才能提升成功率呢?有沒有一種指導性框架為MSA實施保駕護航呢?在探討此問題之前,也許明確一下MSA的適用場景更為緊要。在《人月神話》中,Fred Brooks曾指出“軟件沒有銀彈”。此論斷對于MSA仍然適用。企業不應該將MSA視為軟件交付的銀彈。從嚴格意義上來講,MSA的優勢在于幫助企業解決軟件領域的復雜問題(Complex Problem)。一般來講,復雜問題具有以下幾個特征:(1)沒有足夠的數據進行決策;(2)必須進行探索;(3)需要浮現式設計與實踐;(4)面向行動的方法。關于復雜問題的詳細闡述,可以參考Cynephin框架(https://www.mindtools.com/pages/article/cynefin-framework.htm)。當然,在企業面對復雜問題或者系統時,如果同時需要頻繁部署來快速響應市場需求、需要高可用以及快速彈性神作,MSA將成為優先選項。
基于MSA的適用場景,并結合諸多企業實施MSA的實踐,形成了如下圖所示的實施指導框架,稱之為“3PSD”。
?
圖 MSA實施指導框架3PSD
從上圖中,可以自然而然地看出流程(Process)、人員(People)、平臺(Platform)、服務(Service)、數據(Data)之間相互影響:
???? 從流程來講:流程需要平臺自動化、流程驅動自治團隊、流程優化驅動服務的范疇界定;
???? 從人員來講:人員文化支持流程優化,人員技能影響平臺選擇;
???? 從平臺來講:平臺能力支持流程執行、人員角色、約束服務,平臺持久化與移動數據;
???? 從服務來講:服務的定義驅動平臺需求、人員組織、數據組織;
???? 從數據來講:數據的組織驅動服務的范疇界定,數據需求驅動平臺需求。
因此,對于實施MSA的軟件系統來講,流程、人員、平臺、服務、數據很難一步到位,采用迭代方式成為一種必然選擇。當然,MSA的實施難以有明顯的最終狀態,因為隨著迭代深入,實施框架中的5個方面發生變化的概率非常大。
在實施MSA之前,企業組織確定了適應的場景后,應該開展準備工作,評估組織的就緒程度。簡單來講,企業可以從以下幾方面進行評估:
1.???? 真正敏捷;敏捷開發流程與實踐;
2.???? 自動化程度:構建、測試、部署等;
3.???? 工程師文化:規劃交付,并準備好試驗與演進;
4.???? 踐行DevOps;持續交付等;
5.???? 產品思維;
經過評估認為實施MSA已就緒后,企業應該確認商業干系人需要快速、可靠、靈活的功能交付與變更帶來的價值。這樣,企業就可以按照指導框架在流程、人員、平臺、服務、數據等方面開展相關工作。
1????? 優化流程
開發與運維流程通常是MSA交付中最為關鍵并且最容易被忽略的部分。MSA需要非常高水平的開發與運維流程的成熟度與自動化。目前來看,DevOps的原則、文化與實踐對于MSA的成功至關重要。企業組織應該從以下方面優化流程:
??? 持續集成/持續交付:利用流水線實現微服務并行獨立部署
??? 流程自動化:構建、測試、部署、環境等環境自動化能力
??? DevOps反饋環:在交付流程中增強反饋,隨時掌握服務狀態、健康度,行為等
??? 發布方式與計劃:每個獨立的微服務可以獨立、按需發布,來滿足快速的需要;
??? 優化測試與QA流程:采用TDD/BDD、集成測試等測試左移(Shift-left testing)與金絲雀測試、A/B測試、在線巡檢等測試右移(Shift-right testing)相結合
??? 解決自治與分布服務引發的治理訴求:服務的SLA定義,服務下線等等;
2????? 提升人員與技能
通過MSA實現敏捷性非常依賴小型的自治團隊。此團隊應該與業務服務領域對齊,而不是技術領域。此組織結構與敏捷開發中的特性團隊或者組件團隊類似。關于組織結構,可以參考“DevOps組織如何選取拓撲結構以提升協作效能”。對于人員與技能,建議在以下在以下方面進行提升:
??? 平衡自治與責任
??? 敏捷與DevOps文化相關的原則
??? 面向服務的工程師文化
??? 現代開發范式與概念:例如DDD、事件驅動架構、浮現式架構等;
??? 更廣泛的技術技能:例如T-shaped;
??? 擁有質量意識:例如單元測試、測試自動化等;
3????? 構建技術平臺
對于實施MAS的企業來講,不單單需要敏捷與DevOps流程、良好組織與技能豐富的人員,更需要技術平臺來管理日益增加的復雜性。
圖 MSA技術平臺全景
如上圖所示,MSA平臺不應被過度簡化為容器化,MSA平臺包含了外部網關、Service Mesh、遙測與監控、CI/CD自動化等部件。關于MSA平臺的選擇可以分為2類:一類為云服務提供商平臺,一類為部署在自行管理基礎設施上的云原生應用平臺。對于第一類平臺,企業可以選擇華為云相關服務,例如DevCloud()提供了端到端DevOps平臺能力,可以有效支持CI/CD自動化;ServiceStage提供面向企業的云原生應用管理服務。
4????? 定義服務
在MSA中,模塊化的主要單元是服務本身,主要包括:(1)功能集合與訪問功能的接口;(2)實現的邊界與部署單元。企業可以應用DDD與限定上下文來劃定微服務,并在靈活性、復雜性與性能之間進行權限,使微服務滿足以下特征:
???? 松耦合
???? 高內聚
???? 采用公開標準暴露接口
???? 實現單一職能
???? 擁有管理的數據
???? 獨立部署
???? 獨立伸縮
???? 將發布的API與微服務實現解耦
5????? 解耦數據
為了提高敏捷度以及服務間的獨立性,企業必須對服務的數據進行解耦。數據解耦可以參考以下原則進行:
??? 數據必須被一個也只能被一個微服務管理(創建、更新與刪除)
??? 數據只能通過管理此數據的微服務提供的接口訪問
??? 嚴格禁止不同服務擁有的數據之間的數據庫強制型關系(例如引用完整性)
??? 需要平衡數據解耦帶來復雜性與敏捷性
??? 可以通過API契約進行數據關系建模
對于任何企業,MSA的實施都不能一蹴而就。企業在實施MSA的過程中應該避免教條主義、理想化、低估必需的投資、邊學習新流程邊變更架構、擔憂失敗等風險與陷阱。企業可以在MSA實施指導框架的指引下,進一步建立MSA的戰略目標、原則、實踐、工具平臺視圖,以更好地指導MSA落地。
圖 MSA戰略目標-原則-實踐-平臺工具視圖
華為云DevCloud作為一站式云端DevOps平臺,集成華為近30年研發實踐和前沿理念,面向開發者提供研發工具服務,讓軟件開發簡單高效。現支持5人以下額度范圍內,可以免費使用,并且可以預約免費的產品演示和技術交流,詳情查看華為云官網