Spring Cloud 從入門到精通

2021-10-17 04:14:13 字數 3430 閱讀 4502

先搞清乙個概念,spring cloud並不是一種技術,它是一種設計思想的落地方案;

spring cloud元件

註冊中心:zookeeper、eureka、nacos

服務呼叫/負載均衡:ribbon、nginx、feign、openfeign

服務熔斷/降級:hystrix(netflix)、sentinel(阿里中介軟體團隊)

閘道器:zuul、gateway

配置中心:spring cloud config+spring cloud bus

怎麼使用

基本所有的元件使用方法都是基於註解,開啟+使用的模式,在使用元件的地方加上對應註解,如@feignclient 註解,然後在啟動類上加enable***註解,如enablefeignclient 註解

註冊中心

以eureka為例,eureka分為服務端和客戶端,客戶端每30秒向eureka伺服器傳送心跳連線,以此來表明本服務還存活,若服務端連續三個心跳週期(90秒)沒有收到某客戶端發來的心跳鏈結,則會將其從服務列表剔除;客戶端和服務端通過json/xml進行通訊,服務端會每30秒去服務端更新一次服務列表;底層使用resttemplate;

eureka使用

新增依賴->增加yml配置->主啟動類增加eureka註解(eureka伺服器enableeurekaserver,eureka服務enableeurekaclient)

eureka集群:

負載均衡/服務呼叫

以ribbon為例,ribbon為負載均衡元件,跟nginx不同,nginx執行在服務端,將所有請求集中起來進行負載均衡;ribbon執行在消費端,演算法和nginx相似但更強大,除了有nginx的輪詢、加權輪詢(10輪若還沒結果就返回null),還支援隨機策略、重試策略,預設輪詢;ribbon只能做負載均衡,不能服務呼叫(依然得用resttemplate,先new resttemplate物件,呼叫postforobject方法傳入請求url、入參、返回結果型別.class,postforobject只需要傳入請求url+入參,和返回結果),顯然ribbon太麻煩,所以有了feign和openfeign(在feign基礎上增加對springmvc註解的支援),用@feignclient 註解服務提供者的名稱,在controller層即可像呼叫service一樣呼叫服務;

ribbon:把註冊中心的服務列表快取到本地,discoveryclient.getinstances(「cloud-payment-service」);

ribbon不需要額外新增依賴也可以使用,因為eureka和ribbon有一腿,eureka客戶端依賴自帶了ribbon的引用,ribbon的負載均衡演算法有好幾種,最常用的是輪詢,具體演算法實現就是

當前請求次數%服務端對應服務列表數量

@component

public class mylb implements loadbalancer while (!this.atomicinteger.compareandset(current,next)); //第乙個引數是期望值,第二個引數是修改值是

system.out.println("*******第幾次訪問,次數next: "+next);

return next;

}@override

public serviceinstance instances(listserviceinstances)

}

openfeign有個超時訪問時間,需要在yml檔案裡面配置,預設為一秒,如果消費者端一秒內沒得到服務提供者的響應,直接返回大白頁(服務超時)

openfeign還可以做日誌列印,需要新建乙個類,用openfeign的logger

服務熔斷/降級

比如a服務需要呼叫b服務,b又需要呼叫c,如果c在某一時刻崩了,所有請求都懟在c這兒阻塞著,b拿不到返回值,就有可能一直自旋或輪詢反覆請求,b也會崩,以此類推a也會崩,阻塞執行緒多了,伺服器資源被占用完了整個系統就崩了,為了避免這種服務雪崩,就有了hystrix,它可以做服務熔斷或降級,如果某個時間段內,某請求的失敗率達到某個閾值,hystrix就會切斷這種請求,直接給使用者返回失敗(熔斷)或者友好提示(降級,通過@hystrixcommand註解指定降級服務名,如下圖);

閘道器

為了安全、使用者體驗,有時候我們需要對路由進行管理(統一字首、策略配置、服務名遮蔽、路徑遮蔽);

或者對使用者請求進行過濾,比如每兩秒只接乙個請求;

服務配置中心

每個服務都有自己的配置,我們不可能乙個服務乙個服務的去修改,而且這樣會老是重啟服務,spring cloud config就是把所有配置整合到乙個地方進行統一管理(git或者svn),但是這樣有個壞處,執行中的服務配置修改後不會立馬更新,所以有了spring cloud bus訊息匯流排,作用就是管理和廣播分布式系統中的訊息,有了 spring cloud bus 之後,我們只需要建立乙個簡單的請求,並且加上 @resfreshscope 註解就能進行配置的動態修改了;

Spring Cloud 從入門到精通

finchley版 本系列主要補充之前版本新增或是變動的主要內容,基礎使用依然可以參考dalston版教程 spring cloud aliabab專題 註冊中心與配置中心 nacos 分布式流量防衛兵 sentinel 國內使用最多的rpc框架整合 dubbo spring cloud strea...

Redis從入門到入門

2安裝1.1支援的儲存結構 remote dictionary server 以字典儲存資料,允許其他應用通過tcp協議訪問字典內容。支援的鍵值型別 優點 redis的字典儲存方式和多重鍵值儲存方式,使得程式設計師可以直接將程式中的資料對映到redis中,資料在redis中的儲存方式和其在程式中的儲...

spring cloud從看不懂到放棄

當我們使用乙個新技術的時候,應該首先問的乙個問題就是why 為什麼要使用這個技術?或者問 這個技術是可以解決什麼問題。我也想寫篇微服務的文章,以及微服務的優缺點 在微服務架構中,當乙個大型系統被拆分成微服務系統以後,不僅包括功能拆分,還包括系統拆分 拆分 資料庫拆分 快取拆分等,多個系統的部署 維護...