基礎知識
Microservices
什麼是微服務
微服務是系統架構上的一種設計風格,它將一個獨立的系統按照系統業務功能拆分成多個獨立的小服務,小服務間各自在獨立進程中運行,通過基於HTTP 的Restful API進行通信協作
特徵
- 粒度小,精於一個或一組特定服務
- 都有單獨的進程
- 輕量級的通信機制,通常使用HTTP/Rest 還有RPC協議
- 鬆耦合,可獨立部署
設計思想
- 服務組件化
對服務進行分解,每個服務都可以獨立開發,部署,運行,然後通過通訊相互依賴,可以有效對一個服務進行修改而需要重新部署整個系統
- 按服務劃分團隊
- 智能端點與啞管道
使用簡單的RPC方式調用會導致微服務間產生繁瑣通訊,需要使用更粗粒度的通訊協議:基於HTTP的Restful API,消息中間件
- 去中心化治理
服務架構中的各個服務根據自身不同的業務需求選擇不同的技術平臺,應儘量避免統一的、集中的服務管理機制,對具體的一個服務而言,應根據業務上下文,選擇合適的語言、工具對其進行構
- 去中心化管理數據
讓每個服務管理自己的數據庫
優點
- 開發層面:
- 每個服務獨立,便於測試,部署,升級
- 系統不會被限制於某個技術棧
- 開發針對性,可以針對每個服務組件開發團隊
- 性能層面:
- 提高容錯性,一個服務的錯誤並不會馬上讓整個系統癱瘓
- 按需定製的DFX,資源利用率,每個服務可以各自進行x擴展和z擴展,而且,每個服務可以根據自己的需要部署到合適的硬件服務器上;
問題
- 系統複雜性,需要開發人員處理分佈式系統複雜性
- API網關
- 通信問題:服務拆開後業務依賴由代碼依賴變爲了通訊依賴,需要更加完善的依賴通訊機制
同步通信:HTTP、RPC;異步通信:消息隊列(kafaka,robbitMQ)
- 服務註冊和發現問題:需要服務治理(Zookeeper,Eureka)
- 分佈式事務問題:
- 一致性問題
- 服務管理,編排
- 重試,熔斷,降級,限流等
微服務三維模型(Chris Richardson)
- X軸,服務實例水平擴展,保證可靠性與性能;
- Y軸,功能的擴展,服務單一職責,功能獨立;
- Z軸,數據分區,數據獨立,可靠性保證;