如果同时一万个服务同时创建 /goods 我想了解下 zookeeper是怎么处理的 大能老师 谢谢您了

来源:7-3 ZooKeeper单机版的安装与常用操作命令

qq_冰封夕阳_5

2022-11-17

如果同时一万个服务同时创建 /goods 我想了解下 zookeeper是怎么处理的 大能老师 谢谢您了

写回答

1回答

大能老师

2022-11-17

ZooKeeper是一个分布式协调服务,会保障创建同名节点的唯一性。所以如果一万个服务同时创建/goods节点,有且仅有一个/goods名称的节点会被创建成功。其他请求,服务器会相应Node already exists: /goods。由于所有的写请求都会被Follower节点转发到Leader节点执行,创建节点的请求也是一样的,所以只会由Leader节点创建新的节点,然后把数据同步到其他Follower节点。

zookeeper创建节点是由DataTree的createNode方法来执行的。

createNode方法逻辑:

  • 获取到所要创建的新节点的name和其父节点的parentName,创建一个StatPersisted对象来存储新节点的一些状态属性信息;

  • 从名为nodes的ConcurrentHashMap(用于存放所有的节点,key是path字符串,value是DataNode对象)中获取到父节点,然后用synchronized锁住父节点,避免其他请求出现并发问题;

  • 在获取到父节点之后,会将“新节点的路径”添加到“父节点的children的Set集合”中,同时将新节点放到nodes的ConcurrentHashMap中。


0
2
大能老师
回复
qq_冰封夕阳_5
哈哈哈感谢支持,最近确实有在准备新课程,还需要一点时间打磨一下,敬请期待~😁
2022-11-17
共2条回复

Java分布式架构设计与开发实战

项目贯穿式讲解,真正将理论与实战相结合

325 学习 · 74 问题

查看课程