一、Zookeeper和Nacos區別
Zookeeper和Nacos都是分散式協調服務,它們的核心功能非常相似:註冊中心、配置中心、分散式鎖。但是Zookeeper和Nacos有一些明顯的區別:
1、Zookeeper是Apache早期的一個開源項目,基於Paxos協議實現,穩定性非常高;Nacos是阿里巴巴開發的最新一代服務發現和配置管理中心,除了支持CAP理論之外,還支持docker/k8s環境下的動態配置。
2、Zookeeper只支持java客戶端的api介面,其他語言調用需要通過ZkClient等第三方庫;Nacos支持多語言的客戶端介面(支持Java, .NET Core, Go等)。
3、Zookeeper配置和數據都是存儲在內存中,需要從磁碟載入,啟動時間需要幾分鐘到十多分鐘;Nacos的數據存儲使用了Mysql和RockDB,支持高並發、容錯、持久化,啟動時間比Zookeeper快很多。
二、Zookeeper幹嘛的
Zookeeper可以用於構建高可用、高可靠的分散式應用程序,底層使用ZAB協議,可以提供數據發布/訂閱、服務發現、負載均衡、分散式鎖、分散式隊列等功能。
在分散式應用程序中,節點之間需要調用、協調和發送消息。Zookeeper的作用就是為這些節點提供一個相對穩定的中心點,它可以對這些節點進行統一的管理和控制。Zookeeper用來保證分散式系統中各個節點之間的數據一致性,是一種典型的發布/訂閱模型。
Zookeeper的一個非常重要的作用就是對分散式鎖的支持,可以應用在分散式事務、分散式協調等場景中。它可以確保在一個時刻只有一個客戶端對一個共享資源進行修改,從而防止數據混亂。
此外,Zookeeper還支持分散式的隊列,允許在分散式的環境中同時在線下進行發布和消費的數據。
三、Zookeeper使用場景
1、分散式鎖:Zookeeper可以為分散式系統提供分散式鎖,實現多個應用實例對共享資源的並發安全訪問。
public class DistributedLock{
private static final int sessionTimeout = 5000;//比較合理的超時時間
private static final String CONNECTION_STRING = "localhost:2181,localhost:2182,localhost:2183";//zookeeper地址
private static ZooKeeper zooKeeper;
private static CountDownLatch connectedSemaphore = new CountDownLatch(1);//計數器對象
public static boolean acquire(String lockPath) throws Exception {
zooKeeper = new ZooKeeper(CONNECTION_STRING, sessionTimeout, new Watcher() {
public void process(WatchedEvent event) {
}
});
connectedSemaphore.await();
zooKeeper.create(lockPath, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
return true;
}
}
2、配置中心:Zookeeper可以保存應用程序的配置文件,實現動態配置,當配置變化時,可以熱載入生效。
private String initConfig() {
byte[] data = new byte[0];
try {
data = zooKeeper.getData(CONFIG_PATH, null, null);
} catch (Exception e) {
e.printStackTrace();
}
return new String(data);
}
3、服務發布與發現:Zookeeper提供了分散式的服務註冊與發現服務,可以實現服務動態擴容、負載均衡等功能。
public class ServiceDiscovery {
private ZooKeeper zooKeeper;
public void watchNode (String serviceName) {
try {
List<String> nodeList = zooKeeper.getChildren(Constant.ZK_REGISTRY_PATH + "/" serviceName, true);
List<String> dataList = new ArrayList<String>();
for (String node : nodeList) {
byte[] bytes = zooKeeper.getData(Constant.ZK_REGISTRY_PATH + "/" + serviceName + "/" + node, false, null);
String data = new String(bytes);
dataList.add(data);
}
ServiceDiscoveryUtil.updateServiceList(serviceName, dataList);
} catch (KeeperException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
四、Zookeeper是做什麼的
Zookeeper主要用於解決分散式應用程序中的一些共性問題,如應用程序的配置數據、命名服務、集群管理、分散式鎖、分散式隊列等問題。通過實現這些功能,Zookeeper可以讓分散式系統中的各個節點之間更加穩定、可靠、安全、高效地通信。
五、Zookeeper能幹什麼
Zookeeper最大的用途是為分散式系統提供分散式應用程序的一些共性問題的解決方案,如配置管理、服務註冊、分散式鎖等功能。這些功能的實現可以讓分散式系統中的各個節點之間更加穩定、可靠、安全、高效地通信。
Zookeeper還可以應用在如下場景中:
1、分散式的隊列:使用Zookeeper實現分散式的隊列,可以在分散式環境中同時在線下進行發布和消費的數據。
2、集中式協調服務:通過Zookeeper可以構建分散式協調服務,提供諸如領導選舉、分散式鎖、分散式數據存儲等功能。
3、配置中心:可以通過Zookeeper實現應用程序的配置中心,實現動態配置。
六、Zookeeper是什麼框架
Zookeeper是一個分散式的協調框架,它為分散式應用程序中的節點提供統一的管理和控制,提高應用程序的可靠性和可用性。
Zookeeper的特點:
1、高可用性:Zookeeper可以構建高可用、高可靠的分散式應用程序,在主節點故障的情況下,從節點可以接手工作,保障分散式應用程序的正常運行。
2、高性能:Zookeeper採用ZAB協議,在數據一致、可用性和延遲之間做了很好的平衡。
3、易於使用:Zookeeper提供簡便的api介面,可以快速的進行分散式開發。
七、Zookeeper面試題及答案
1、Zookeeper是什麼?
Zookeeper是一個分散式的協調框架,它為分散式應用程序中的節點提供統一的管理和控制,提高應用程序的可靠性和可用性。
2、Zookeeper提供哪些功能?
Zookeeper提供命名服務、分散式鎖、分散式隊列、服務發現、配置中心等功能。
3、Zookeeper的數據模型是什麼?
Zookeeper的數據模型是一個樹形結構,節點名由斜杠分隔的字元串構成。
4、Zookeeper如何實現分散式鎖?
Zookeeper的實現方式是創建有序節點,等待序號最小的節點釋放鎖。
八、簡述Zookeeper的功能
Zookeeper是一個分散式協調框架,提供了分散式應用程序的共性問題解決方案,如命名服務、分散式鎖、分散式隊列、配置中心等功能。通過這些功能,可以讓分散式系統中的各個節點之間更加穩定、可靠、安全、高效地通信。
九、Zookeeper和Kafka的關係
Zookeeper在Kafka中扮演著非常重要的角色,主要用於保存Kafka的元數據,如Broker的信息、Topic的信息、Partition的信息等。在Kafka中,每當一個Broker加入或離開集群,或者一個Topic被創建或刪除,Zookeeper都需要進行相應的更新,以便Kafka Cluster能夠更新它的元數據。
原創文章,作者:DBTDY,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329597.html