当前位置: 首页 > news >正文

分布式架构之(Zookeeper原理)

Zookeeper是一个典型的分布式数据一致性的结局方案,分布式应用程序可以基于它实现注入数据发布、订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能,

Zookeeper可以保证如下分布式一致性特性:

  1. 顺序一致性
    从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到Zookeeper中去

  2. 原子性
    所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群所有机器都成功应用了某一个事务,要么都没有应用,一定不会出现集群中部分机器应用了该事务,而另外一部分没有应用的情况

  3. 单一视图
    无论客户端连接的是那个Zookeeper服务器,其看到的服务端数据模型都是一致的

  4. 可靠性
    一但服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会被一直保留下来,除非有另外一个事务又对其进行了变更。

  5. 实时性
    Zookeeper仅仅保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态

Zookeeper基本概念

三种角色:Leader Follower Observer三种角色。Leader提供读写服务,Follower和Observer都能提供读服务,Obserever不参与选举。

会话Session:Session是指的客户端会话,在Zookeeper中,一个客户端连接指的是客户端和服务端之间的一个TCP长连接,ZooKeeper对外的服务端端口默认是2181,客户端启动的时候首先会与服务器建立一个TCP连接,从第一次连接建立开始,客户端会话的生命周期也就开始了。通过这个连接,客户端能够通过心跳检测与服务器保持有效的绘画,也能够接受服务器的Wacher事件通知。

数据节点(Znode)
在Zookeeper中,Znode可以分为持久节点和临时节点两类,持久节点创建之后除非进行移除操作,会一直存在。临时节点跟生命周期和客户端会话绑定,一旦客户端会话失效,这个客户端创建的所有临时节点都会被移除。

版本
Zookeeper上的Znode都会维护一个Stat的数据结构,包含三个数据版本 version(当前Znode的版本)、cversion(当前Znode子节点的版本)和avesion(当前Znode的ACL版本)

Watcher

Watcher事件监听器,是Zookeeper中的一个很重要的特性,Zookeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,Zookeeper服务端会将时间通知到感兴趣的客户端上。

ACL

Zookeeper采用ACL策略进行权限控制,定义下边5种权限:

  • Create 创建子节点的权限
  • Read 获取节点数据和子节点列表的权限
  • Write 更新节点数据的权限
  • Delete 删除子节点的权限
  • Admin 设计节点ACL的权限

ZooKeeper的ZAB协议

ZAB是Zookeeper设计的崩溃客可恢复的原子消息广播算法。

Zookeeper使用一个单一的主进程来接受并处理客户端的所有请求,并采用ZAB的原子广播协议,将服务数据的状态变更以事务Proposal的形式广播到所有的副本进程上去。
在这里插入图片描述

http://www.lryc.cn/news/31232.html

相关文章:

  • Java框架学习 | MyBatis
  • Cookie+Session详解
  • CAPL脚本要注意区分elcount和strlen求数组长度的区别,不然要吃大亏
  • CSS常用选择器
  • Registry与DGC的攻击利用
  • 赛道持续降温!又一家自动驾驶公司裁员,市值曾超50亿美元
  • 路径规划 | 图解动态A*(D*)算法(附ROS C++/Python/Matlab仿真)
  • GraphCut、最大流最小割定理
  • Word文档的密码忘记了怎么办?
  • Java分布式事务(二)
  • 游戏项目中的程序化生成(PCG):算法之外的问题与问题
  • 【C++】位图+哈希切割+布隆过滤器
  • python实现网络游戏NPC任务脚本引擎(带限时任务功能)
  • C语言的原子操作(待完善)
  • JavaScript Boolean 布尔对象
  • 删除链表元素相关的练习
  • 3DEXPERIENCE Works 成为了中科赛凌实现科技克隆环境的催化剂
  • 少儿编程 电子学会图形化编程等级考试Scratch一级真题解析(选择题)2022年12月
  • 【完整版】国内网络编译,Ambari 2.7.6 全部模块源码编译笔记
  • HTML 颜色值
  • RabbitMQ-消息的可靠性投递
  • 华为OD机试题 - 最小叶子节点(JavaScript)| 含思路
  • 嵌入式系统硬件设计与实践(开发过程)
  • 入门vue(1-10)
  • C#开发的OpenRA的游戏主界面怎么样创建3
  • 秒懂算法 | 基于主成分分析法、随机森林算法和SVM算法的人脸识别问题
  • QML Loader(加载程序)
  • C++——类型转换
  • vue3:生命周期(onErrorCaptured)
  • vue过滤器