首先分下了解下:
Zookeeper
Zookeeper 是 Apache Hadoop 的子項目,是一個樹型的目錄服務,支援變更推送,适合作為 Dubbo 服務的注冊中心,工業強度較高。
Nacos
Nacos 是 Alibaba 公司推出的開源工具,用于實作分布式系統的服務發現與配置管理。Nacos 是 Dubbo 生态系統中重要的注冊中心實作。
Dubbo
Dubbo 是阿裡巴巴公司開源的一個Java高性能優秀的服務架構,使得應用可通過高性能的 RPC 實作服務的輸出和輸入功能,可以和 Spring架構無縫內建。
Kafka
Kafka是最初由Linkedin公司開發,是一個分布式、支援分區的(partition)、多副本的(replica),基于Zookeeper協調的分布式消息系統。
它的最大的特性就是可以實時的處理大量資料以滿足各種需求場景:
- 基于hadoop的批處理系統
- 低延遲的實時系統
- storm/Spark流式處理引擎
- web/nginx日志
- 通路日志
- 消息服務等等
用scala語言編寫,Linkedin于2010年貢獻給了Apache基金會并成為頂級開源 項目。
Zookeeper與Nacos
1、配置中心
Nacos和Zookeeper都可以作為配置中心,做一些可以實時變化的配置資料存儲,然後實時更新線上資料。
差別:存儲和資料更新
Nacos:依賴Mysql資料庫做資料存儲,當有資料更新的時候,直接更新資料庫的資料,然後将資料更新的資訊異步廣播給Nacos叢集中所有服務節點資料變更,再由Nacos服務節點更新本地緩存,然後将通知用戶端節點資料變化。
Zookeeper:利用zk的樹型結構做資料存儲,當有資料更新的時候使用過半機制保證各個節點的資料一緻性;然後通過zk的事件機制通知用戶端。
最大的差別就是伺服器存儲位置不同,它們分别采用mysql和zk本身存儲
消息發送,一個有采用過半機制保持一緻性,另外一個異步廣播,通過背景線程重試保證。
2、注冊中心
Nacos:nacos支援兩種方式的注冊中心,持久化和非持久化存儲服務資訊。
Zookeeper:利用zk的樹型結構做資料存儲,服務注冊和消費資訊直接存儲在zk樹形節點上,叢集下同樣采用過半機制保證服務節點間一緻性
Zookeeper與kafka
1、Kafka把它的meta資料都存儲在ZK上,是以說ZK是必要存在的,沒有ZK沒法運作Kafka;在老版本(0.8.1以前)裡面消費段(consumer)也是依賴ZK的,在新版本中移除了用戶端對ZK的依賴,但是broker依然依賴于ZK。
2、kafka是消息隊列,Zookeeper是服務的控制中心;消費者要通路服務,需要知道現在哪些生産者(對于消費者而言,kafka就是生産者)是可用的,就需要zk的排程。
Zookeeper與dubbo
Dubbo建議使用Zookeeper作為服務的注冊中心。
Dubbo是一個架構,用于服務間的排程,服務程式編寫使用dubbo做接口,利用dubbo實作服務與服務之間還有Zookeeper之間的通訊。
Zookeeper的作用:
Zookeeper用來注冊服務和進行負載均衡,哪一個服務由哪一個機器來提供必需讓調用者知道,簡單來說就是ip位址和服務名稱的對應關系。當然也可以 通過寫死的方式把這種對應關系在調用方業務代碼中實作,但是如果提供服務的機器挂掉調用者無法知曉,如果不更改代碼會繼續請求挂掉的機器提供服務。
dubbo:
它是管理中間層的工具,在業務層到資料倉庫間有非常多服務的接入和服務提供者需要排程,dubbo提供一個架構解決這個問題。
注意:
這裡的dubbo隻是一個架構,這個架構中要完成排程必須要有一個分布式的注冊中心,儲存所有服務的中繼資料,你可以用zk,也可以用别的。
- Zookeeper與nacos除了實作方式不一樣,其他功能都差不多。
- dubbo就是一個RPC調用架構,它需要分布式注冊中心Zookeeper或nacos。
- kafka就是依賴Zookeeper來運作的。