从Paxos到Zookeeper 分布式一致性原理与实践 |
从Paxos到Zookeeper 分布式一致性原理与实践
第一章:分布式架构
1从集中式到分布式
1集中式的特点
2分布式的特点
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统.
分布性
对等性
并发性
缺乏全局时钟
故障总是发生
3分布式环境的各种问题
通信异常
网络分区
三态
成功,失败,超时
节点故障
2从ACID到CAP/BASE
事务是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元,狭义上的事务特指数据库事务.
ACID
原子性A,一致性C,隔离性I,持久性D
4个事务隔离级别
未授权读取(读未提交)
授权读取(读已提交)
可重复读取
串行化
CAP
一致性C,可用性A,分区容错性P
CAP定理应用
BASE
BA基本可用,S软状态,E最终一致性
第二章:一致性协议
2PC和3PC
2PC(Two-Phase Commit)二阶段提交
阶段一:提交事务请求
阶段二:执行事务提交
3PC(Three-Phase Commit)三阶段提交
CanCommit
PreCommit
do Commit
Paxos算法
另一种非常重要的分布式一致性协议
第三章:Paxos的工程实践
Chubby
对上层应用程序的侵入性更小
便于提供数据的发布与订阅
开发人员对基于锁的接口更为熟悉
更便捷地构建更可靠的服务
Chubby技术架构
系统结构
目录与文件
锁与锁序列器
Chubby中的事件通知机制
Chubby中的缓存
会话和会话激活KeepAlive
第四章:Zookeeper与Paxos
初识Zookeeper
Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅,负载均衡,命名服务,分布式协调/通知,集群管理,Master选举,分布式锁和分布式队列等功能
顺序一致性
原子性
单一视图
可靠性
实时性
ZK的设计目标
简单的数据模型
可以构建集群
顺序访问
高性能
ZK的基本概念
集群角色
会话Session
数据节点Znode
版本
Watcher
ACL
第五章:使用ZK
集群与单机
ZK有两种运行模式:集群模式和单机模式
集群模式
JDK1.6以上版本
下载ZK包
配置zoo.cfg
创建myid文件
按照相同的步骤,为其他机器都配置上zoo.cfg和myid文件
启动服务器
验证服务器
单机模式
修改zoo.cfg
验证服务器启动情况
启动服务
zk可执行脚本
停止服务
$ sh zkServer.sh stop
常见异常
端口被占用
磁盘没有剩余空间
没有找到myid文件
集群中其他机器Leader选举端口未开
客户端脚本
连接本地zk服务器
$ sh zkCli.sh
$ sh zkCli.sh -server ip:port
这是连接到指定的zk服务器
创建
创建一个zk节点
create [-s] [-e] path data acl
eg:create /zk-book 123 Created /zk-book
读取
ls
ls path [watch]
ls /
这个命令只能看到指定节点下第一级的所有子节点
get
get path [watch]
get /zk-book
可以获取zk指定节点的数据内容和属性信息
更新
set
set path date [version]
eg:set /zk-book 456
可以更新指定节点的数据内容
删除
delete
delete path [version]
eg:delete /zk-book
可以删除zk上的指定节点
Java客户端API使用
创建会话
创建节点
删除节点
读取数据
getChildren
getData
更新数据
setData
检测节点是否存在
权限控制
开源客户端
ZkClient
maven依赖
Curator
maven依赖
第六章:ZK的典型应用场景
数据发布/订阅(Publish/Subscribe)
推Push和拉Pull
配置存储
配置获取
配置变更
负债均衡
Load Balance是一种相当常见的计算机网络技术,用来对多个计算机(计算机集群),网络连接,CPU,磁盘驱动器或其他资源进行分配负载,以达到优化资源使用,最大化吞吐量,最小化响应时间和避免过载的目的.
分为软件负载和硬件负载
一种动态的DNS服务
域名配置
192.168.0.1:8080
192.168.0.1:8080,192.168.0.2:8080
域名解析
域名变更
自动化的DNS服务
域名注册
域名解析
域名探测
命名服务
分布式协调/通知
MYSQL数据复制总线:Mysql_Replicator
任务注册
任务热备份
热备切换
记录执行状态
控制台协调
冷备切换
冷热备份对比
一种通用的分布式系统及其间通用方式
在绝大部分的分布式系统中,系统机器间的通信无外乎心跳检测,工作进度汇报和系统调度这三种类型.
心跳检测
工作进度汇报
系统调度
集群管理
所谓集群管理,包括集群监控与集群控制两大块,前者侧重对集群运行时状态的收集,后者则是对集群进行操作与控制.
ZK的两大特性
分布式日志收集系统
需要解决:变化的日志源机器+变化的收集器机器
注册收集器机器
任务分发
状态汇报
动态分配
全局动态分配
局部动态分配
注意事项
节点类型
日志系统节点监听
在线云主机管理
机器上/下线
机器监控
Master选举
在分布式系统中,Master往往用来协调集群中其他系统单元,具有对分布式系统状态变更的决定权.
分布式锁
排他锁
简称X锁,又称为写锁或独占锁,是一种基本的锁类型.
定义锁
获取锁
释放锁
分布式队列
分布式队列,简单地将分为两大类,一种是常规的先入先出队列,另一种则是要等到队列元素集聚之后才统一安排执行的Barrier模型.
FIFO:先入先出
Barrier:分布式屏障
ZK在大型分布式系统中的应用
YARN
YARN是hadoop为了提高计算节点Master(JT)的扩展性,同时为了支持多计算模型和提供资源的细粒度调度而引入的全新一代分布式调度框架.
HBase
Kafka
第七章:ZK技术内幕
系统模型
数ZNode
事务Id:ZXID
对于每一个事务请求,ZK都会为其分配一个全局唯一的事务ID,用ZXID表示,通常是一个64位的数字.
节点特性
节点类型
版本-保证分布式数据原子性操作
Watcher-数据变更的通知
Watcher事件
Watcher特性总结
一次性
客户端串行执行
轻量
ACL-保障数据的安全(Access Control List)
权限模式:Scheme
IP
Digest
World
Super
授权对象:ID
权限:Permission
权限扩展体系
实现自定义权限控制器
ACL管理
客户端
服务器地址列表
192.168.0.1:2181, 192.168.0.1:2181,192.168.0.1:2181
服务器启动
zk服务器基本统计信息
Leader选举
术语解释
SID:服务器ID
ZXID:事务ID
Vote:投票
Quorum:过半机器数
服务器状态
LOOKING
FOLLOWING
LEADING
OBSERVING
数据与存储
内存数据
DataTree
DataNode
Nodes
ZKDatabase
第八章:ZK运维
基本配置
高级配置