Zookeeper隐藏通道和羊群效应

本文探讨了Zookeeper中隐藏通道的问题,即客户端间的额外通信可能导致数据不一致。建议通过设置监视点避免这种情况,同时介绍Zookeeper的sync方法确保数据同步。此外,文章还提到羊群效应,即大量监视点可能导致的通知尖峰,提出了通过有序节点创建锁的解决方案,以减少监视点数量,降低服务器内存消耗。
摘要由CSDN通过智能技术生成

隐藏通道

ZooKeeper客户端总是会观察到相同的更新顺序,即使它们连接到不同的服务端上。但是客户端可能是在不同时间观察到了更新,如果他们还在ZooKeeper以外通信,这种差异就会更加明显。让我们考虑以下场景:

 

  1. 客户端c1更新了/z节点的数据,并收到应答
  2. 客户端c1通过TCP的直接连接告知客户端c2,/z节点状态发生了变化

  3.  

    客户端c2读取/z节点的状态,但是在c1更新之前就观察到了这个状态

我们称之为隐藏通道(hiddenchannel),因为ZooKeeper并不知道客户端之间额外的通信。现在c2 获得了过期数据,图4-2描述了这种情况:

 

为了避免读取到过去的数据,我们建议应用程序使用ZooKeeper进行所有涉及ZooKeeper状态的通信。例如,为了避免刚刚描述的场景,c2 可以在/z节点设置监视点来代替从c1 直接接收消息,通过监视点,c2就可以知道/z节点的变化,从而消除隐藏通道的问题。

 

在这里Zookeeper提供了sync方法,该方法会刷新调用sync的服务端与群首之间的通道,这样就能获取所有的数据变化信息。使用方式如下:

try {
	ZooKeeper zk = new ZooKeeper("127.0.0.1:2181", 3000, null);
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值