Zookeeper原理&实战

1、分布中的一致性

谈到分布式,不得谈到CAP(一致性、可用性、分区性),对于分区性是确定的,剩下的就在一致性和可用性中选择,这个选择又是一个痛苦的事情,鱼和熊掌不可兼得。后面出来了BASE理伦,选择不是完全绝对的,可用性有50%的可用,80%的可用,一致性有强一致性和最终一致性。今天谈谈Zookeeper,有人说它是强一致性,也有人说它是最终一致性,个人觉得都有道理。说它是强一致性的理由是有选举的过程中不可用,说它是最终一致性的理由是过半同意就ok,站在不同的角度看它得出的结论不一样,然而它是分布式中一致性的框架总是不会有错的。

一致性的理伦原理一大堆的,有的还把人搞得晕七晕八的,懂得基本的原理,再去实践,最后再总结归纳,这样的过程比较好。下面给出三种不同一致性的实现方案。

1.1 无主节点+广播+定时dump


v2-a1e14c7e22fffc8c83c0b367a0d624c9_b.jpg


说明:

  • 一个写请求经过路由到集群中的某一台机器,机器执行写数据库和写本地文件操作,然后广播通知其它的节点进行更新操作。
  • 这里是最终一致性,即便在通知的过程中有节点失败了,每隔一定的时间进行全量dump操作,从DB里加载数据与本地文件进行比较,发现不一致就更新。

1.2 固定主节点+强一致性


v2-f73ff21e1f5e0afbb65de84eb021a78b_b.jpg


说明:

  • 有一个主节点专门接收请求,如果有写请求,就全部转发到其它的节点上,等待所有的节点都操作成功,再返回,保证了强一致性,牺牲了性能。
  • 固定主节点有风险,万一它挂了就完蛋了,也有主备的策略可以考虑。

1.3 动态选举主节点+多数返回就成功


v2-02789505e26d7e1f270f2c9e97b77923_b.jpg


说明:

  • 每次要选举出一个主节点出来,如果是其它节点发现是写请求,就会转到主节点上。
  • 主节点广播发送请求,如果多数返回成功,就成功,避免要全部返回成功就算成功。

大概明白了上面的原理后,学习zookeeper就更方便了,zookeeper的大概原理与第3点相似。

2、Zookeeper

zookeeper是一个分布式一致性框架,它能保证数据的最终一致性,我们利用它的特性完成需求,先看一下基础的用法。我是在mac上安装zookeeper的,先来了解一下基础的命令操作。

2.1 进入命令模式

        在zookeeper的解压目录下,进入bin目录下,执行:
./zkServer.sh start
      

2.2 客户端连接

        打开另外一个终端,进入zookeeper安装目录下的bin目录下,执行:
./zkCli.sh
      

2.3 命令操作

        a. 创建一个节点

create /data "myData"

节点类型有:持久化节点、临时节点、顺序节点
zookeeper 顺序节点要创建在目录下,否则ls 不出来,create -e -s /tmp/ "aaa" ls /tmp 就会看到数据

b. 读取节点值

get /data

c. 监听数据变化

get /data watch

然后执行数据变更操作,就可以看到数据变化
set /data "test"
      

从上面可以看出,zookeeper提供了基础的命令操作:

  • 创建节点
  • 读取节点值
  • 更新节点值
  • watch节点变化
  • 删除节点

这些基础的功能可以实现很多功能,如数据配置、分布式锁等。

3、实战

TODO

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值