SpringCloud簡單介紹。
這裡是修真院後端小課堂,每篇分享文從
【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】
八個方面深度解析後端知識/技能,本篇分享的是:
【SpringCloud簡單介紹。】
大家好,我是IT修真院鄭州分院第十期的學員,一枚正直純潔善良的java程式設計師
今天給大家分享一下,修真院官網java任務十,深度思考中的知識點——SpringCloud簡單介紹。
背景介紹
Spring Cloud是基於Spring Boot的一整套實現微服務的框架。它提供了微服務開發所需的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等元件。
知識剖析
Eureka,服務註冊和發現,它提供了一個服務註冊中心、服務發現的客戶端,還有一個方便的檢視所有註冊的服務的介面。 所有的服務使用Eureka的服務發現客戶端來將自己註冊到Eureka的伺服器上。
Eureka Client分為服務提供者和服務消費者。服務可以既是服務提供者又是服務消費者。
服務提供者
服務註冊:啟動的時候會通過傳送REST請求的方式將自己註冊到Eureka Server上,同時帶上了自身服務的一些元資料資訊。
**服務續約:**在註冊完服務之後,服務提供者會維護一個心跳用來持續告訴Eureka Server: "我還活著 ” 、
服務下線:當服務例項進行正常的關閉操作時,它會觸發一個服務下線的REST請求給Eureka Server, 告訴服務註冊中心:“我要下線了 ”。
服務消費者
獲取服務:當我們啟動服務消費者的時候,它會發送一個REST請求給服務註冊中心,來獲取上面註冊的服務清單
服務呼叫:服務消費者在獲取服務清單後,通過服務名可以獲得具體提供服務的例項名和該例項的元資料資訊。在進行服務呼叫的時候,優先訪問同處一個Zone中的服務提供方。
Eureka Server(服務註冊中心):
失效剔除:預設每隔一段時間(預設為60秒) 將當前清單中超時(預設為90秒)沒有續約的服務剔除出去。
自我保護:。EurekaServer 在執行期間,會統計心跳失敗的比例在15分鐘之內是否低於85%(通常由於網路不穩定導致)。 Eureka Server會將當前的例項註冊資訊保護起來, 讓這些例項不會過期,儘可能保護這些註冊資訊。
Zuul,閘道器,所有的客戶端請求通過這個閘道器訪問後臺的服務。他可以使用一定的路由配置來判斷某一個URL由哪個服務來處理。並從Eureka獲取註冊的服務來轉發請求。
Ribbon,即負載均衡,Zuul閘道器將一個請求傳送給某一個服務的應用的時候,如果一個服務啟動了多個例項,就會通過Ribbon來通過一定的負載均衡策略來發送給某一個服務例項。
Feign,服務客戶端,服務之間如果需要相互訪問,可以使用RestTemplate,也可以使用Feign客戶端訪問。它預設會使用Ribbon來實現負載均衡。
Hystrix,監控和斷路器。我們只需要在服務介面上新增Hystrix標籤,就可以實現對這個介面的監控和斷路器功能。
Hystrix Dashboard,監控面板,他提供了一個介面,可以監控各個服務上的服務呼叫所消耗的時間等。
Turbine,監控聚合,使用Hystrix監控,我們需要開啟每一個服務例項的監控資訊來檢視。而Turbine可以幫助我們把所有的服務例項的監控資訊聚合到一個地方統一檢視。這樣就不需要挨個開啟一個個的頁面一個個檢視。
Spring Cloud Config,解決分散式系統的配置管理方案。它包含了Client和Server兩個部分,server提供配置檔案的儲存、以介面的形式將配置檔案的內容提供出去,client通過介面獲取資料、並依據此資料初始化自己的應用。
Spring Cloud Bus,事件、訊息匯流排。用於在叢集(例如,配置變化事件)中傳播狀態變化,可與Spring Cloud Config聯合實現熱部署。
常見問題
如何使用ribbon實現負載均衡?
擴充套件思考
SpringCloud的特性
Spring Cloud來源於Spring,質量、穩定性、持續性都可以得到保證。
Spirng Cloud基於Spring Boot,使用入門門檻較低,更加便於業務落地。
Spring Cloud發展非常的快。
Spring Cloud社群活躍度很高,使用過程中遇到的問題更容易找到解決方案。
SpringCloud是一個全家桶,眾多子專案覆蓋了微服務架構的很多方面,方案完整性更高。
參考文獻
https://blog.csdn.net/chen978616649/article/details/78493001/
https://www.fangzhipeng.com/archive/?tag=SpringCloud
更多討論
Q1: Ribbon和Feign的區別
A1: Ribbon和Feign都是用於呼叫其他服務的,不過方式不同。
1.啟動類使用的註解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
2.服務的指定位置不同,Ribbon是在@RibbonClient註解上宣告,Feign則是在定義抽象方法的介面中使用@FeignClient宣告。
3.呼叫方式不同,Ribbon需要自己構建http請求,模擬http請求然後使用RestTemplate傳送給其他服務,步驟相當繁瑣。
Feign則是在Ribbon的基礎上進行了一次改進,採用介面的方式,將需要呼叫的其他服務的方法定義成抽象方法即可,不需要自己構建http請求。不過要注意的是抽象方法的註解、方法簽名要和提供服務的方法完全一致。
Q2: 什麼是服務熔斷?什麼是服務降級?
A2: 服務熔斷: 一般是某個服務故障或者是異常引起的,類似現實世界中的‘保險絲’,當某個異常條件被觸發,直接熔斷整個服務,而不是一直等到此服務超時。
服務降級:一般是從整體負荷考慮,就是當某個服務熔斷之後,伺服器將不再被呼叫,此時客戶端可以自己準備一個本地的fallback回掉,返回一個預設值,這樣做,雖然服務水平下降,但好歹,比直接掛掉要強。
Q3: eureka和zookeeper都可以提供服務註冊與發現的功能,請說說兩個的區別?
A3: ZooKeeper基於CP,不保證高可用,如果zookeeper正在選主,或者Zookeeper叢集中半數以上機器不可用,那麼將無法獲得資料。Eureka基於AP,能保證高可用,即使所有機器都掛了,也能拿到本地快取的資料。
更多內容,可以加入IT交流群565734203與大家一起討論交流
這裡是技能樹·IT修真院:https://www.jnshu.com,初學者轉行到網際網路的聚集地