F版本SpringCloud 3—大白話Eureka服務註冊與發現
引用:服務註冊與發現,就像是租房子一樣
前言
今天洛陽下雨了,唉,沒有想到有裹上了羽絨服,不穿冷穿了熱的尷尬溫度。上學工作這麼多年都在外面,家裡竟然沒有一件春天的外套。
日常閒聊之後,開始今天的芝士環節。
昨天說過了什麼是SpringCloud,提到了SpringCloud實際上是很多技術的合集,今天就來學習第一個技術 Eureka。
大白話服務服務註冊與發現
Eureka在微服務的體系中,主要的功能是實現服務治理,服務註冊與發現的,那麼什麼是服務註冊與發現呢?
在第一篇文章講到過,微服務就是將專案中的模組按照業務來進行拆分,如上圖,商品是一個獨立的服務,訂單也是獨立的服務,還可以根據需要將訂單服務部署為兩個。然後商品服務需要使用訂單的時候,就去呼叫訂單服務。
但是在上圖中有幾個問題是需要解決的:
- 商品服務想要呼叫訂單服務,怎麼知道訂單服務1 和 訂單服務2的地址?如果臨時增加一個訂單服務3,那麼怎麼告訴商品服務訂單服務3的地址?
- 如果訂單服務1宕機了,這個時候商品服務如果不知道,依然選擇呼叫已經宕機的訂單服務1,會服務呼叫失敗。也就是說:訂單服務1宕機了,如何把這個情況即時的告訴其他所有的服務?
......
解決以上問題的方案就是:引入服務管理者,就是服務治理。
先舉一個生活的小栗子:
- 在沒有網際網路的時代,如果要租房子需要找中介,中介就是一個服務管理者的角色
- 我們是租房者,要找房源,這個關係就像是商品服務找訂單服務
- 那麼房源怎麼來呢?房東在需要出租房子的時候,去找中介,將自己的房源資訊登記到中介那裡。這個過程叫做註冊。
- 我們要租房子,假如說要租兩室一廳,首先需要先找中介要所有房源的註冊清單,從清單中可以找到兩室一廳。這個過程叫做發現。
這個例子可以幫助大家,理解註冊和發現兩個過程,以及管理者的角色。
通過以上例子我們得到下圖:
服務治理的管理者我們稱之為註冊中心。
服務註冊:每個服務在啟動的時候,告訴註冊中心自己的位置資訊。
服務發現:商品服務想要呼叫訂單服務,先找註冊中心獲取到所有服務的位置資訊,然後找到訂單服務的地址,發起呼叫。
心跳機制:服務啟動之後,每過30秒向註冊中心心跳一次(就是傳送一個訊息,告訴註冊中心自己還活著),如果註冊中心長時間沒有收到某個服務的心跳,那麼就會認為這個服務已經宕機,就從服務註冊列表中刪除。
什麼是Eureka
Spring Cloud封裝了Netlix 公司開發的Eureka模組來實現服務治理,管理服務於服務之間依賴關係,可以實現服務呼叫、負載均衡、容錯等,實現服務發現與註冊。
Eureka 元件
在Eureka的架構中,分為 Eureka Server 和 Eureka client。
Eureka 註冊中心 Eureka Server
Eureka Server 作為服務註冊功能的伺服器,它是服務註冊中心。
Eureka Server提供服務註冊服務:各個節點啟動後,會在EurekaServer中進行註冊,這樣EurekaServer中的服務登錄檔中將會儲存所有可用服務節點的資訊,服務節點的資訊可以在介面中直觀的看到(監控頁面)
而系統中的其他微服務,使用 Eureka 的客戶端連線到 Eureka Server並維持心跳連線。這樣系統的維護人員就可以通過 Eureka Server 來監控系統中各個微服務是否正常執行。
Eureka 客戶端 Eureka Client
EurekaClient是一個Java客戶端,用於簡化Eureka Server的互動,客戶端同時也具備一個內建的、使用輪詢(round-robin)負載演算法的負載均衡器。
在應用啟動後,將會向Eureka Server傳送心跳(預設週期為30秒)。如果Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,EurekaServer將會從服務登錄檔中把這個服務節點移除(預設90秒)
Eureka Client會快取服務登錄檔中的資訊。這種方式有一定的優勢首先可以降低Eureka Server的壓力,其次當所有的Eureka Server宕機服務呼叫方依然可以完成呼叫
總結
恭喜你完成了本章的學習,為你鼓掌!如果本文對你有幫助,請幫忙點贊,評論,轉發,這對作者很重要,謝謝。
要掌握SpringCloud更多的用法,請持續關注本系列教程。
歡迎關注本人公眾號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和視訊教程,Java學習經驗,Java面試經驗以及Java實戰開發經驗。