本章节内容:
- 确定 Apache ZooKeeper 的重要性
- 了解 ZooKeeper 及其功能
- 了解分布式系统及其挑战
- 安装和配置 ZooKeeper 单机环境
随着业务规模和系统复杂度的提升,很多系统会历经从单一架构到垂直架构,再到分布式架构的技术发展过程。
面对大流量高并发的用户访问,以及随之产生的海量数据处理等诸多挑战下,如何能为用户提供稳定可靠的服务,成为目前很多互联网大公司面临的技术问题。
比如,常见的高并发场景有:
- 购物节
- 春运购票
- 秒杀系统
- 抖音
购物节的支付系统要想要在高并发的场景下实现五个 9(99.999%)的高可用性,保证支付率,还要保证秒杀场景下单位时间内成交的订单数更多,仅靠单一架构是不能做到的。
如果采用集群的垂直架构,随着业务的发展和系统复杂度的提生,要会出现越来越多的子项目,维护和部署也变更复杂,很难方便的扩展。
因此越来越多的公司采用分布式架构:
将一个系统横向分成若干子系统或服务,实现服务性能的动态扩容。
这样不但大幅提高服务处理能力, 而且降低大一程序的开发维护以及部署难度。
整体来看系统和复杂度和部署难度是整体上升的, 但是可以通过 CI/CD 即持续集成和持续部署手段将繁杂的测试部署等环节尽可能自动化.
分布式系统的主要特征:
-
资源共享(ResourceSharing):
- 这是指可以在任何地方使用系统中的资源,例如存储空间,计算能力,数据和服务等。
-
可扩展性(Extendibillity):
- 从硬件和软件的角度来看,这是指逐步扩展和改进系统的可能性。
-
并发(Concurency) :
- 这指的是多个用户同时使用以完成相同任务或不同任务的系统能力。
-
性能和可扩展性(Performance and Scalability) :
- 这样可以确保系统的响应时间随着总负载的增加而降低。
-
容错能力(Fault tolerance) :
- 这样可以确保即使某些组件出现故障或以降级模式运行,系统也始终可用。
-
通过 API 进行抽象(Abstraction from APIs) :
-这确保了系统的各个组件对最终用户是隐藏的,从而仅向他们显示最终服务。
- 微服务
- 淘宝
- 京东
- 抖音
因此掌握分布式开发的相关知识的 IT 从业人员是工大公司争抢的对象。
分布式系统开发工程师薪水也相对更高,在拉钩招聘平台平均起薪 25K+。
可见学习和提高分布式系统开发能力, 是传统软件开发人员转行和提升的一个很好的方向选择。
开发一个网络文件系统(NFS)时可能遇到的的问题:
- 网络可靠 ?
- 网络延迟 ?
- 网络带宽 ?
- 网络安全 ?
- 拓扑稳定 ?
- 管理 ?
- 传输成本 ?
- 网络组件之间的协作 ?
- 可用性/数据一致性/分区容错
学习 ZooKeeper,可以提升分布式开发和架构能力
分布式系统的本质,是分布在不同网络或计算机上的程序或组件,彼此通过信息传递来协同工作的系统,而 ZooKeeper 正是一个分布式应用协调框架.
Apache Zookeeper是Apache开发的顶级软件,充当集中服务,用于维护命名和配置数据,并在分布式系统中提供灵活而强大的同步功能。
据其架构服务,ZooKeeper主要解决以下问题:
-
分布式共识 (Distributed Consensus)
- 数据一致(谁说的算?)
-
集群管理 (Group Management)
- HA
-
出席协议 (Presence Protocal)
- 是通过互联网或任何IP网络提供存在服务的协议。
-
领导人选举 (Leader Election)
- 分布式共识
在分布式系统架构中具有广泛的应用场景,是业界首选的一致性解决方案。而其开源的特性更是为我们学习底层原理,进一步提高分布式架构设计的能力提供了很好的帮助。
ZooKeeper 可以实现分布式系统下的配置管理、命名服务、分布式同步(lock and barrier)、集群成员管理(领导选举, 动态监督节点上下线)以及发布订阅等使用场景,而这些场景基本就是分布式系统中最常见的问题,因此可以说:掌握了 ZooKeeper,就是掌握了分布式系统最关键的知识。
分布式系统 CAP 理论
在分布式系统架构下,CAP 理论已经成为公认的定理,
CAP 简介
CAP 理论是计算机科学家 Eric Brewer 在 2000 年提出的理论猜想,在 2002 年被证明并成为分布式计算领域公认的定理,其理论的基本观念是,在分布式系统中不可能同时满足以下三个特性:
- C:consistency 一致性
- A:Availability 可用性
- P:Partition Tolerance 分区容错性
“CAP Theorem”
Any networked shared-data system can have at most two of three desirable properties:consistency (C) equivalent to having a single up-to-date copy of the data; high availability (A) of that data (for updates); and tolerance to network partitions (P)
C:consistency 一致性
所有节点在同一时间的数据完全一致
数据同步, 锁机制.
如果 B 操作在成功完成 A 操作之后,那么整个系统对 B 操作来说必须表现为 A 操作已经完成了或者更新的状态。
A:Availability 可用性
"reads and writes always succeed",
一般在描述一个系统可用性时,通过停机时间来计算,比如某某系统可用性可以达到 5 个 9,意思就是说该系统的可用水平是 99.999%,即全年停机时间不超过
$$(1-0.99999)36524*60 = 5.256min$$
这是一个极高的要求。一般我们说的高可用 HA 是指可用性达到 99.9%的程度.
如果只讨论可用性, 即使集群服务返回的数据不一致, 或者直接访问的节点故障但是集群有故障转移能力因此其他节点可以提供服务,我们都说系统是可用的.
P:Partition Tolerance 分区容错性
分布式系统架构下会有多个节点,为了避免遇到某节点或网络分区故障的时候,系统仍然能够对外提供满足一致性或者可用性的服务,会使用分区进行冗余.
AP VS. CP
很容易的证明 CAP 无法同时满足, 因为分布式系统需要首先保证系统的分区容错性 P,否则就不能称之为是分布式系统, 但是必须在 CP 和 AP 之间做出选择,
- AP: 牺牲数据一致性,保证可用性,将旧的数据返回给用户。
- CP: 牺牲可用性,保证数据一致性。阻塞等待,直到网络连接恢复,数据更新操作同步完成之后,再给用户响应最新的数据。
BASE 理论
BASE 是 Basically Available(基本可用)、Soft-state(软状态) 和 Eventually Consistent(最终一致性) 三个短语的缩写。
-
基本可用:在分布式系统出现故障,允许损失部分可用性(服务降级、页面降级)。
-
软状态:允许分布式系统出现中间状态。而且中间状态不影响系统的可用性。这里的中间状态是指不同的 data replication(数据备份节点)之间的数据更新可以出现延时的最终一致性。
-
最终一致性:data replications 经过一段时间达到一致性。
BASE 理论是对 CAP 中的一致性和可用性进行一个权衡的结果,理论的核心思想就是:我们无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性。
ZooKeeper 支持一主(Leader 节点)多从(Follower 节点)集群形式
可以保证 CP 即一致性和分区容错性.
如何才能学好 ZooKeeper?
- 官网文档
- 使用技巧
- 阅读源码
- 使用场景
课程设置:
- 第一章, ZooKeeper 和分布式系统介绍
- 介绍,安装,配置,集群搭建
- 第二章, ZooKeeper 服务和工作原理
- 数据类型,节点操作,监听机制,事务
- 第三章, ZooKeeper 的编程和开发
- Java APIs 使用,HA 部署等
- 第四章, 介绍分布式系统下的使用场景
- 选举机制,锁,二阶段提交算法,分布式锁,服务注册和发现等.
- 第五章, ZooKeeper 集群的配置,管理和监控
- 第六章, 更好用的客户端 Apache Curator
本课程能够使你快速入门分布式开发技术, 有丰富的案例和使用场景的介绍, 带领大家全面系统的了解 ZooKeeper 的应用,架构和底层实现,从而对解决工作中多变的现实问题打下坚实的基础。
Linux 安装 ZooKeeper
zookeeper 下载地址为: https://zookeeper.apache.org/releases.html
选择一稳定版本,本教程使用的 release 版本为3.4.14,下载并安装。
打开网址 https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz,
看到如下界面:
选择一个下载地址,使用 wget 命令下载并安装:
Zookeeper 下载安装
1 2 3 4 5 6 7 8 |
$ wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz $ tar -zxvf zookeeper-3.4.14.tar.gz $ cd zookeeper-3.4.14 $ cd conf/ $ cp zoo_sample.cfg zoo.cfg $ cd .. $ cd bin/ $ sh zkServer.sh start |
执行后,服务端启动成功:
查看服务端状态(启动单机节点):
启动客户端:
1 |
$ sh zkCli.sh |
帮助命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port |
Windows 下安装 ZooKeeper
zookeeper 下载地址为: https://zookeeper.apache.org/releases.html
选择一个地址点击版本
下载后解压:
将 conf 目录下的 zoo_sample.cfg
文件,复制一份,重命名为 zoo.cfg
在安装目录下面新建一个空的 data
文件夹和 log
文件夹:
修改 zoo.cfg 配置文件,将dataDir=/tmp/zookeeper
修改成 zookeeper 安装目录所在的 data
文件夹,再添加一条添加数据日志的配置(需要根据自己的安装路径修改)。
双击 zkServer.cmd , 控制台显示如下内容表示服务端启动成功!
1 |
bind to port 0.0.0.0/0.0.0.0:2181 |
双击zkCli.cmd 启动客户端, 出现
1 |
Welcome to Zookeeper! |
表示我们成功启动客户端。
谢谢
Views: 521