注冊中心規則
每一個微服務啟動的時候,都需要去注冊中心注冊(eureka或zookeeper或其他)
同類服務注冊的服務名必須相同,不同類服務注冊的服務名一定不能相同
(訂單服務部署5台服務器,那么這5台微服務在注冊中心中注冊的服務名必須一致,例如ORDER)
(商品服務部署4台服務器,那么這4台微服務在注冊中心中注冊的服務名必須一致,例如GOODS)
(訂單服務和商品服務注冊的服務名一定不能相同,不能同為ORDER,也不能同為GOODS)
eureka是什么
eureka作為分布式系統的注冊中心,主要作用是用於服務治理
eureka分為eureka server和eureka client
eureka原理
每一個微服務中都有eureka client,用於服務的注冊於發現
(服務的注冊:把自己注冊到eureka server)
(服務的發現:從eureka server獲取自己需要的服務列表)
每一個微服務啟動的時候,都需要去eureka server注冊
當A服務需要調用B服務時,需要從eureka服務端獲取B服務的服務列表,然后把列表緩存到本地,然后根據ribbon的客戶端負載均衡規則,從服務列表中取到一個B服務,然后去調用此B服務
當A服務下次再此調用B服務時,如果發現本地已經存儲了B的服務列表,就不需要再從eureka服務端獲取B服務列表,直接根據ribbon的客戶端負載均衡規則,從服務列表中取到一個B服務,然后去調用B服務
微服務,默認每30秒,就會從eureka服務端獲取一次最新的服務列表
如果某台微服務down機,或者添加了幾台機器,
此時eureka server會通知訂閱他的客戶端,並讓客戶端更新服務列表,
而且還會通知其他eureka server更新此信息
心跳檢測,微服務每30秒向eureka server發送心跳,
eureka server若90s之內都沒有收到某個客戶端的心跳,則認為此服務出了問題,
會從注冊的服務列表中將其刪除,並通知訂閱它的客戶端更新服務列表,
而且還會通知其他eureka server更新此信息
eureka server保護機制,通過打卡開關,可以讓eureka server處於保護狀態,主要是用於某eureka server由於網絡或其他原因,導致接收不到其他微服務的心跳,此時不能盲目的將其他微服務從服務列表中刪除。
具體規則:如果一段時間內,85%的服務都沒有發送心跳,則此server進入保護狀態,此狀態下,可以正常接受注冊,可以正常提供查詢服務,但是不與其他server同步信息,也不會通知訂閱它的客戶端,這樣就不會誤殺其他微服務
zookeeper原理
zookeeper也可以作為注冊中心,用於服務治理(zookeeper還有其他用途,例如:分布式事務鎖等)
每啟動一個微服務,就會去zk中注冊一個臨時子節點,
例如:5台訂單服務,4台商品服務
(5台訂單服務在zk中的訂單目錄下創建的5個臨時節點)
(4台商品服務在zk中的商品目錄下創建的4個臨時接點)
每當有一個服務down機,由於是臨時接點,此節點會立即被刪除,並通知訂閱該服務的微服務更新服務列表
(zk上有watch,每當有節點更新,都會通知訂閱該服務的微服務更新服務列表)
每當有一個新的微服務注冊進來,就會在對應的目錄下創建臨時子節點,並通知訂閱該服務的微服務更新服務列表
(zk上有watch,每當有節點更新,都會通知訂閱該服務的微服務更新服務列表)
每個微服務30s向zk獲取新的服務列表
CAP基本概念
分布式系統的三個指標
1、Consistency 一致性
2、Availability 可用性
3、Partition tolerance 分區容錯性
eureka和zookeeper區別
eureka基於AP
zookeeper基於CP
由於作為注冊中心可用性的需求要高於一致性,所以eureka貌似要比zookeeper更合理一些