Soul源码学习(八) -zookeeper数据同步

zookeeper数据同步

Soul网关提供的三种数据同步方式

Soul网关提供了一下三种,可以任意选择

  1. 基于zookeeper的监听订阅模式;
  2. webSocket推送模式;
  3. 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监听事件

  1. None(-1) 客户端连接状态发生变化的时候,会收到Node事件
  2. NodeCreated(1), 创建节点事件
  3. NodeDelete(2),删除节点事件
  4. NodeDataChange(3), 节点数据发生变化
  5. NodeChildrenChanged(4), 子节点被创建,被删除,会发生事件出发

猜你喜欢

转载自blog.csdn.net/qq_35115942/article/details/113009673