程序猿的普通日常|聊一聊zookeeper分布式框架和主要功能

前言
zookeeper是一个高可用、高性能的开源的分布式框架,具有保证客户端顺序一致性 , 原子性 , 顺序访问等特点 。 通过zookeeper可以实现发布/订阅 , leader选举 , 分布式锁 , 分布式协调 。 元数据管理等功能 。 基本概念
zookeeper在架构设计上包括:集群角色 , 数据节点 , watcher监听器 , ACL权限控制等 。 接下来我们分别讲一下几个比较重要的概念 。 集群角色
程序猿的普通日常|聊一聊zookeeper分布式框架和主要功能
文章图片
zookeeper将集群节点分为三种角色:
Leader角色:负责处理读写请求 , 同步数据给Follower和observer节点;
Follower角色:参与Leader选举 , 参与Leader写时的数据同步(过半节点写入), 。 负责处理读请求 , 而写请求需要转发给Leader节点去处理;
Observer角色:不参与Leader选举 , 不参与Leader写时的数据同步(过半节点写入) , 只提供读服务和同步leader节点数据 。
zookeeper集群只有Leader节点才可以处理写请求 , leader写完数据之后 , 再同步到follower和observer节点 , 因此zookeeper集群的写性能并不高 , 只适合读多写少的场景 。 只要过半节点写入zookeeper集群就认为写成功 , 因此zookeeper只能保证最终一致性不保证强一致性 。 数据节点
1.zookeeper数据结构是树状结构 , 每一个数据就是一个节点;
2.节点分为持久节点和临时节点 , 持久节点会永久保存 , 除非主动删除 , 临时节点只在session会话时间内有效 , session会话结束了临时节点会被删掉 。
3.节点又分为顺序节点和正常节点 , 对于顺序节点每次创建zookeeper服务都会在这个节点后面加上一个严格递增的数字 。
4.只有leader节点才可以创建数据节点 , 如果客户端请求follower节点创建数据节点 , follower节点必须将创建请求转发给leader节点 。 Session会话
客户端和zookeeper服务建立连接之后 , zookeeper服务会为客户端创建一个session会话 , 并为客户端分配一个sessionId , 在sessionTimeout时间内这个会话都是有效的 , 客户端通过发送读写请求和心跳请求都会更新sessionTimeout的超时时间 , 如果客户端和zookeeper服务端超过sessionTimeout时间都没有进行网络通信 , zookeeper服务端和客户端都会关闭当前连接 , session会话就会失效 。 Watcher监听器
客户端通过监听器 , 注册一些感兴趣的事件 , 当zookeeper服务端有事件变更 , 便会通知到客户端 。 这里需要注意的是 , zookeeper触发watch事件之后 , 便会将当前Watcher删除 , 也就是说Watcher只能使用一次 。 客户端工具
zookeeper提供了原生的zookeeper客户端api , 功能相对简单 , 没有提供失败重试机制 , Watcher监听器只能使用一次 , 使用起来很不方便 。 我们生产常用curator框架作为zookeeper的客户端工具 , 该工具提供leader选举 , 分布式锁 , 可重复使用Watcher监听器 , 缓存 , 计时器等功能 , 功能强大 , 大小公司皆宜使用 , 深受我这种比较懒的程序员喜爱 。 总结
【程序猿的普通日常|聊一聊zookeeper分布式框架和主要功能】大家有兴趣的话可以去zookeeper和curator的官方网站看一下 。 这里也要说一下题外话 , 其实很多开源框架的架构原理和使用教程 , 例如RocketMQ , Kafka , Zookeeper等在官方网站都可以查的到 , 如果大家有一些不明白的地方 , 不妨先去对应的官方网站上面查一下 。


    推荐阅读