1.如何管理百万长链接 - ZooKeeper Watcher机制

一、业务背景

公司经营自贩机售卖业务,技术框架使用Netty技术封装的网关实现服务端、自贩机客户端长连接。首先网关注册到ZooKeeper节点上,机器也注册到对应网关的节点下面。然后消息处理程序监听网关节点其对应的Topic,然后消息处理单元通过拉取上行消息Topic处理后,然后返回处理后的消息通过下行Topic处理。网关收到下行Topic消息后通过长连接下发给工控。技术关注:网关上下线的自动发现、工控长连接与ZK节点的相互绑定、网关节点如果被误删能自动恢复提升程序的安全、降低程序轮询节点的消耗。业务关注点:能准确的判断某台机器是否在线、机器总体在线情况统计准确。  这几点我们通过ZK Watcher解决。

二、ZooKeeper Watcher使用及原理

2.1、ZK Watcher解决什么问题?

ZK Watcher主要解决节点的变化并且通知的场景需求。比如:我们改变ZK节点配置如何能让所有的集群节点都收到通知并统一生效、在集群中我们某个程序挂掉如何将其踢出集群?ZK为了实现上述机制采用订阅通知的模式处理。当程序订阅某个ZK节点,这个节点发生节点删除、内容修改、节点创建、节点子节点变更都会通知订阅的程序。

2.2、如何使用ZK Watcher?

 

2.3、ZK Watcher特征

2.3.1、ZK Watcher事件注册

ZK Watcher需要注册才能生效,ZK有两类事件类型分别为节点事件类型注册、客户端事件注册。

事件注册方式注册事件类型
 zk.getData[获取数据注册]节点事件注册
zk.exists[节点是否存在注册]
zk.getChildren[获取子节点注册]
zk.ZooKeeper[zk创建连接注册]客户端事件注册

 

 

 

 

 

2.3.2、ZK Watcher事件类型

ZK Watcher分为节点事件类型通知、客户端状态类型通知两类。EventType主要处理节点创建、删除、节点内容变化、节点子节点变化等通知,KeeperState主要处理连接失败、连接成功、认证失败、只读连接创建、SASL身份验证、会话过期通知等。

事件类型事件类型事件类型事件类型描述
EventType[节点事件类型]
EventType.NodeCreated节点创建通知
EventType.NodeDeleted节点删除通知
EventType.NodeDataChanged节点data数据变化通知
EventType.NodeChildrenChanged一个节点的子节点数据变化通知
KeeperState[客户端状态事件类型]
KeeperState.Disconnected连接失败通知
KeeperState.NoSyncConnected过时,未同步连接 服务器不会产生此状态
KeeperState.SyncConnected连接成功通知
KeeperState.AuthFailed认证失败通知
KeeperState.ConnectedReadOnly只读连接创建通知
KeeperState.SaslAuthenticatedSASL身份验证通过通知
KeeperState.Expired会话过期通知

 

 

 

 

 

 

 

 

 

 

 

2.3.3、ZK Watcher事件特征

   ZK Watcher事件类型有3大特征分别为一次性、客户端串行执行、轻量。

  • 一次性

      

  • 串行执行

 

  • 轻量

 

2.4、ZK Watcher源码解读

 

2.5、ZK性能测试

 

三、ZK vs Redis选型

redis list、size结构

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值