spring -> spring booot -> spring cloud 這樣的關係。git
官網web
spring-cloud-eureka算法
spring-cloud-zookeeperspring
spring-cloud-consul數據庫
spring-cloud-config後端
spring-cloud-netflix-hystrix緩存
spring-cloud-gateway安全
spring-cloud-netfilx-zuul服務器
spring-cloud-openfeign微信
spring-cloud-netflix-ribbon
spring-cloud-stream --> rabbitmq、kafka
spring-cloud-bus
spring-cloud-sletuh --> zipkin server
spring-cloud-task
spring-cloud-security
spring-cloud-vault
spring-cloud-contract
微服務架構中,應用被拆分衆多的小應用服務,應該規模變大,服務實例的數量是動態變化,爲了爲客戶端可以訪問到服務,就必需要有一種服務的發現機制,完成服務的登記註冊、監控管理、服務發現,服務間的調用管理等功能。
有兩種主要的服務發現方式:客戶端發現(client-side discovery)和服務器端發現(server-side discovery)。Eureka是客戶端發現模式。
Spring Cloud Eureka由兩個組件組成:Eureka服務器和Eureka客戶端。
Eureka Client鏈接到Eureka Server,並維持心跳鏈接。這樣系統的維護人員就能夠經過 Eureka Server 來監控系統中各個微服務是否正常運行。基本的結構以下圖。
另外Eurekag還提供了web的管理界面,運維人員能夠查看各微服務的狀況
在微服務架構中,每一個微服務節點都有相關的配置數據項。當節點衆多,維護就變得很是困難,所以須要創建一箇中心配置服務,全部配置都放在配置中心統一管理。
Spring Cloud Config由兩個組件組成:Config服務器和Config客戶端。應用啓動時,將相關配置項拉取到本地緩存使用,配置更新時也可由配置中心主動推送到應用節點(後續會詳細講解)。他支持git、svn、file方式存儲配置。
消息總線是爲了實現企業應該數據共享和集成,提供一種基於企業服務總線的信息共享交換平臺。具備鬆散耦合的特色,實現了"集中式管理、分佈式運行"的工做模式。
在微服務架構中,服務衆多,各服務又有不少的調用和被調用關係。消息總線就是爲了解決在某些非同步場景下,服務間強解藕、數據交換量巨大的解決方案。
Spring Cloud Bus 將分佈式的節點用輕量的消息代理鏈接起來。它能夠用於廣播配置文件的更改或者服務之間的異步通信,也能夠用於監控。能夠說,消息總線是微服務應用擴展「道路」上的推動器,並且也把它用來做應用間相互通訊的消息管道。
在微服務架構中,後端服務每每不直接開放給調用端,而是經過一個API網關根據請求的url,路由到相應的服務。當添加API網關後,在第三方調用端和服務提供方之間就建立了一面牆,這面牆直接與調用方通訊進行權限控制、限流、排隊,過載保護、請求合併、裁剪、黑白名單、異經常使用戶過濾攔截等等。
Spring Cloud Gateway是一個構建在Spring 生態之上的高性能、非阻塞API網關,包括:Spring 5,Spring Boot 2和Project Reactor。
負載均衡可分爲服務端負載均衡和客戶端負載均衡,服務端負載均衡徹底由服務器處理,客戶端不須要作任何事情。而客戶端負載均衡技術,客戶端須要維護一組服務器引用,每次客戶端向服務端發請求的時候,會根據算法主動選中一個服務節點。經常使用的負載均衡算法有:隨機、輪詢、權重、負載、Hash等。
Spring Cloud Ribbon是一個基於客戶端的負載均衡器,Feign內部也已經使用了Ribbon。
Spring Cloud Feign是一個聲明式的Web Service客戶端,它的目的就是讓Web Service調用更加簡單。Feign提供了HTTP請求的模板,經過編寫簡單的接口和插入註解,就能夠定義好HTTP請求的參數、格式、地址等信息。而Feign則會徹底代理HTTP請求,咱們只須要像調用方法同樣調用它就能夠完成服務請求及相關處理。
Feign整合了Ribbon和Hystrix(見下節),可讓咱們再也不須要顯式地使用這兩個組件,大大簡化了服務調用。
在分佈式架構中,一個應用依賴多個服務是很是常見的,若是其中一個依賴因爲延遲太高發生阻塞,調用該依賴服務的線程就會阻塞,若是相關業務的QPS較高,就可能產生大量阻塞,從而致使該應用/服務因爲服務器資源被耗盡而拖垮。
另外,故障也會在應用之間傳遞,若是故障服務的上游依賴較多,可能會引發服務的雪崩效應。就跟數據癱瘓,會引發依賴該數據庫的應用癱瘓是同樣的道理。
因此,斷路器就是用來支持服務隔離、熔斷等操做的工具。斷路器會以隔離的方式來處理服務請求,當斷路數量達到閾值,就會觸發熔斷(直接返回失敗)。
Spring Cloud Hystrix微服務架構中提供服務隔離、熔斷、降級機制的工具/框架。經過以上手段來下降服務故障帶來的關聯影響,以提升系統的總體可用性。
在 Web 應用開發中,安全一直是很是重要的一個方面。安全雖然屬於應用的非功能性需求,可是應該在應用開發的初期就考慮進來。若是在應用開發的後期才考慮安全的問題,就可能陷入一個兩難的境地:一方面,應用存在嚴重的安全漏洞,沒法知足用戶的要求,並可能形成用戶的隱私數據被攻擊者竊取;另外一方面,應用的基本架構已經肯定,要修復安全漏洞,可能須要對系統的架構作出比較重大的調整,於是須要更多的開發時間,影響應用的發佈進程。所以,從應用開發的第一天就應該把安全相關的因素考慮進來,並在整個應用的開發過程當中。
Spring Cloud Security是基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供全面的安全性解決方案,同時在Web請求級和方法調用級處理身份確認和受權。他是靈活和強大的身份驗證和訪問控制框架,以確保基於Spring的Java Web應用程序的安全。
OAuth2.0受權框架使第三方應用程序來獲取對HTTP服務的有限訪問機會。不管是經過編排資源全部者和HTTP服務之間的交互批准的資源全部者,或經過容許第三方應用程序來獲取本身的訪問權限。
例如某網站/app以微信、qq登錄方式就是OAuth2方式。
Spring Security Oauth2是創建在spring security的基礎之上,符合OAuth2標準的開源實現。
OAuth2定義了4種模式,共有4個角色,具體內容能夠查看另外的介紹