ZooKeeper学习——概述篇
来源:互联网 发布:网页版淘宝网 电脑版 编辑:程序博客网 时间:2024/06/08 10:05
前言:最近学习分布式架构,发现随处可见ZooKeeper。于是花了点时间了解一下什么是ZooKeeper,这篇文章是入门概述篇,不会涉及到源码相关。
一、分布式一致性问题
- 集中式系统:应用的各项业务逻辑集中在一个服务器上。
- 分布式系统:应用的各项业务逻辑可以分布在不同的服务器上,彼此之间通过消息传递进行通信、协调的系统。
我们都知道事务有ACID特性,随着计算机技术的发展,计算机系统从以前的集中式系统渐渐走向了分布式系统,由于分布式环境存在的诸如通信异常、网络分区、节点故障、三态(成功/失败/超时)等各种问题,事务的特性也变得更加难以保证。于是,在大型分布式存储系统中,经常会出现分布式一致性问题。
案例:银行的跨行转账业务,这项业务包含从开户行将钱取出,然后将钱存入异地银行两个过程。银行系统可以类比为分布式系统,这项业务就是一项分布式事务。试想这种情况,用户成功将钱从开户行取出,却在存钱的时候出现了系统异常,那用户的钱岂不是白白没了。这时我们就称出现了分布式一致性问题(这里体现在系统的数据状态已经出现了本不该出现的异常)。
为了解决这种分布式一致性问题,大神们提出了CAP理论、BASE理论以及各种分布式一致性协议。
二、CAP理论、BASE理论以及分布式一致性协议
CAP理论:一个分布式系统不可能同时满足一致性(Consistency),可用性(Availability),分区容忍性(Partition tolerance)这三个特性,最多只能满足两个。在实际的情况中,因为分布式系统通常都是部署在不同的服务器上的,因此分区容忍性一般我们是不能舍弃的一个因素,所以我们需要考虑的一般是一致性和可用性之间的权衡。
BASE理论:BASE理论是对CAP理论中一致性和可用性进行权衡之后提出来的一种思想。即基本可用(Basically Available),软状态(Soft state),最终一致性(Eventually Consistent)。
在这两个理论的指导下,先后出现了一些常见的分布式一致性协议,例如2PC,3PC,Paxos,ZAB等,这里就不具体展开了。ZooKeeper正是根据ZAB协议开发出来的分布式协调服务。
三、ZooKeeper的应用场景
为什么先说应用场景呢?因为我以前会觉得这个ZooKeeper到处都出现,以至于我反而觉得不知道它是干嘛的,所以这里先介绍一下ZooKeeper的应用场景。也即是ZooKeeper能够解决的问题。
- 数据发布/订阅
- 命名服务
- 集群管理
- 分布式锁
- 负载均衡
- 分布式协调/通知
- Master选举
- 分布式队列
这里只是罗列出来,并不会深入到具体的实现,有兴趣的可以自行查阅网上资料。
为了正常使用ZooKeeper,需要准备一个或多个服务器,并在各服务器上下载和安装ZooKeeper,进行简单的ZooKeeper集群配置之后,这个服务器集群就可以正常对外提供ZooKeeper分布式协调服务了。使用ZooKeeper的应用并不需要部署在与ZooKeeper相同的服务器上,当然也可以这么做。
ZooKeeper客户端通过客户端脚本/Java API/开源客户端与ZooKeeper集群进行交互,从而保证ZooKeeper客户端应用的分布式一致性。
四、ZooKeeper是什么?ZooKeeper的设计理念是什么?
ZooKeeper是典型的分布式数据一致性解决方案。设计理念是将复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
五、ZooKeeper的设计目标?
- 简单的数据模型
- 可以构建ZooKeeper集群
- 顺序访问
- 高性能
六、ZooKeeper的特性?
- 顺序一致性
- 原子性
- 单一视图
- 可靠性
- 实时性
七、ZAB协议
那么ZooKeeper是如何做到对外提供这种分布式协调服务的呢?这得益于ZooKeeper采用的ZAB协议,ZAB(即ZooKeeper Atomic Broadcast---ZooKeeper原子消息广播协议)是分布式一致性协议的一种,是为ZooKeeper专门设计的一种支持崩溃恢复的原子广播协议。ZAB协议包括两种模式:崩溃恢复&消息广播。
服务器框架刚启动时,或Leader服务器出现网络中断、崩溃退出、重启等异常时,ZooKeeper服务器集群会进
入崩溃恢复模式。当选举产生了新的Leader服务器,同时集群中有过半的机器与Leader服务器完成状态同步
后,进入消息广播。
ZAB协议的核心是定义了对于那些会改变ZooKeeper服务器数据状态的事务请求的处理方式。
关于ZAB协议是如何工作的,我打算重新写一篇博文。
八、小结
其实我很想把自己学习过程中慢慢领悟的过程写出来,但是写完之后发现也说得不是很清楚,ZooKeeper还是需要在一些项目的实践中去体会的,纸上得来终觉浅。
阅读全文
0 0
- ZooKeeper学习——概述篇
- ZooKeeper学习概述
- Zookeeper学习(一):Zookeeper的概述
- Zookeeper介绍(二)——Zookeeper概述
- Zookeeper学习一:概述和安装
- Zookeeper-概述
- ZooKeeper 概述
- ZooKeeper概述
- Zookeeper概述
- ZooKeeper概述
- ZooKeeper概述
- ZooKeeper概述
- Zookeeper概述
- ZooKeeper 概述
- zookeeper概述
- Zookeeper 概述
- ZooKeeper概述
- ZooKeeper 概述
- hdu 3652(数位dp)
- Java其他
- LeetCode
- 平衡小车之速度
- Java 多线程基础
- ZooKeeper学习——概述篇
- 杭电测试题C语言
- UVA10791 Minimum Sum LCM
- WinSCP连接VMware虚拟机被拒绝
- VUE+WebPack游戏设计:实现盒子爆破效果和界面美化
- 接口与抽象类的异同之处
- 在Github上面搭建一个自己域名的Hexo博客
- TCP/IP五层模型的协议
- 数据库设计三个范式