微服務是一種系統架構的設計風格,它主旨在於將一個原本獨立的系統,拆分成多個獨立運行的小型服務。不同服務之間通過Restful介面進行通訊協作。 ...
摘要
微服務是一種系統架構的設計風格,它主旨在於將一個原本獨立的系統,拆分成多個獨立運行的小型服務。不同服務之間通過Restful介面進行通訊協作。
關鍵詞:Spring Cloud,微服務
一、什麼是微服務
微服務是一種系統架構的設計風格,它主旨在於將一個原本獨立的系統,拆分成多個獨立運行的小型服務。不同服務之間通過Restful介面進行通訊協作。
- 拆分的小型服務圍繞系統耦合度高的業務功能進行構建;
- 每個服務都維護自身的數據存儲(如何維護?)、業務開發、測試、部署機制;
- 由於是輕量級通訊協作,微服務可以使用不同語言來編寫;
二、如何實施微服務
引入微服務(與單體應用對比)引發的問題:
- 運維:維護進程數增加,需要一定的開發能力來編排組織進程;
- 介面:需要交互雙方協調發佈,完善介面和版本管理,保證介面的正確調用;
- 分散式環境:拆分後服務只能通過通信來進行協作,所以要考慮分散式環境的因素(網路延遲、分散式事務、非同步消息)
為瞭解決前面的問題,以下是實施微服務一些原則:
1、服務組件化
保證每個服務都獨立開發、部署,避免一個服務修改引起整個系統的重新部署。
2、按業務組織團隊
從按技術層面轉為按業務劃分團隊。(減少溝通成本)
3、以產品態度對待服務
對服務整個生命周期負責,持續關註服務的運作情況。
4、智能端點與啞管道原則
使用微服務不能簡單將函數調用直接改成Restful/RPC調用(避免繁瑣的通信),微服務常用兩種服務調用方式:
- 基於Http的Restful API(或其它輕量級的消息發送協議) - 請求響應模型,同步阻塞
- 基於輕量級消息匯流排(MQ) - 觀察模型
關於智能端點與啞管道的概念
關於智能端點與啞管道的概念,我是這樣理解:
- 啞管道是指消息的通訊,管道是不會通知端點消息的內容、結構,僅提供一個可靠的信息交互功能,稱為“啞”。
- 智能端點是指端點要主動訂閱管道的消息,去解析裡面的內容,稱為“智能”。
5、去中心化治理
整個架構採用輕量級協議定義介面,各個組件根據具體業務特點進行技術選型。
6、去中心化管理數據
每個服務管理其自有的資料庫。(在改造過程中,將資料庫的數據拆分到其它資料庫中(Mysql、MongoDB、Redis))
面臨的新問題:
- 分散式事務,所以儘量避免事務,保證各服務之間是"無事務"的調用;
- 一致性問題,保證最終一致性;
7、基礎設施自動化
由於服務數量的增多,務必需要一個“持續交付”平臺來支持實施。
自動化測試與自動化部署。
8、容錯設計
微服務架構中,可能存在部分服務故障的情況,處理不好會出現故障蔓延的情況。(一個正常服務頻繁調用故障服務、導致大量線程掛起等待超時,最後正常服務也出現了故障)
所以微服務架構中,應快速監測出故障源並儘可能恢復服務。(對每個組件的運行情況(服務狀態、斷路器狀態、吞吐量、網路延遲等)實現監控和日誌記錄)
9、演進式設計
實施微服務應該以演進的方式構建。
三、Spring Cloud 簡介
Spring Cloud 是一個基於Spring Boot 實現的微服務架構解決方案。提供了配置管理、服務治理、斷路器、智能路由、微代理、控制匯流排、全局鎖、決策競選、分散式會話和集群狀態管理等操作的簡單開發方式。
Spring Cloud 子項目介紹:
- Spring Cloud Config:配置管理工具
- Spring Cloud Netflix:核心組件
- Eureka:服務治理組件,服務註冊中心、服務註冊與發現機制
- Hystrix:容錯管理組件,實現斷路器模式
- Ribbon:客戶端負載均衡調用組件
- Feign:基於Ribbon和Hystrix的聲明式服務調用組件
- Zuul:網關組件
- Archaius:外部化配置組件
- Spring Cloud Bus:事件、消息匯流排
- Spring Cloud Cluster:針對ZooKeeper、Redis、Hazelcast、Consul的選舉演算法和通用狀態模式的實現。
- Spring Cloud Cloudfoundry:與Private Cloudfoundry的整合支持。
- Spring Cloud Consul:服務發現與配置工具。
- Spring Cloud Stream:通過Redis、Rabbit或Kafka實現消息微服務,通過重簡單的聲明式模型來發送和接收消息。
- Spring Cloud AWS:用於簡化整合Amazon Web Service組件
- Spring Cloud Security:安全工具包,提供在Zuul代理中對OAuth2客戶端請求的中繼器。
- Spring Cloud Sleuth:Spring Cloud 應用的分散式跟蹤實現,可以完美整合Zipkin。
- Spring Cloud ZooKeeper:基於Zoopeer的服務發現與配置管理組件。
- Spring Cloud Starters:Spring Cloud 的基礎組件,它是基於Spring Boot 風格項目的基礎依賴模塊。
- Spring Cloud CLI:用於在Groovy中快速創建Spring Cloud 應用的Spring Boot CLI插件。
SpringCloud微服務架構圖(轉自黑馬視頻):