思考:
1、在分布式场景中,怎么确保一定拿到最新的准确值
2、在分布式场景中存储一个值,为了保证安全,存储了多份
NWR理论: — 抽屉原理
N:总节点数
W:写入副本数
R:读取的副本数
保证拿到最新的数据:R+W>N
至少读取N-W+1个副本才行
Zookeeper每个节点都存储了所有数据的副本,但是zk要求写入成功的节点数达到一半,就认为写入数据成功。
如果W大,这次写入成功的概率就越小,读取数据的压力就越小
如果W小,R读取的额节点就要多,读取的性能就差
所以Zookeeper查询效率高,写入效率低
读取时,读取超过一半节点的数据,就一定会拿到最新的数据,然后根据版本,就可以拿到最新的准确值。
Quorum机制:超过一半的数据写入成功就认为写成功,剩下的暂时剔除(投票机制)
CAP理论:
C:强一致性,数据副本写的越多,一致性越好
A:高可用性,
P:分区容错性,在分布式环境中,一定要保证,当出现网络分区的时候,也能使客户端拿到最新的数据
任何分布式系统,都不可能同时满足以上三个要求;满足两个即可。
BASE理论:针对CAP理论的妥协
一定是会满足P的,C和A进行权衡,就是BASE理论
可以满足,C:最终一致性
A:基本可用
Zookeeper解决问题:
分布式同步、分布式配置管理、分布式集群管理(主节点状态管理、从节点上下线管理)、分布式命名管理、分布式队列管理、分布式锁
Zookeeper底层主要依赖两个组件:
· znode文件系统(存储数据的能力)
· watch监听系统(监听数据变化的能力)
znode文件系统:
- 不同于Linux,分为文件夹和文件,znode文件系统中只有znode节点(既可以存数据,也可以当作为文件夹)。
- 但是每个节点都必须要有一个唯一的绝对路径,每个节点都可以存储数据(根节点除外,可以存但是不建议存数据),每隔节点下都可以挂载子节点
- 虽然说zookeeper每个节点都存储了一份完整数据,但是不能存储大量的数据。所以znode只适合存储非常小量数据,不能超过1M,最好小于1K。
znode的分类:
1、按照生命周期可以分为:
· 短暂(ephemeral)(断开连接自己删除)
· 持久(persistent)(断开连接不删除,默认情况)
2、按照是否自带序列编号可以分为:
· SEQUENTIAL(带自增序列编号,由父节点维护)
· 非SEQUENTIAL(不带自增序列编号,默认情况)

注意点:
1、创建 znode 时设置顺序标识,znode 名称后会附加一个值,顺序号是一个单调递增的计数器,由 父节点维护
2、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
3、EPHEMERAL 类型的节点不能有子节点,所以只能是叶子结点
4、客户端可以在 znode 上设置监听器
监听机制:
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、节点删除、子目录节点增加删 除)时,ZooKeeper 会通知客户端。监听机制保证 ZooKeeper 保存的任何的数据的任何改变都能快速

Zookeeper是一种分布式协调服务,提供数据一致性、命名服务、配置管理、集群管理等功能。其核心特点是最终一致性、可靠性、实时性。Zookeeper通过ZAB协议实现分布式一致性,采用Paxos算法的FastPaxos模式进行选举。在分布式锁、队列管理等场景中有广泛应用,同时具备Znode文件系统和watch监听系统来存储和监控数据变化。在选举和数据同步过程中,保证了系统的高可用性和数据的一致性。
最低0.47元/天 解锁文章
1755

被折叠的 条评论
为什么被折叠?



