Zookeeper

2022-04-26  本文已影响0人  极速魔法

zookeeper简介

分布式系统的分布式协同服务,保证分布式系统信息的一致性。

共享方式

集群角色

leader,follower, observer
observer不参与 leader选举,不参与写操作的过半写成功策略,提高集群的性能

写请求:

  1. follower接收客户端写请求,请求转发给 leader
  2. leader 收到写请求,写请求转换成带有各种状态的事务,广播该事务(proposal)
  3. 所有接收到 proposal的 follower 进行投票,向 leader 返回 ACK
  4. leader 发送事务提交请求

会话

客户端和服务端之间的一个TCP长连接

Znode

数据节点,保存数据内容和属性

Watcher--数据变更通知

Zookeeper使⽤Watcher机制实现分布式数据的发布/订阅功能

Curator客户端

RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000,3);

private static CuratorFramework Client = CuratorFrameworkFactory.builder() .connectString("server1:2181,server2:2181,server3:2181") .sessionTimeoutMs(50000) .connectionTimeoutMs(30000) .retryPolicy(retryPolicy) .build(); client.start();

// 创建节点
client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(path);

// 删除节点
client.delete().forPath(path);

// 获取数据
client.getData().forPath(path);

// 更新数据
client.setData().forPath(path,"新内容".getBytes());

zookeeper应用场景

数据发布/订阅

客户端向服务端注册自己关注的节点,节点数据变化,服务端向客户端推送watcher时间通知。客户端接收消息通知,主动拉取服务端的最新数据。

分布式锁

  1. 客户端创建临时顺序节点
  2. 客户端调⽤getChildren接⼝获取所有已经创建的⼦节点列表,不注册 watcher
  3. 自己当前是最小节点,获取锁,执行业务后释放锁。
  4. 客户端不是最小节点,对于读请求:向⽐⾃⼰ 序号⼩的最后⼀个写请求节点注册Watcher监听。对于写请求:向⽐⾃⼰序号⼩的最后⼀个节点注 册Watcher监听。
上一篇 下一篇

猜你喜欢

热点阅读