一、概述
springcloud是一個非常優秀的微服務框架,要管理眾多的服務,就需要對這些服務進行治理,也就是我們說的服務治理,服務治理的作用就是在傳統的rpc遠程調用框架中,管理每個服務與每個服務之間的依賴關係,可以實現服務調用、負載均衡、服務容錯、以及服務的註冊與發現。
如果微服務之間存在調用依賴,就需要得到目標服務的服務地址,也就是微服務治理的服務發現。要完成服務發現,就需要將服務信息存儲到某個載體,載體本身即是微服務治理的服務註冊中心,而存儲到載體的動作即是服務註冊。
springcloud支持的註冊中心有Eureka、Zookeeper、Consul、Nacos
組件名稱所屬公司組件簡介EurekaNetflixspringcloud最早的註冊中心,目前已經進入停更進維了ZookeeperApachezookeeper是一個分布式協調工具,可以實現註冊中心功能ConsulHashicorpConsul 簡化了分布式環境中的服務的註冊和發現流程,通過 HTTP 或者 DNS 接口發現。支持外部 SaaS 提供者等。NacosAlibabaNacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。1.1 eureka
Spring Cloud Netflix 在設計 Eureka 時就緊遵AP原則,Eureka Server 也可以運行多個實例來構建集群,解決單點問題,但不同於 ZooKeeper 的選舉 leader 的過程,Eureka Server 採用的是Peer to Peer 對等通信。這是一種去中心化的架構,無 master/slave 之分,每一個 Peer 都是對等的。在這種架構風格中,節點通過彼此互相註冊來提高可用性,每個節點需要添加一個或多個有效的 serviceUrl 指向其他節點。每個節點都可被視為其他節點的副本。
在集群環境中如果某台 Eureka Server 宕機,Eureka Client 的請求會自動切換到新的 Eureka Server 節點上,當宕機的服務器重新恢復後,Eureka 會再次將其納入到服務器集群管理之中。當節點開始接受客戶端請求時,所有的操作都會在節點間進行複製(replicate To Peer)操作,將請求複製到該 Eureka Server 當前所知的其它所有節點中。
Eureka的集群中,只要有一台Eureka還在,就能保證註冊服務可用(保證可用性),只不過查到的信息可能不是最新的(不保證強一致性)。除此之外,Eureka還有一種自我保護機制,如果在15分鐘內超過85%的節點都沒有正常的心跳,那麼Eureka就認為客戶端與註冊中心出現了網絡故障,此時會出現以下幾種情況:
Eureka不再從註冊表中移除因為長時間沒有收到心跳而過期的服務;
Eureka仍然能夠接受新服務註冊和查詢請求,但是不會被同步到其它節點上(即保證當前節點依然可用);
當網絡穩定時,當前實例新註冊的信息會被同步到其它節點中;
因此,Eureka可以很好的應對因網絡故障導致部分節點失去聯繫的情況,而不會像zookeeper那樣使得整個註冊服務癱瘓。關於微服務面試資料,公眾號Java精選,回復java面試,獲取資料。
Eureka保證高可用(A)和最終一致性: