(8)SpringCloud-Spring Cloud Eureka

JIAN2發表於2022-10-12

Spring Cloud Eureka 是 Spring Cloud Netflix 微服務套件的一部分,基於 Netflix Eureka 做了二次封裝,主要負責實現微服務架構中的服務治理功能。

Spring Cloud Eureka 是一個基於 REST 的服務,並且提供了基於 Java 的客戶端元件,能夠非常方便地將服務註冊到 Spring Cloud Eureka 中進行統一管理。

服務治理是微服務架構中必不可少的一部分,阿里開源的 Dubbo 框架就是針對服務治理的。服務治理必須要有一個註冊中心,除了用 Eureka 作為註冊中心外,我們還可以使用 Consul、Etcd、Zookeeper 等來作為服務的註冊中心。

用過 Dubbo 的讀者應該清楚,Dubbo 中也有幾種註冊中心,比如基於 Zookeeper、基於 Redis 等,不過用得最多的還是 Zookeeper 方式。

至於使用哪種方式都是可以的,註冊中心無非就是管理所有服務的資訊和狀態。若用我們生活中的例子來說明的話,筆者覺得 12306 網站比較合適。

首先,12306 網站就好比一個註冊中心,顧客就好比呼叫的客戶端,當他們需要坐火車時,就會登入 12306 網站上查詢餘票,有票就可以購買,然後獲取火車的車次、時間等,最後出發。

程式也是一樣,當你需要呼叫某一個服務的時候,你會先去 Eureka 中去拉取服務列表,檢視你呼叫的服務在不在其中,在的話就拿到服務地址、埠等資訊,然後呼叫。

註冊中心帶來的好處就是,不需要知道有多少提供方,你只需要關注註冊中心即可,就像顧客不必關心有多少火車在開行,只需要去 12306 網站上看有沒有票就可以了。

為什麼 Eureka 比 Zookeeper 更適合作為註冊中心呢?主要是因為 Eureka 是基於 AP 原則構建的,而 ZooKeeper 是基於 CP 原則構建的。

在分散式系統領域有個著名的 CAP 定理,即 C 為資料一致性;A 為服務可用性;P 為服務對網路分割槽故障的容錯性。這三個特性在任何分散式系統中都不能同時滿足,最多同時滿足兩個。

Zookeeper 有一個 Leader,而且在這個 Leader 無法使用的時候透過 Paxos(ZAB)演算法選舉出一個新的 Leader。這個 Leader 的任務就是保證寫資料的時候只向這個 Leader 寫入,Leader 會同步資訊到其他節點。透過這個操作就可以保證資料的一致性。

總而言之,想要保證 AP 就要用 Eureka,想要保證 CP 就要用 Zookeeper。

Dubbo 中大部分都是基於 Zookeeper 作為註冊中心的。Spring Cloud 中當然首選 Eureka。

需要框架原始碼請看我個人簡介


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006413/viewspace-2917879/,如需轉載,請註明出處,否則將追究法律責任。

相關文章