【ZooKeeper怎么玩】之一:为何须要ZK

博客已经搬家,见【ZooKeeper怎么玩】之一:为何须要ZKgit


学习新东西首先须要搞清楚为何学它,这是符合咱们的一个认知过程。
<!--more-->
#ZooKeeper是什么
ZooKeeper是一个分布式协调服务,它致力去解决如何在分布式环境下保持数据一致性的问题。github

#分布式环境下遇到的问题
共享的资源在并发的状况下会出现竞争,在线程间可使用Java提供的锁机制来协调这些资源,那么在分布式的环境下,如何来协调这些资源呢?服务器

如何协调分布式环境下的资源,首先应该明确由单机环境转到分布式环境下遇到了什么问题?网络

1. **分布式环境下没法保证顺序**。并发

在单机环境若是想让A先执行,B后执行,先调用A后调用B就能够了;因为网络是不可靠的,分布式环境中则不一样,在网络延迟的状况下A可能比B执行要晚。
2. **分布式环境下没法明确执行结果**。分布式

单机中调用A成功和失败很明确;而在分布式环境中,即便调用A执行成功了,而在网络传输中超时了,此时没法判断A是否执行成功了,须要经过重试的方式才能判断A有没有执行成功。
3. **分布式环境下没法保证数据一致性**。学习

分布式环境若是不少台服务器提供相同的服务,如何保证服务的某一个改动要么同时生效,要么失败,是分布式和单机环境的最重要的区别。线程

#没有ZooKeeper以前的世界是什么样子blog

1. **保证事务顺序一致性**。事务

若是事务A在一台服务器上优先于事务B先执行,则在全部的服务器上事务A都将优先于事务B执行。因为网络是不可靠的,若是没有ZooKeeper如何保证在全部服务器上事务顺序一致将是一个很复杂的问题,而ZooKeeper使咱们专一于业务逻辑,而不用过度关注于分布式协调。

2. **保证单调一致性**。 单调一致性是最终一致性的变种。在任何状况下,用户一旦读到某个数据的某次更新后的值,就不会再读到比这个值更旧的值了。

相关文章
相关标签/搜索