Eureka 是 Netflix 出品的用於實現服務註冊和發現的工具。 Spring Cloud 集成了 Eureka,並提供了開箱即用的支持。其中, Eureka 又可細分爲 Eureka Server 和 Eureka Client。
複製代碼
上圖是來自官網的架構圖,是基於集羣配置的Eureka:
複製代碼
處於不一樣的Eureka Server節點是經過Replicate完成數據同步的html
Application Service爲服務提供者緩存
Application Client爲服務消費者網絡
Make Remote Call爲完成一次服務調用過程架構
當服務啓動時想Eureka註冊,Eureka Service會將註冊的服務信息同步到其餘的Eureka Service。當服務消費者調用服務時,會向Eureka Service獲取服務提供者的地址,並緩存到本地,下次調用時直接從本地獲取服務提供者的地址,並完成一次調用。 當註冊中心檢查到服務提供者因網絡不通,宕機等緣由不可用時,註冊中心會把該服務標記爲down狀態,並把改服務不可用狀態向服務消費者(訂閱者)發送,服務消費者更新本地緩存。 服務提供者啓動後,會週期(默認30秒)向Eureka Server發送心跳,以證實服務可用,若是Eureka Server超過必定時間(默認90秒)沒有收到心跳消息,則任務服務宕機,註銷改服務實例。微服務
在默認配置中,Eureka Server在默認90s沒有獲得客戶端的心跳,則註銷該實例,可是每每由於微服務跨進程調用,網絡通訊每每會面臨着各類問題,好比微服務狀態正常,可是由於網絡分區故障時,Eureka Server註銷服務實例則會讓大部分微服務不可用,這很危險,由於服務明明沒有問題。
爲了解決這個問題,Eureka 有自我保護機制,經過在Eureka Server配置以下參數,可啓動保護機制:
eureka.server.enable-self-preservation=true
它的原理是,當Eureka Server節點在短期內丟失過多的客戶端時(可能發送了網絡故障),那麼這個節點將進入自我保護模式,再也不註銷任何微服務,當網絡故障回覆後,該節點會自動退出自我保護模式。
自我保護模式的架構哲學是寧肯放過一個,決不可錯殺一千
複製代碼