最近閱讀了周立的《Spring Cloud與Docker》收獲挺大的,抽了一點時間對書中的內容做了總結。方便大家快速了解什么是Spring Cloud,Spring Cloud主要的功能及Spring Cloud服務治理。如下博客的內容都出自這本書。
什么是微服務
微服務架構風格是一種將一個單一應用程序開發為一組小型服務的方法,每個服務運行在自己的進程中,服務間通信采用輕量級通信機制(通常用HTTP資源API)。這些服務圍繞業務能力構建并且可通過全自動部署機制獨立部署。這些服務共用一個最小型的集中式的管理,服務可用不同的語言開發,使用不同的數據存儲技術。
微服務架構應該具備以下特性:
每個微服務可獨立運行在自己的進程里。
一系列獨立運行的微服務共同構建起整個系統。
每個服務為獨立的業務開發,一個微服務只關注某個特定的功能,例如訂單管理,用戶管理等。
微服務之間通過一些輕量的通信機制進行通信,例如通過RESTful API進行調用。
可以使用不同的語言與數據存儲技術
微服務架構的優點
易于開發和維護
單個微服務啟動較快
局部修改容易部署
技術棧不受限
按需伸縮
微服務架構面臨的挑戰
運維要求高
分布式固有的復雜性
接口調整成本高
重復勞動
微服務整體架構圖
服務注冊于發現
各個服務在啟動時,將自己的網絡地址等信息注冊到服務發現組件中,服務發現組件會存儲這些信息。
服務消費者可以從服務發現組件查詢服務提供者的網絡地址,并使用該地址調用服務提供者的接口。
各個微服務與服務發現組件使用一定機制(例如心跳)通信。服務發現組件如長時間無法與某為服務實例通信,就會注銷該實例。
微服務網絡地址發生變更(例如實例增減或者IP端口發生變化等)時,會重新注冊到服務發現組件。使用這種方式,服務消費者就無須人工修改提供者的網絡地址了。
Fegion實現聲明式REST調用
REST(Representational State Transfer ),用中文翻譯為"具象狀態傳輸"(也有:"代表性狀態傳輸")。是由 Roy Thomas Fielding博士 在2000年就讀加州大學歐文分校期間在學術論文中提出的一個術語。REST 定義了一組體系架構原則,您可以根據這些,包括使用不同語言編寫的客戶端如何通過 HTTP 處理和傳輸資源狀態。Feign是一個聲明式的WebService客戶端。使用Feign能讓編寫WebService客戶端更加簡單,它的使用方法是定義一個接口,然后在接口上添加注解,同時也支持JAX-RS標準的注解。Feign也支持可插拔式的編碼器和×××。SpringCloud對Feign進行了封裝,使其支持SpringMVC標準注解和HttpMessageConverters。Feign可以與Eureka和Ribbon組合使用以支持負載均衡。
使用Hystrix實現微服務的容錯處理
Hystrix是由Netflix開源的一個延遲和容錯庫,用于隔離訪問遠程系統,服務或者第三方庫,防止級聯失敗,從而提升系統的可用性和容錯性。Hystrix主要通過以下幾點實現延遲和容錯。
包裹請求:使用HystrixCommand包裹對依賴的調用邏輯,每個命令在獨立線程中執行。這使用到了設計模式中的“命令模式”。
如果沒有容錯處理,“基礎服務故障”導致“級聯故障”從而形成右邊的雪崩效應
使用Zuul構建微服務網關
Zuul是Netflix開源的微服務網關,它可以和Eureka,Ribbon,Hystrix等組件配合使用。Zuul的核心是一系列的過濾器,這些過濾器可以完成以下功能。
Zuul大部分功能是通過過濾器實現的,如右圖所示。
使用Spring CloudConfig統一管理微服務配置
Spring Cloud Config支持在Git, SVN和本地存放配置文件,使用Git或者SVN存儲庫可以很好地支持版本管理,Spring默認配置是使用Git存儲庫。具有如下優點:
集中管理配置:一個使用微服務架構的應用系統可能會包含成百上千個微服務,因此幾種管理配置是非常有必要的。
不同環境不同配置:例如,數據源配置在不同的環境(開發,測試,預發布,生產等)中是不同的。
運行期間可動態調整:例如可根據各個微服務的負載情況,動態調整數據源連接池大小或熔斷閾值,并且在調整配置是不停止微服務。
配置修改后可自動更新。如配置內容發生變化,微服務能夠自動更新配置。
Spring Cloud服務治理
注冊中心監控
容錯處理監控
微服務健康檢查
微服務調用追蹤
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。