1. 程式人生 > >微服務Spring Cloud實戰—Eureka Server的簡介和高可用性—叢集

微服務Spring Cloud實戰—Eureka Server的簡介和高可用性—叢集

Eureka簡介

什麼是Eureka?

Eureka是Netflix開源的服務發現元件,本身是一個基於REST的服務。它包含Server和Client兩部分。Spring Cloud將它整合在子專案Spring Cloud Netflix中,從而實現服務的註冊與發現
(注:Eureka的GitHub: https://github.com/Netflix/Eureka
Netflix是一家線上影片租借提供商。)

Eureka的作用

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

Eureka Server提供服務發現的能力,各個微服務啟動時,他們會向Eureka Server
註冊自己的資訊(例如IP、埠、微服務名稱等),Eureka Server會儲存這些資訊。

Eureka Client是一個Java客戶端,用於簡化Eureka Server的互動。

微服務啟動後,會週期性(預設30秒)地向Eureka Server傳送心跳
以續約自己的“租期”。

如果Eureka Server在一定時間內沒有接收到某個微服務示例的心跳,Eureka
Server將會登出該例項(預設90秒)。

預設情況下,Eureka Server同時也是Eureka Client。多個Eureka Server例項,
互相之間通過複製的方式,來實現服務登錄檔內的資料的同步。

Eureka Client會快取服務登錄檔內的資訊。這種方式有一定的優勢————首先,微服務
每次請求都查詢Eureka Server,從而降低了Eureka Server的壓力;其次,即使Eureka
Server所有節點都宕掉,服務消費者依然可以使用快取中的資訊找到服務提供者並完成呼叫。

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

Eureka Server的高可用

Eureka Server並不適合線上生產環境。Eureka Server會定時連線Eureka Server,獲取服務登錄檔
中的資訊並快取在本地。微服務在消費遠端API時總是使用本地快取的資料。因此,一般來說,即使
Eureka Server發生宕機,也不影響到服務之間的呼叫。但如果Eureka Server宕機時,某些微服務也
出現了不可用的情況,Eureka Client中快取若不被更新,就可能會影響到微服務的呼叫,甚至影響到
整個應用的高可用性。因此,在生產環境中,通常會部署一個高可用的Eureka Server叢集。
Eureka Server例項會彼此增量地同步資訊,從而儲存所有節點資料一致。

構建Eureka Server叢集

1.複製專案eureka,蔣ArtifactId修改為eureka-x。

2.配置系統的hosts改為127.0.0.1 peer1 peer2

3.修改application.yml如下:讓兩個節點的Eureka Server相互註冊。

spring:
    application:
        name: eureka-ha
---
spring:
    cloud:
        inetutils:
            ignored-interfaces:  #對於服務發現註冊,忽略某些命名的網路介面是非常有用的,比如使用Docker容器的時候。可以通過一些規則設定來忽略這些網路介面 https:
//springcloud.cc/spring-cloud-dalston.html - docker0 #忽略“docker0”的入口 - veth.* #忽略所有的入口以“veth.*” profiles: peer1 server: port: 8761 #指定該Eureka例項的埠 eureka: server: enableSelfPreservation: false #關閉自我保護 eviction-interval-timer-in-ms: 10000 #剔除已關停服務間隔(單位毫秒,預設是60*1000) instance: lease-expiration-duration-in-seconds: 30 #1 lease-renewal-interval-in-seconds: 10 #2 prefer-ip-address: true #3 #ip-address: 192.168.0.xxx //4 #指定當profiles=peer1,主機名是peer1 hostname: peer1 client: register-with-eureka: false fetch-registry: false service-url: #將自己註冊到peer2這個Eureka上面去 defaultZone: http://peer2:8762/eureka/ --- spring: profiles: peer2 server: port: 8762 eureka: instance: hostname: peer2 client: service-url: http://peer1:8761/eureka/

將application.yml檔案分為三段。第二段和第三段分別為spring.properties
指定一個值,該值表示他所在的那段內容應在哪個Profile裡。第一段由於並未指定
spring.profiles,因此這段內容會對所有Profile生效。

在這裡插入圖片描述

本文大部分內容轉載自周立的《Spring Cloud與Docker微服務架構實戰》