一、面向服務設計的原則
- 服務可復用:不管是否存在即時復用的機會,服務均被設計為支持潛在的可復用
- 服務共享一個標准契約:為了與服務提供者交互,消費者需要導入服務提供者的服務契約,這個契約可以是一個IDL文件,Java接口定義,WSDL文件,甚至是接口說明文檔
- 服務是松耦合的:服務被設計為功能相對獨立,盡量不依賴其他服務的獨立功能提供者
- 服務是底層邏輯的抽象:只有經服務契約所暴露的服務隊外部世界可見,契約之外底層的實現邏輯是不可見的
- 服務是可組合、可編排的:多個服務可能被編排組合成一個新的服務,這允許不同邏輯抽象的自由組合,促進服務的復用
- 服務是自治的:邏輯由服務所控制,並位於一個清晰的邊界內,服務已經在邊界內被控制,不依賴其他服務
- 服務是無狀態的:服務應當不需要管理狀態信息,因此能夠維持送耦合性。服務應該被盡可能設計成無狀態,即便意味着要將狀態管理移至他處
- 服務是可被自動發現的:服務發布上線后,允許被其他消費者自動發現;當服務提供者下線后,允許消費者接收服務下線通知。
二、服務治理
SOA服務化之后,應用服務化之后給系統運維帶來很大挑戰:
- 分布式框架下的服務調用性能
- 服務化架構如何支持線性擴展
- 如何實現高效、實時的服務多維度監控
- 大規模分布式環境下的故障快速定界和定位
- 分布式環境下海量日志在線檢索、模糊查詢
- 服務的流控、超時控制、服務升降級等管控手段
- 服務的划分原則,如何實現最大程度復用
此時,SOA服務治理是關鍵。SOA服務治理主要包括如下幾個方面:
1、服務定義
SOA治理最基礎的方面就是監視服務的創建過程。必須對服務進行標識,描述其功能,確定其行為范圍並設計其接口。創建服務時需要與使用這些服務的團隊進行協調,以確保服務能夠滿足消費者需求,避免重復工作。
2、服務生命周期管理
服務的生命周期通常有五個主要的階段。
- 計划階段
- 測試階段
- 運行階段
- 棄用階段
- 廢棄階段
3、服務版本治理
新版本的前向兼容性,灰度發布等需要按照統一的策略進行管理。
4、服務注冊中心
需要統一的服務注冊中心支持服務的訂閱發布和動態發現機制。
5、服務監控
服務監控中心需要對服務的調用時延、成功率、吞吐率等數據進行實時采樣和匯總,通過圖形化報表的形式展示,以便運維人員對服務的運行質量進行實時分析和掌控。
6、運行期服務質量保障
包括服務限流、服務遷入遷出、服務升降級、服務權重調整和服務超時控制等,通過運行期的動態治理,可以在不重啟服務的前提下達到快速提升服務運行質量的目標。
7、快速的故障定界定位手段
- 大規模分布式環境下海量業務/平台日志的采集、匯總和實時在線檢索,支持多維度的條件檢索、模糊查詢,可以快速的在線查看各種系統運行日志,方便問題定位;
- 分布式消息跟蹤,通過調用鏈打通業務、服務調用和異常,發現線上系統故障源;通過在線和離線調用鏈大數據分析,得到鏈路各個依賴的穩定性指標,梳理依賴鏈路風險表,識別系統核心功能的服務調用依賴關系,評估可能的最大風險點,針對性改進以預防風險,同時為容量規划和擴容提供數據決策依據。
8、服務安全
服務安全訪問策略有多種,例如可以通過動態生成令牌token的方式做安全訪問授權,服務提供者動態生成token並告知服務注冊中心,由注冊中心告知是否告知消費方,這樣就能在注冊中心頁面上做復雜的授權模型。
微服務架構(MSA)是一種服務化架構風格,通過將功能分散到各個離散的服務中以實現對解決方案的解耦。
三、什么是微服務
微服務架構的主要特征如下:
- 原子服務:“高內聚,松耦合”
- 高密度部署:重要的服務可以獨立進程部署,非核心服務可以獨立打包,合設到同一個進程中,服務被高密度部署。物理機部署,可在一台服務器上部署多個服務實例進程;如果是雲端部署,則可以利用LXC實現容器級部署,以降低部署成本,提升資源利用率。
- 敏捷交付:真正的DevOps。
- 微自治:服務足夠小,功能單一,可以獨立打包、部署、升級、回滾和彈性伸縮,不依賴其他服務,實現局部自治。
四、微服務架構對比SOA
兩者的主要差異如下:
- 服務拆分粒度:SOA首先要解決的是異構系統應用的服務化;微服務強調的是服務拆分盡可能小,最好是獨立的原子服務。
- 服務依賴:傳統的SOA服務,由於需要重用已有的資產,存在大量的服務間依賴;微服務的設計理念是服務自治、功能單一獨立,避免依賴其他服務產生耦合,耦合會帶來更高的復雜度。
- 服務規模:傳統SOA服務粒度比較大,多數會采用將多個服務合並打成war包的方案,因此服務實例數比較有限;微服務強調盡可能拆分,同時很多服務會獨立部署,這將導致服務規模急劇膨脹,對服務治理和運維帶來新的挑戰。
- 架構差異:微服務化之后,服務數量的激增會引起架構質量屬性的變化,例如企業集成總線ESB逐漸被P2P的虛擬總線替代;為了保證高性能、低時延,需要高性能的分布式服務框架保證微服務架構的實施。
- 服務治理:傳統基於SOA Governance的靜態治理轉型為服務運行態微治理、實時生效。
- 敏捷交付:服務由小研發團隊負責微服務設計、開發、測試、部署、線上治理、灰度發布和下線,運維整個生命周期支撐,實現真正的DevOps。
總結:量變引起質變,這就是微服務架構和SOA服務化架構的最大差異。