Spring Cloud微服務架構簡介

最近閱讀了周立的《Spring Cloud與Docker》收穫挺大的,抽了一點時間對書中的內容作了總結。方便你們快速瞭解什麼是Spring Cloud,Spring Cloud主要的功能及Spring Cloud服務治理。以下博客的內容都出自這本書。
什麼是微服務設計模式

微服務架構風格是一種將一個單一應用程序開發爲一組小型服務的方法,每一個服務運行在本身的進程中,服務間通訊採用輕量級通訊機制(一般用HTTP資源API)。這些服務圍繞業務能力構建而且可經過全自動部署機制獨立部署。這些服務共用一個最小型的集中式的管理,服務可用不一樣的語言開發,使用不一樣的數據存儲技術。
微服務架構應該具有如下特性:安全

  • 每一個微服務可獨立運行在本身的進程裏。網絡

  • 一系列獨立運行的微服務共同構建起整個系統。架構

  • 每一個服務爲獨立的業務開發,一個微服務只關注某個特定的功能,例如訂單管理,用戶管理等。負載均衡

  • 微服務之間經過一些輕量的通訊機制進行通訊,例如經過RESTful API進行調用。運維

  • 可使用不一樣的語言與數據存儲技術分佈式

  • 全自動部署機制

微服務架構的優勢
易於開發和維護ide

  • 一個微服務只會關注一個特定的業務功能,因此它業務清晰,代碼量較少。

單個微服務啓動較快微服務

  • 單個微服務代碼量較少,因此啓動會比較快。

局部修改容易部署測試

  • 單體應用只要有修改,就得從新部署整個應用,微服務解決了這樣的問題。

技術棧不受限

  • 在微服務架構中,能夠結合項目業務及團隊的特色,合理地選擇技術棧。

按需伸縮

  • 可根據需求,實現細粒度的擴展。

微服務架構面臨的挑戰
運維要求高

  • 更多的服務意味着更多的運維投入。

分佈式固有的複雜性

  • 使用微服務架構是分佈式系統。對於一個分佈式系統,系統容錯,網絡延遲,分佈式事務等都會帶來巨大的挑戰。

接口調整成本高

  • 微服務之間經過接口進行通訊。若是修改某一個微服務的API,可能全部使用了該接口的微服務都須要作調整。

重複勞動

  • 不少服務可能都會使用到相同的功能,而這個功能並無達到分解爲一個微服務的程度,這個時候,可能各個服務都會開發這一功能,從而致使代碼重複。

微服務總體架構圖
Spring Cloud微服務架構簡介

服務註冊於發現

各個服務在啓動時,將本身的網絡地址等信息註冊到服務發現組件中,服務發現組件會存儲這些信息。

服務消費者能夠從服務發現組件查詢服務提供者的網絡地址,並使用該地址調用服務提供者的接口。

各個微服務與服務發現組件使用必定機制(例如心跳)通訊。服務發現組件如長時間沒法與某爲服務實例通訊,就會註銷該實例。

微服務網絡地址發生變動(例如實例增減或者IP端口發生變化等)時,會從新註冊到服務發現組件。使用這種方式,服務消費者就無須人工修改提供者的網絡地址了。
Spring Cloud微服務架構簡介
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包裹對依賴的調用邏輯,每一個命令在獨立線程中執行。這使用到了設計模式中的「命令模式」。

  • 跳閘機制:當某服務的錯誤率超過必定閾值時,Hystrix能夠自動或者手動跳閘,中止請求該服務一段時間。
  • 資源隔離:Hystrix爲每一個依賴都維護了一個小型的線程池(或者信號量)。若是該線程池已滿,發往該依賴的請求就被當即拒絕,而不是排隊等候,從而加速失敗斷定。
  • 監控:Hystrix能夠近乎實時地監控運行指標和配置變化,例如成功,失敗,超時以及被拒絕的請求等。
  • 回退機制:當請求失敗,超時,被拒絕,或當斷路器打開時,執行回退邏輯。回退邏輯可由開發人員自行提供,例如返回一個缺省值。
  • 自我修復:斷路器打開一段時間後,會自動進入「半開」狀態。

若是沒有容錯處理,「基礎服務故障」致使「級聯故障」從而造成右邊的雪崩效應
Spring Cloud微服務架構簡介
使用Zuul構建微服務網關
Zuul是Netflix開源的微服務網關,它能夠和Eureka,Ribbon,Hystrix等組件配合使用。Zuul的核心是一系列的過濾器,這些過濾器能夠完成如下功能。

  • 身份認證與安全
  • 動態路由
  • 壓力測試
  • 負載分配
  • 靜態響應處理
  • 多區域彈性

Zuul大部分功能是經過過濾器實現的,如右圖所示。
Spring Cloud微服務架構簡介

使用Spring CloudConfig統一管理微服務配置
Spring Cloud Config支持在Git, SVN和本地存放配置文件,使用Git或者SVN存儲庫能夠很好地支持版本管理,Spring默認配置是使用Git存儲庫。具備以下優勢:
集中管理配置:一個使用微服務架構的應用系統可能會包含成百上千個微服務,所以幾種管理配置是很是有必要的。
不一樣環境不一樣配置:例如,數據源配置在不一樣的環境(開發,測試,預發佈,生產等)中是不一樣的。
運行期間可動態調整:例如可根據各個微服務的負載狀況,動態調整數據源鏈接池大小或熔斷閾值,而且在調整配置是不中止微服務。
配置修改後可自動更新。如配置內容發生變化,微服務可以自動更新配置。
Spring Cloud微服務架構簡介
Spring Cloud服務治理
註冊中心監控
Spring Cloud微服務架構簡介
容錯處理監控
Spring Cloud微服務架構簡介
微服務健康檢查
Spring Cloud微服務架構簡介
微服務調用追蹤
Spring Cloud微服務架構簡介

相關文章
相關標籤/搜索