spring cloud是Java語言的微服務框架,它依賴于spring boot,有快速開發、持續交付和容易部署等特點。下面結合微服務介紹spring cloud開發分布式微服務系統的一些常用組件。
常用組件
服務注冊和發現組件Eureka
微服務系統是由多個單一職責的服務單元組成,服務之間的相互依賴成網狀,所以該系統需要注冊中心來統一管理微服務實例,方便查看每個服務的健康狀態。利用Eureka組件可以很輕松的實現服務的注冊和發現的功能。Eureka組件提供了服務的健康檢測,以及界面友好的UI,可以讓開發人員隨時了解服務單元的運行情況。
負載均衡組件Ribbon
在微服務架構中,服務之間的相互調用一般是通過HTTPT通信協議來實現的。網絡往往具有不可靠性,為了保證服務的高可用,服務單元往往是集群化部署。那么服務消費者該調用那個服務提供者的實例呢?這就涉及到服務之間的負載均衡。Ribbon是一個負載均衡組件,通常和Euraka、Zuul、RestTemplate、Feign配合使用。它的作用是將請求根據負載均衡策略分配到不同的服務實例中。
熔斷器組件Hystrix
微服務中服務之間的相互依賴性錯綜復雜,一個網絡請求通常需要調用多個服務實例才能完成。如果一個服務不可用,如網絡延遲或故障,會影響依賴于這個服務的其它服務,最后導致整個系統處于癱瘓的狀態。為解決這種雪崩效應,引進熔斷組件Hystrix,當出現故障后會自動剔除服務實列。Hystrix除了一些基本的熔斷器,還能實現服務降級、服務限流的功能,并提供了界面展示健康狀態的功能。
路由網關Zuul
微服務系統通過將資源以API接口的形式暴露給外界來提供服務,在微服務系統中,API接口資源通常是由服務網關統一暴露,內部服務不直接對外提供API資源的暴露。這樣做的好處是將內部服務隱藏起來,給外界的感受是一個服務在提供服務,在一定程度上保護了微服務系統的安全。Spring Cloud中Zuul為網關組件,提供智能路由和過濾的功能。默認的情況下,Zuul和Ribbon相結合,能夠做到負載均衡。
聲明式調用Feign
在微服務架構中,一個業務可能需要多個服務協同完成,這時候涉及到服務之間的內部調用。可以通過Feign來遠程調度以他服務。
Spring Cloud Config
在實際的開發過程中,每個服務都有大量的配置文件,列如數據庫配置、日志輸出級別配置等,而往往這些配置在不同的環境中也是不一樣的。隨著服務的增加,配置文件的管理也是一件非常復雜的事。在微服務架構中,需要有統一管理配置文件的組件。在spring cloud中spring cloud config提供了這一功能。
Spring Coud Sleuth
服務和服務之間的調用有可能非常的復雜,一旦出現了異常和錯誤,就會很難去定位。所以在微服務架構中,必須實現分布式鏈路追蹤,去跟進一個請求到底有哪些服務參與,參與的順序又是怎樣的,從而使每個請求鏈路清晰可見,出了問題很快就能定位。spring cloud sleuth是一個分布式鏈路追蹤組件,通過它可以知道服務之間的依賴關系,并實時觀察鏈路的調用情況。
Spring Cloud Security
向服務單元提供了用戶驗證和權限認證的功能。
總結
在這一章節中我們從總體上了解了Spring Cloud開發微服務架構的基本組件。在接下來的章節中深入這些組件,介紹組件的使用和從源碼的程度介紹組件的實現。