【SpringCloud】註冊中心Eureka是什麼呢

一、首先爲什麼會有Eureka呢?

是因爲,服務提供者對外提供服務,需要對外暴露自己的地址,而服務消費者需要記錄服務提供者的地址。一但地址發生變化,需要人爲管理地址,爲開發測試及上線帶來極大的困難。所有有了Eureka,它可以管理這些服務。

二、Eureka是什麼呢?

Eureka負責管理、記錄服務提供者的信息,服務調用者把自己的需求告訴Eureka,然後Eureka會把符合你需求的服務告訴你,它實現了服務的自動註冊、發現、狀態監控。
簡單來說,就是服務提供者將服務放到Eureka裏,Eureka再把相應的服務(也就是服務調用者需要的服務)給服務調用者。
其架構原理圖如下:
在這裏插入圖片描述

  • Eureka:就是服務註冊中心(可以是一個集羣),對外暴露自己的地址
  • 提供者:啓動後向Eureka註冊自己信息(地址,提供什麼服務)
  • 消費者:向Eureka訂閱服務,Eureka會將對應服務的所有提供者地址列表發送給消費者,並且定期更新
  • 心跳(續約):提供者定期通過http方式向Eureka刷新自己的狀態

三、Eureka是怎麼工作的呢?

1、服務提供者

服務提供者要向EurekaServer註冊服務,並且完成服務續約等工作。
(1)服務註冊
服務提供者在啓動時,會檢測配置屬性中的eureka.client.register-with-erueka,若它爲ture,代表將自己的信息註冊到EurekaServer。
則會向EurekaServer發起一個Rest請求,並攜帶自己的元數據信息,Eureka Server會把這些信息保存到一個雙層Map結構中。第一層Map的Key就是服務名稱,第二層Map的key是服務的實例id。
(2)服務續約
在註冊服務完成以後,服務提供者會維持一個心跳(定時向EurekaServer發起Rest請求),告訴EurekaServer:“我還活着”。這個我們稱爲服務的續約(renew)

其配置以及對應的意義

eureka:
  client:
    register-with-eureka: true # 是否註冊自己的信息到EurekaServer,默認是true
    fetch-registry: false # 是否拉取其它服務的信息,默認是true
    service-url: # EurekaServer的地址,現在是自己的地址,如果是集羣,需要加上其它Server的地址。
      defaultZone: http://127.0.0.1:10086/eureka
  instance:
    prefer-ip-address: true # 當調用getHostname獲取實例的hostname時,返回ip而不是host名稱
    ip-address: 127.0.0.1 # 指定自己的ip信息,不指定的話會自己尋找
    lease-expiration-duration-in-seconds: 90 # 服務失效時間,默認值90秒(90秒即過期)
    lease-renewal-interval-in-seconds: 30 # 服務續約(renew)的間隔,默認爲30秒(也就是30秒一次心跳)

在這裏插入圖片描述
status一列

  • UP(1):代表現在是啓動了1個示例,沒有集羣
  • DESKTOP-8SJ4MMQ:producer-service:8081:示例的名稱
    默認格式是:${hostname} + ${spring.application.name} + ${server.port}
    通過instance-id屬性來修改它的構成
eureka:
  instance:
    instance-id: ${spring.application.name}:${server.port}

在這裏插入圖片描述

2、服務消費者

當服務消費者啓動是,會檢測eureka.client.fetch-registry參數的值,如果爲true,代表拉取其它服務的信息,則會從Eureka Server服務的列表只讀備份,然後緩存在本地。默認是每隔30秒會重新獲取並更新數據。也可以自己設置時間。

eureka:
  client:
    registry-fetch-interval-seconds: 30

3、失效剔除

有些時候,我們的服務提供方並不一定會正常下線,可能因爲內存溢出、網絡故障等原因導致服務無法正常工作。Eureka Server需要將這樣的服務剔除出服務列表。因此它會開啓一個定時任務,每隔60秒對所有失效的服務(超過90秒未響應)進行剔除。

可以通過eureka.server.eviction-interval-timer-in-ms參數對其進行修改,單位是毫秒

4、自我保護

在這裏插入圖片描述
這是觸發了Eureka的自我保護機制。當一個服務未按時進行心跳續約時,Eureka會統計最近15分鐘心跳失敗的服務實例的比例是否超過了85%。在生產環境下,因爲網絡延遲等原因,心跳失敗實例的比例很有可能超標,但是此時就把服務剔除列表並不妥當,因爲服務可能沒有宕機。Eureka就會把當前實例的註冊信息保護起來,不予剔除。生產環境下這很有效,保證了大多數服務依然可用。
自我保護模式可以自己設置,可設爲關閉

eureka:
  server:
    enable-self-preservation: false # 關閉自我保護模式(缺省爲打開)
    eviction-interval-timer-in-ms: 1000 # 掃描失效服務的間隔時間(缺省爲60*1000ms)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章