1. 程式人生 > >Spring Cloud(二)

Spring Cloud(二)

四、微服務註冊與發現

4.1、服務發現簡介

  • 服務提供者、服務消費者、服務發現元件這三者的關係大致如下:
  • 各個微服務在啟動時,將自己的網路地址等資訊註冊到服務發現元件中,服務發現元件會儲存這些資訊。
  • 服務消費者可從服務發現元件查詢服務提供者的網路地址,並使用該地址呼叫服務提供者的介面。
  • 各個微服務與服務發現元件使用一定機制(例如心跳)通訊。服務發現元件如長時間無法與某微服務例項通訊,就會登出該例項。
  • 微服務網路地址發生變更(例如例項增減或者IP埠發生變化等)時,會重新註冊到服務發現元件。使用這種方式,服務消費者就無需人工修改提供者的網路地址了。

綜上,服務發現元件應該具備以下功能:

  • 服務登錄檔:是服務發現元件的核心,它用來記錄各個微服務的資訊,例如微服務的名稱、IP、埠等。服務登錄檔提供查詢API和管理API,查詢API用於查詢可用的微服務例項,管理API用於服務的註冊和登出。
  • 服務註冊與服務發現:服務註冊是指微服務在啟動時,將自己的資訊註冊到服務發現元件上的過程。服務發現是指查詢可用微服務列表及其網路地址的機制。
  • 服務檢查:服務發現元件使用一定機制定時檢測已註冊的服務,如發現某例項長時間無法訪問,就會從服務登錄檔中移除該例項。 

服務發現元件的其它叫法:服務註冊、服務發現或註冊中心。Spring Cloud提供了多種服務發現元件的支援,例如Eureka、Consul和Zookeeper等。 

4.2、Eureka簡介

Eureka是Netflix開源的服務發現元件,本身是一個基於REST的服務。它包含Server和Client兩部分。

4.3、Eureka原理

Eureka架構圖
  •  Application Service:相當於服務提供者
  • Application Client:相當於服務消費者
  • Make Remote Call:可理解成呼叫RESTful API的行為 

Eureka包含兩個元件:Eureka Server和Eureka Client,它們的作用如下:

  • Eureka Server提供服務發現的能力,各個微服務啟動時,會向Eureka Server註冊自己的資訊(例如IP、埠、微服務名稱等)。Eureka Server會儲存這些資訊。
  • Eureka Client是一個Java客戶端,用於簡化與Eureka Server的互動。
  • 微服務啟動後,會週期性(預設30秒)地向Eureka Server傳送心跳以續約自己的“租期”。
  • 如果Eureka Server在一定時間內沒有接收到某個微服務例項的心跳,Eureka Server將會登出該例項。
  • 預設情況下,Eureka Server同時也是Eureka Client。多個Eureka Server例項,互相之間通過複製的方式,來實現服務登錄檔中資料的同步。
  • Eureka Client會快取服務登錄檔中的資訊。這種方式有一定的優勢——首先,微服務無需每次請求都查詢Eureka Server,從而降低了Eureka Server的壓力;其次,即使Eureka Server所有節點都宕掉,服務消費者依然可以使用快取的資訊找到服務提供者並完成呼叫。

Eureka通過心跳檢查、客戶端快取等級制,提供了系統的靈活性、可伸縮性和可用性。

4.4、編寫Eureka Server

// TODO