天天看點

F版本SpringCloud 3—大白話Eureka服務注冊與發現

引用:服務注冊與發現,就像是租房子一樣

前言

今天洛陽下雨了,唉,沒有想到有裹上了羽絨服,不穿冷穿了熱的尴尬溫度。上學工作這麼多年都在外面,家裡竟然沒有一件春天的外套。

日常閑聊之後,開始今天的芝士環節。

昨天說過了什麼是SpringCloud,提到了SpringCloud實際上是很多技術的合集,今天就來學習第一個技術 Eureka。

大白話服務服務注冊與發現

Eureka在微服務的體系中,主要的功能是實作服務治理,服務注冊與發現的,那麼什麼是服務注冊與發現呢?

在第一篇文章講到過,微服務就是将項目中的子產品按照業務來進行拆分,如上圖,商品是一個獨立的服務,訂單也是獨立的服務,還可以根據需要将訂單服務部署為兩個。然後商品服務需要使用訂單的時候,就去調用訂單服務。

但是在上圖中有幾個問題是需要解決的:

  1. 商品服務想要調用訂單服務,怎麼知道訂單服務1 和 訂單服務2的位址?如果臨時增加一個訂單服務3,那麼怎麼告訴商品服務訂單服務3的位址?
  2. 如果訂單服務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更多的用法,請持續關注本系列教程。