天天看點

spring cloud 學習(二)關于 Eureka 的學習筆記

關于 Eureka 的學習筆記

個人部落格位址 : https://zggdczfr.cn/ ,歡迎光臨~

前言

Eureka是Netflix開發的服務發現元件,本身是一個基于REST的服務。Spring Cloud将它內建在其子項目spring-cloud-netflix中,以實作Spring Cloud的服務發現功能。

在Spring Cloud中,将會使用 Eureka 作為發現服務,是以了解 Eureka 是非常重要的。是以做了一下翻譯以及學習筆記記錄。

Eureka的Github:https://github.com/Netflix/Eureka

Eureka 筆記

什麼是 Eureka?

Eureka 是基于 REST(Representational State Transfer)服務。主要用于AWS雲中的定位/發現服務,進而實作對于中間層伺服器的負載均衡(Load Balance)和故障切換(failover)。

同時,Eureka 還提供了一個基于JAVA的用戶端元件(Eurake Client),便于與Eureka Server進行互動。在用戶端中,同樣内置了負載均衡,用于執行基本的負載均衡輪詢制度。

而 Netflix 将它們集合成一個更加負載的負載均衡器,通過對流量、資源使用等因素,提供了更加合理的權重負載均衡政策服務。Eureka 具有心跳檢測、健康檢查和用戶端緩存等多種機制提高了服務系統的靈活性。

什麼是AWS雲?

對于AWS雲,可以參考一下這篇博文 http://blog.csdn.net/awschina/article/details/17639191

感覺 Eureka 就是為了提供對于 AWS雲服務 的補充(中間層負載均衡)。

什麼是中間層(Middle Tier)?

上面老是提到了中間層(Middle Tier)。中間層 (Middle Tier)也稱作“應用程式伺服器層或應用服務層”,是使用者接口或 Web 用戶端與資料庫之間的邏輯層。典型情況下 Web 伺服器位于該層,業務對象在此執行個體化。(來源于百度百科)

Eureka 目的/優點

  • 中間層的負載均衡
  • 使用 Netflix 的紅/黑部署(red/black deployments),使開發者更加容易實作雲部署
  • 對于 cassandra deployments,友善于對執行個體化後的對象維護
  • 利用 memcached 提供緩存服務(Memcached 是一個高性能的分布式記憶體對象緩存系統,用于動态Web應用以減輕資料庫負載。)。
  • 可配置性/動态配置。使用Eureka,可以即時添加或删除群集節點;Eureka使用archaius(Netflix開源的配置管理類):如果你有一個配置源實作,這些配置可以進行動态調整應用。

Eureka 最大的特性

Eureka 叢集服務具有極大的”彈性”(Resilience)。這個是我認為它最大的特點。

* Eureka Client 處理一個或多個Eureka伺服器的故障。 由于 Eureka Client 在其中具有系統資料庫緩存資訊,是以即使所有 Eureka Servers 都關閉,它們還是可以很好地運作。

* Eureka Servers 即使在其他 Eureka 挂了也具有極大的”彈性”。既是是在 Client 與 Server 的網絡分裂(network partition)期間,Eureka Server 具有的内部彈性特性也能防止大規模服務中斷。

Eureka Server 與 Client 之間的通信

Eureka 隻是找到有關用戶端與之通信的伺服器的資訊,但不對通信的協定或方法施加任何限制。通常情況下,我們可以使用 Eureka 擷取目标伺服器位址,并使用thrift,http(s)或任何其他RPC機制等協定來進行互動通信。

Eureka 架構

spring cloud 學習(二)關于 Eureka 的學習筆記

上圖為 Eureka 官方架構圖。

接下來,對其中的名詞進行解釋:

  • Application Service 相當于服務提供者
  • Application Client 相當于服務消費者
  • Make Remote Call,其實就是實作服務的使用
  • us-east-1 其實實作了Eurake 叢集服務
  • us-east-1c、us-east-1d、us-east-1e 就是叢集服務中的某個具體實作區域(感覺找不到一個合适的詞來解釋這種抽象的概念)

Eureka 架構機制

我們的 Eureka 叢集服務其實就是靠 Server 與 Client 之間的互動來實作的。

1. 前面說過,Eureka Server 具有服務定位/發現的能力,在各個微服務啟動時,會通過Eureka Client向Eureka Server進行注冊自己的資訊(例如網絡資訊)。

2. 一般情況下,微服務啟動後,Eureka Client 會周期性向 Eureka Server 發送心跳檢測(預設周期為30秒)以注冊/更新自己的資訊。

3. 如果 Eureka Server 在一定時間内(預設90秒)沒有收到 Eureka Client 的心跳檢測,就會登出掉該微服務點。

4. 同時,Eureka Server 它本身也是 Eureka Client,多個 Eureka Server 通過複制系統資料庫的方法來完成服務系統資料庫的同步進而達到叢集的效果

參考資料

  • https://github.com/Netflix/eureka/wiki