Spring Cloud(二)
阿新 • • 發佈:2018-12-27
四、微服務註冊與發現
4.1、服務發現簡介
- 服務提供者、服務消費者、服務發現元件這三者的關係大致如下:
- 各個微服務在啟動時,將自己的網路地址等資訊註冊到服務發現元件中,服務發現元件會儲存這些資訊。
- 服務消費者可從服務發現元件查詢服務提供者的網路地址,並使用該地址呼叫服務提供者的介面。
- 各個微服務與服務發現元件使用一定機制(例如心跳)通訊。服務發現元件如長時間無法與某微服務例項通訊,就會登出該例項。
- 微服務網路地址發生變更(例如例項增減或者IP埠發生變化等)時,會重新註冊到服務發現元件。使用這種方式,服務消費者就無需人工修改提供者的網路地址了。
綜上,服務發現元件應該具備以下功能:
- 服務登錄檔:是服務發現元件的核心,它用來記錄各個微服務的資訊,例如微服務的名稱、IP、埠等。服務登錄檔提供查詢API和管理API,查詢API用於查詢可用的微服務例項,管理API用於服務的註冊和登出。
- 服務註冊與服務發現:服務註冊是指微服務在啟動時,將自己的資訊註冊到服務發現元件上的過程。服務發現是指查詢可用微服務列表及其網路地址的機制。
- 服務檢查:服務發現元件使用一定機制定時檢測已註冊的服務,如發現某例項長時間無法訪問,就會從服務登錄檔中移除該例項。
服務發現元件的其它叫法:服務註冊、服務發現或註冊中心。Spring Cloud提供了多種服務發現元件的支援,例如Eureka、Consul和Zookeeper等。
4.2、Eureka簡介
Eureka是Netflix開源的服務發現元件,本身是一個基於REST的服務。它包含Server和Client兩部分。
4.3、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