从Paxos到Zookeeper分布式一致性原理与实践(一)

一 分布式环境的各种问题:
1.因为网络本身的不可靠性,会涉及到一些网络通信问题从Paxos到Zookeeper分布式一致性原理与实践(一)
2.网络分区(脑裂)
当网络发生异常导致分布式系统中部分节点之间的网络延时不断增大,最终导致组成分布式架构的所有节点,只有部分节点能够正常通信
从Paxos到Zookeeper分布式一致性原理与实践(一)
3.三态
在分布式架构里面,除了成功、失败、超时
从Paxos到Zookeeper分布式一致性原理与实践(一)
4.节点故障
从Paxos到Zookeeper分布式一致性原理与实践(一)
5.分布式事务
从Paxos到Zookeeper分布式一致性原理与实践(一)
二 经典的CAP/BASE理论
1.CAP定理
C(一致性 Consistency): 所有节点上的数据,时刻保持一致
从Paxos到Zookeeper分布式一致性原理与实践(一)
A可用性(Availability):每个请求都能够收到一个响应,无论响应成功或者失败
从Paxos到Zookeeper分布式一致性原理与实践(一)
P分区容错 (Partition-tolerance):表示系统出现脑裂以后,可能导致某些server与集群中的其他机器失去联系
从Paxos到Zookeeper分布式一致性原理与实践(一)
P是一定要满足的,所以可能会有CP/AP
从Paxos到Zookeeper分布式一致性原理与实践(一)
从Paxos到Zookeeper分布式一致性原理与实践(一)
CAP理论仅适用于原子读写的Nosql场景,不适用于数据库系统

从Paxos到Zookeeper分布式一致性原理与实践(一)
2.BASE理论
从Paxos到Zookeeper分布式一致性原理与实践(一)
从Paxos到Zookeeper分布式一致性原理与实践(一)
三 Zookeeper
1.zookeeper介绍
从Paxos到Zookeeper分布式一致性原理与实践(一)
2.zookeeper是什么
zookeeper是一个典型的分布式数据一致性的解决方案。分布式应用程序可以基于它实现:
数据的发布/订阅(配置中心:disconf) 、 负载均衡(dubbo利用了zookeeper机制实现负载均衡) 、命名服务、
master选举(kafka、hadoop、hbase)、分布式队列、分布式锁
从Paxos到Zookeeper分布式一致性原理与实践(一)
3.zookeeper的特性
从Paxos到Zookeeper分布式一致性原理与实践(一)
从Paxos到Zookeeper分布式一致性原理与实践(一)
4.zookeeper的安装
1.单机环境安装配置:
解压之后到安装目录下conf复制一份zoo_sample.cfg至zoo.cfg,可以修改下数据存放路径,也可不改。
然后就可以bin目录下启动服务器
sh zkServer.sh或者 ./zkServer.sh
客户端连接 sh zkCli.sh -server ip:port,默认连接本机
2.集群环境安装配置:
zookeeper集群包含三种角色:leader、follower、observer:
observer 是一种特殊的zookeeper节点。可以帮助解决zookeeper的扩展性(如果大量客户端访问我们zookeeper集群,需要增加zookeeper集群机器数量。从而增加zookeeper集群的性能。 导致zookeeper写性能下降, zookeeper的数据变更需要半数以上服务器投票通过。造成网络消耗增加投票成本)

  1. observer不参与投票。 只接收投票结果。
  2. 不属于zookeeper的关键部位。

从Paxos到Zookeeper分布式一致性原理与实践(一)
从Paxos到Zookeeper分布式一致性原理与实践(一)
从Paxos到Zookeeper分布式一致性原理与实践(一)
集群配置:
在集群中每个zoo.cfg配置文件中增加:
peerType=observer
server.1=192.168.11.129:2188:3181:observer
server.2=192.168.11.131:2188:3181
server.3=192.168.11.135:2188:3181
在每个服务器的dataDir目录下创建一个myid的文件
就只需要写入一行数据,内容是是每台机器对应的server ID的数字
然后就可以启动集群中的zookeeper了
四 zoo.cfg配置文件分析
tickTime=2000 zookeeper中最小的时间单位长度 (ms)
initLimit=10 follower节点启动后与leader节点完成数据同步的时间(10*tickTime,也就是20s)
syncLimit=5 leader节点和follower节点进行心跳检测的最大延时时间
dataDir=/tmp/zookeeper 表示zookeeper服务器存储快照文件的目录
dataLogDir 表示配置 zookeeper事务日志的存储路径,默认指定在dataDir目录下
clientPort 表示客户端和服务端建立连接的端口号: 2181
五 zookeeper系统模型
1.数据模型
zookeeper的数据模型和文件系统类似,每一个节点称为:znode. 是zookeeper中的最小数据单元。每一个znode上都可以保存数据和挂载子节点。 从而构成一个层次化的属性结构
从Paxos到Zookeeper分布式一致性原理与实践(一)
从Paxos到Zookeeper分布式一致性原理与实践(一)
从Paxos到Zookeeper分布式一致性原理与实践(一)
节点特性
持久化节点 : 节点创建后会一直存在zookeeper服务器上,直到主动删除
从Paxos到Zookeeper分布式一致性原理与实践(一)
持久化有序节点 :每个节点都会为它的一级子节点维护一个顺序
从Paxos到Zookeeper分布式一致性原理与实践(一)
临时节点 : 临时节点的生命周期和客户端的会话保持一致。当客户端会话失效,该节点自动清理
从Paxos到Zookeeper分布式一致性原理与实践(一)
临时有序节点 : 在临时节点上多勒一个顺序性特性
从Paxos到Zookeeper分布式一致性原理与实践(一)
2.事务ID(ZXID)
从Paxos到Zookeeper分布式一致性原理与实践(一)
3.Watcher事件
zookeeper提供了分布式数据发布/订阅,zookeeper允许客户端向服务器注册一个watcher监听。当服务器端的节点触发指定事件的时候
会触发watcher。服务端会向客户端发送一个事件通知
watcher的通知是一次性,一旦触发一次通知后,该watcher就失效
4、zookeeper的一些简单命令操作:
1.create [-s] [-e] path data acl
-s 表示节点是否有序
-e 表示是否为临时节点
默认情况下,是持久化节点
2. get path [watch]
获得指定 path的信息
3.set path data [version]
修改节点 path对应的data
乐观锁的概念
数据库里面有一个 version 字段去控制数据行的版本号
4.delete path [version]
删除节点

5、数据节点内容以及节点状态信息
通过get命令来获取一个数据节点的内容
从Paxos到Zookeeper分布式一致性原理与实践(一)
其实就是数据节点的Stat对象的格式化输出
从Paxos到Zookeeper分布式一致性原理与实践(一)
6、java API的使用
zookeeper原生API

  1. 导入jar包
<dependency>
    <groupId>org.apache.zookeeper</groupId>
    <artifactId>zookeeper</artifactId>
    <version>3.4.8</version>
</dependency>

还有zkclient
从Paxos到Zookeeper分布式一致性原理与实践(一)
curator(使用最好的API)
Curator本身是Netflix公司开源的zookeeper客户端;
curator提供了各种应用场景的实现封装
curator-framework 提供了fluent风格api
curator-replice 提供了实现封装
curator连接的重试策略:
ExponentialBackoffRetry() 衰减重试
RetryNTimes 指定最大重试次数
RetryOneTime 仅重试一次
RetryUnitilElapsed 一直重试知道规定的时间