0--前言 spring cloud的服務註冊中心,該選擇誰?在選擇前,我們首先需要來瞭解下分散式的CAP定理: 所謂CAP,是指: Consistency:一致性;就是在分散式系統中的所有數據備份,在同一時刻是否同樣的值 Availability:可用性;就是負載過大後,集群整體是否還能響應客戶端 ...
0--前言
spring cloud的服務註冊中心,該選擇誰?在選擇前,我們首先需要來瞭解下分散式的CAP定理:
所謂CAP,是指:
Consistency:一致性;就是在分散式系統中的所有數據備份,在同一時刻是否同樣的值
Availability:可用性;就是負載過大後,集群整體是否還能響應客戶端的讀寫請求
Partition tolerance :分區容錯性,就是高可用性;一個節點掛了,並不影響其它的節點
三者不可能同時滿足,最多只能滿足其中兩項;
1-- eureka vs consul
在分散式系統中,P是一定要滿足的,不滿足P是不可接受的;那麼在C一致性和A可用性之間,就存在取捨。很顯然,更多時候,我們更看重A可用性,而不需要實時的一致性,只需要最終一致即可;所以,滿足AP更符合絕大多數項目的實際;
Zookeeper和Consul :滿足CP,保證了一致性,集群搭建的時候,某個節點失效,則會進行選舉行的leader,或者半數以上節點不可用,則無法提供服務,因此可用性無法滿足
Eureka:滿足AP,無主從節點,一個節點掛了,自動切換其他節點可以使用,去中心化
從實際而言,一般除了一些特殊行業需要強調C一致性(例如金融、銀行)以外,其他的系統更註重A可用性,所以:
2--結論:該選擇誰?
我們很不喜歡那些模棱兩可萬金油般的的結論,對比來對比去,讓大家糾結來糾結去;我們可以很明確的給你下個結論:
對於金融類似的特殊行業有C一致性的強烈需求的,用Consul ;
其他的,統統用Eureka;
PS:題外話:關於Eureka閉源,是2.X閉源,但2.X從未發佈,官方最新的版本是1.9,所以不要受額外的消息影響,大膽使用合適的。