写在前面
当公司的技术栈入坑分布式开发之后,必然不可获取的学习,是对ZK(Zookeeper)的学习与研究。ZK作为分布式开发中常用的一个组件,其重要性不言而喻。
在还没出现微服务的时间里,ZK独挑大梁,作为注册中心,实现服务之间的协调调度。随着微服务的兴起,才出现了一些其他的服务注册中心,如eureka、nacos等等。不管出现何种组件,ZK在实际的市场份额中,仍占有很大的比重,因此,学习ZK的必要性,不言而喻。
什么是Zookeeper
Zookeeper 简称ZK,是一种用于分布式应用程序的高性能协调服务,提供一种集中式信息存储服务,有着典型的特点。
- 数据存储在内存中,就会有高性能的读取与存储
- 类型文件系统的树形结构(文件和目录)
- 高吞吐量
- 低延迟
- 集群高可靠
根据以上特点,ZK具有很多实际中使用的工作,常见的作用包括基于Zookeeper实现分布式统一配置中心、服务注册中心、分布式锁等
ZK,可以通过构建集群,来实现高可用。如上图所示,每一个Server称为Leader,然后每个Client是可以连接任何一个Server。ZK是一个C/S架构的组件。
何为分布式协调服务
谈到这个话题,就不得不去聊一下,技术架构的演进。技术架构,由传统的单体架构,发展到分布式架构。
以一个实例来说,有这样一个功能。一个电商网站,用户在线点击购买,然后系统完成下单,支付,出货逻辑。
在传统的单体架构中,应用独立部署,应用涵盖了前端展示页面、后端整个交互逻辑。整个系统的交互逻辑,都在单独的应用中实现。
相关的业务逻辑都在单体应用完成。
当架构演变为分布式架构之后,系统变得复杂,单体应用,按照一定规则,拆分成多个应用
业务逻辑,由多个应用完成。整个系统变得复杂,为了更好地实现业务逻辑,就需要有一个分布式协调员的角色出现。
同时呢,在单体应用架构中,对于多线程资源的竞争可以通过同步关键字或者加锁来实现,但是在分布式架构中,就变得复杂,如果需要实现分布式架构事务,也必然需要一个分布式协调员角色出现。
有了分布式协调这个前提,为了更好地实现这个职责,抽取服务中共性的部分,就形成了分布式协调服务。
Zookeeper的应用案例
说了这么多,那么目前来说Zookeeper都有哪些实际的应用案例呢?其实,是非常多的,我们来依次列举下。
Hbase:
作为一个大数据应用框架,其中使用Zookeeper进行Master选举,完成分布式服务间协调
Solr:
使用Zookeeper进行集群管理、Leader选举、配置管理
Dubbo:
Dubbo可谓是非常火的分布式应用框架,使用Zookeeper进行服务注册
Mycat:
分库分表中间件,使用Zookeeper进行集群管理、配置管理
Sharding-sphere:
分库分表客户端应用,使用Zookeeper进行集群管理、配置管理
Zookeeper的同类产品
Zookeeper有一些相似功能的同类产品,如Consul、Etcd、Doozer
它们有着基本相同的功能,其中Etcd是精简版的Zookeeper
Zookeeper的安装使用
Zookeeper的安装,非常简单,官网,有着很详细的文档。
下载
官网首页,点击下载页面,选择合适的版本、镜像进行下载,下载完毕,进行解压。
安装目录如下所示:
配置
进入conf文件夹,完成初始化配置
复制zoo.sample.cfg,创建新的文件zoo.cfg。如果自定义配置名字,需要在bin目录下环境命令内进行显式设置,如下所示
zoo.cfg 内配置参数,可以参考官方文档,https://zookeeper.apache.org/doc/r3.6.1/zookeeperAdmin.html#sc_configuration
启动
Zookeeper是C/S架构,因此分为服务端、客户端两部分。
进入bin目录
bin/zkServer.sh start
完成服务端应用启动
bin/zkCli.sh -server 127.0.0.1:2181
完成客户端连接