zookeeper数据同步
zookeeper数据同步
Soul网关提供的三种数据同步方式
Soul网关提供了一下三种,可以任意选择
- 基于zookeeper的监听订阅模式;
- webSocket推送模式;
- http长轮询;
为什么需要数据同步?
- Soul网关是服务层和控制台分离的,而服务层又是可以集群部署的,存在数据一致性问题;
- 网关是公司流量入口,为了提升响应速度,所有的数据应该存在JVM内存中,这样每次请求的响应速度非常之快;
zookeeper数据同步原理
基于 zookeeper 的同步原理主要依赖 zookeeper 的 watch 机制,soul-web 会监听配置的节点,soul-admin 在启动的时候,会将数据全量写入 zookeeper,后续数据发生变更时,会增量更新 zookeeper 的节点,与此同时,soul-web 会监听配置信息的节点,一旦有信息变更时,会更新本地缓存。
zookeeper 的watch 机制
- Watcher 监听机制是 Zookeeper 中非常重要的特性,我们基于 zookeeper 上创建的节点,可以对这些节点绑定监听事件。比如可以监听节点数据变更、节点删除、子节点状态变更等事件,通过这个事件机制,可以实现:基于 zookeeper 实现分布式锁、集群管理等功能。
- Watcher 特性:当数据发生变化的时候, zookeeper 会产生一个 watcher 事件,并且会发送到客户端。但是客户端只会收到一次通知。如果后续这个节点再次发生变化,那么之前设置 watcher 的客户端不会再次收到消息(watcher 是一次性的操作),可以通过循环监听去达到永久监听效果 。
- ZooKeeper的Java API中,可以通过getData()方法、Exists()方法、getChildren()方法来绑定监听事件,凡是所有的事务型的操作(增、删、改),都会触发到监听事件
watch监听事件
- None(-1) 客户端连接状态发生变化的时候,会收到Node事件
- NodeCreated(1), 创建节点事件
- NodeDelete(2),删除节点事件
- NodeDataChange(3), 节点数据发生变化
- NodeChildrenChanged(4), 子节点被创建,被删除,会发生事件出发