閱讀273 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Spring cloud--服務注冊和服務發現-Eureka 的使用

一、Spring Cloud Netflix

該項目是Spring Cloud的核心子項目,是對Netflix公司一係列開源產品的封裝。它為Spring Boot應用提供了自配置的整合,隻需要通過一些簡單的注解,就可以快速地在Spring Cloud的應用中使用起來。

它主要提供的模塊包括:
服務發現注冊(Eureka)
客戶端負載均衡(Ribbon)
斷路器(Hystrix)
智能路由(Zuul)
 
開源地址:
https://netflix.github.io/
https://github.com/Netflix
 
二、服務注冊和服務發現
3797b835444afbd133b5ec09e251949e9ece7f57
調用關係說明:
1.服務提供者在啟動時,向注冊中心注冊自己提供的服務。
2.服務消費者在啟動時,向注冊中心訂閱自己所需的服務。
3.注冊中心返回服務提供者地址給消費者。
4.服務消費者從提供者地址中調用消費者。
    
注意! 下麵的服務端指:注冊中心,客戶端指:提供者和消費者
 
  三、如何使用Eureka進行服務注冊和發現

1、服務端添加依賴


2、服務端添加配置

# server (eureka 默認端口為:8761)


# spring


# eureka
# 是否注冊到eureka


# 是否從eureka獲取注冊信息


# eureka服務器的地址(注意:地址最後麵的 /eureka/ 這個是固定值)


3、服務端添加注解


4、客戶端添加依賴


5、客戶端添加配置
提供者
# server


# spring


# eureka


消費者
# server


# spring


# eureka


6、客戶端添加注解


注意:
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

分析:是由於Eureka進入了保護模式。
在保護模式下,Eureka Server將會嚐試保護其服務注冊表中的信息,暫時不會注銷服務注冊表中的服務。

四、基本流程:
a31a6ecea99b7418fa387f39ab1077b5417bc893

1、  最左邊的client(即服務提供者)發起us-east-1c注冊請求;
2、  Eureka Server集群中的其他兩個node(us-east-1d和us-east-1e進行Replicate複製);
3、  圖下放的兩個client(即服務消費者)分別向三個server獲取注冊信息及Get Registry。

五、和Zookeeper的對比

1、分布式係統的CAP理論:

一致性(C):所有的節點上的數據時刻保持同步。
可用性(A):每個請求都能接受到一個響應,無論響應成功或失敗。
分區容錯性(P):係統應該能持續提供服務,即使係統內部有消息丟失(分區)。
 
由於分區容錯性在是分布式係統中必須要保證的,因此我們隻能在A和C之間進行權衡。
在此Zookeeper保證的是CP, 而Eureka則是AP。
 
2、Zookeeper保證CP

ZooKeeper是個 CP的,即任何時刻對ZooKeeper的訪問請求能得到一致的數據結果,同時係統對網絡分割具備容錯性、但是它不能保證每次服務請求的可用性(注:也就是在極端環境下,ZooKeeper可能會丟棄一些請求,消費者程序需要重新請求才能獲得結果)。

例如:當master節點因為網絡故障與其他節點失去聯係時,剩餘節點會重新進行leader選舉。問題在於,選舉leader的時間太長,30 ~ 120s, 且選舉期間整個zk集群都是不可用的,這就導致在選舉期間注冊服務癱瘓。
 
3、Eureka保證AP

Eureka看明白了這一點,因此在設計時就優先保證可用性。我們可以容忍注冊中心返回的是幾分鍾以前的注冊信息,但不能接受服務直接down掉不可用。也就是說,服務注冊功能對可用性的要求要高於一致性。

如果Eureka服務節點在短時間裏丟失了大量的心跳連接(注:可能發生了網絡故障),那麼這個 Eureka節點會進入“自我保護模式”,同時保留那些“心跳死亡”的服務注冊信息不過期。此時,這個Eureka節點對於新的服務還能提供注冊服務,對於“死亡”的仍然保留,以防還有客戶端向其發起請求。當網絡故障恢複後,這個Eureka節點會退出“自我保護模式”。Eureka的哲學是,同時保留“好數據”與“壞數據”總比丟掉任何數據要更好。
 
4、總結
Eureka作為單純的服務注冊中心來說要比zookeeper更加“專業”,因為注冊服務更重要的是可用性,我們可以接受短期內達不到一致性的狀況。
當然,這也要看具體的使用場景。


最後更新:2017-06-29 09:02:13

  上一篇:go  6月28日雲棲精選夜讀:重要通知|針對新一輪比特幣勒索蠕蟲病毒的安全建議
  下一篇:go  基於Kubernetes的分布式壓力測試方案