啥叫注冊中心
注冊中心是一種服務管理技術,可以是微服務實例及該服務元數據的數據庫。基本核心功能就是提供服務端的服務注冊,客戶端拉取服務,心跳機制動態維護。
在了解服務注冊中心前,我們有必要了解下CAP設計原則。
C:Consistency,一致性。分布式系統中的各節點(各服務)保持數據的一致性。例如一個服務完成了某項 update 操作,那其他的服務都應該獲取到最新的值。
A:Availability,可用性。解釋來說客戶端可以一直可以正常訪問系統,不會出現操作失敗、超時的問題。
P:Partition tolerance,分區容錯性。某個服務(節點)出現問題,整個系統仍然能對外提供服務,某個服務的問題不影響系統其它功能的正常運行。
在分布式系統中,CAP的原則是上面的三點最多只能同時實現兩點,不能三者兼得。
作為分布式來說,通常需要滿足CP或者AP,不能舍棄P,要不然就不是一個分布式系統了。
CP:放棄可用性。這個在數據性一致性要求高的情況下使用。但是如果網絡出現問題,會有很大的影響。
AP:放棄一致性。不能說不做一致性保證,可能由于網絡問題出現數據不一致的情況。
我們做分布式項目常用的注冊中心有zookeper、nacos、consul、Eureka等。
zookeper
google開源,ZooKeeper是一個分布式的,開放源碼的分布式應用程序協調服務,是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、集群管理等。
ZooKeeper的核心是原子廣播,這個機制保證了集群服務各個Server之間的同步,實現這個機制的協議叫做Zab協議。
原子!同步!很明確的說ZooKeeper采用了CP原則。保證了數據最終一致性。
nacos
阿里開源,Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。
主要特性包括了:
- 服務發現和服務健康監測。支持基于 DNS 和基于 RPC 的服務發現,提供對服務的實時的健康檢查,阻止向不健康的主機或服務實例發送請求。
- 動態配置服務。Nacos 提供了一個簡潔易用的控制臺幫助您管理所有的服務和應用的配置。
- 動態 DNS 服務。支持權重路由,讓您更容易地實現中間層負載均衡、更靈活的路由策略、流量控制以及數據中心內網的簡單DNS解析服務。
- 服務及其元數據管理。管理數據中心的所有服務及元數據。
Nacos 同時支持通知遵循CP原則和AP原則,官方推薦是采用AP原則,保證高可用性。
consul
HashiCorp公司開源,是分布式的、高可用的、 可橫向擴展的用于實現分布式系統的服務發現與配置。
主要特點:
- 服務發現:Consul提供了通過DNS或者HTTP接口的方式來注冊服務和發現服務。
- 健康檢查:Consul的Client可以提供任意數量的健康檢查。
- Key/Value存儲:應用程序可以根據自己的需要使用Consul提供的Key/Value存儲。
- 安全服務通信:Consul可以為服務生成和分發TLS證書,以建立相互的TLS連接。
- 多數據中心:Consul支持開箱即用的多數據中心.。
Consul 遵循CAP原理中的CP原則,使用的是Raft算法,雖然保證了強一致性。
Eureka
Netflix 公司開源,本身是一個基于REST的服務,專用于SpringCloud的服務發現,核心功能就是服務注冊和發現,心跳檢測。
Eureka Server之間通過復制的方式完成數據的同步,同時還提供了客戶端緩存機制,哪怕所有的Eureka Server都掛掉,客戶端依然可以利用緩存中的信息消費其他服務的API。
Eureka 遵循CAP原理中的AP原則,通過心跳檢查、客戶端緩存等機制,確保了系統的高可用性。