(八) 跟我學習SpringCloud-Spring Cloud Eureka是什麼?

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。

推薦企業分佈式架構源碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章