【Zookeeper】ZK 是干什么的?

Zookeeper 的前世今生:Apache ZooKeeper 是一个高可靠的分布式协调中间件。它是 Google Chubby 的一个开源实现,那么它主要是解决什么问题的呢?那就得先了解Google Chubby Google Chubby是谷歌的一个用来解决分布式一致性问题的组件,同时,也是粗粒度的分布式锁服务

1.分布式一致性问题

什么是分布式一致性问题呢?简单来说,就是在一个分布式系统中,有多个节点,每个节点都会提出一个请求,但是在所有节点中只能确定一个请求被通过。而这个通过是需要所有节点达成一致的结果,所以所谓的一致性就是在提出的所有请求中能够选出最终一个确定请求。 并且这个请求选出来以后,所有的节点都要知道。

一致性:在分布式架构中,预期行为与实际行为的一致情况,以实现可预测(注:这和我们对于集群数据的一致性(强/弱/结果)不一样)

以下例子除以这篇博客

用户在京东上下了一个订单,发现自己在京东的账户里面有余额,然后使用余额支付,支付成功之后,订单状态修改为支付成功,然后通知仓库发货。假设订单系统,支付系统,仓库系统是三个独立的应用,是独立部署的,系统之间通过远程服务调用。
在这里插入图片描述

订单的有三个状态:I:初始 P:已支付 W:已出库,订单金额100, 会员帐户余额200

如果整个流程比较顺利,正常情况下,订单的状态会变为I->P->W,会员帐户余额100,订单出库。

但是如果流程不顺利了呢?考虑以下几种情况

1:订单系统调用支付系统支付订单,支付成功,但是返回给订单系统数据超时,订单还是I(初始状态),但是此时会员帐户余额100,会员肯定会马上找京东骂京东,为啥不给老子发货,我都付钱了

2:订单系统调用支付系统成功,状态也已经更新成功,但是通知仓库发货失败,这个时候订单是P(已支付)状态,此时会员帐户余额是100,但是仓库不会发货。会员也要骂京东。

3:订单系统调用支付系统成功,状态也已经更新成功,然后通知仓库发货,仓库告诉订单系统,没有货了。这个时候数据状态和第二种情况一样。

所以,一致性问题是分布式最重要问题之一,现在的解决方案有Raft协议,Paxos协议,Zab协议等。另外,一个多核CPU也可以认为是一个小型分布式系统,因此一致性也可用于单机

2.分布式锁服务

Chubby 提供了一种粗粒度的锁服务,chubby是通过创建文件的形式来提供锁的服务

  1. 加锁:server向chubby中创建文件
  2. 加锁成功:创建文件成功

总结:由于谷歌Chubby没有开源,所以雅虎公司基于chubby的思想,开发了一个类似的分布式协调组件Zookeeper,并捐给了Apache,所以Zookeeper的设计之初并不是为了注册中心而设计,注册中心只是它的一个功能而已

猜你喜欢

转载自blog.csdn.net/weixin_43935927/article/details/114241273