开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情
Apache ZooKeeper
学习目标
1、了解软件架构的演进过程
2、掌握zookeeper的安装
3、了解zookeeper的数据单元
4、掌握znode节点类型
1、软件架构演进
软件架构的发展经历了由单体架构、垂直架构、SOA架构到微服务架构的演进过程,下面我们分别了解一下这几个架构。
软件架构演进概览:
1.1单体架构
特点: all in one
①所有功能集中在一个项目中
②所有功能都要打成war包部署到服务器
③ 通过集群(session共享集群,如使用redis缓存存储session数据)来提高服务器的性能
优点: ①.项目架构简单,前期开发的成本低,周期短,小型企业首选.
缺点: ①全部的功能都集中在一个项目中完成,对于大型项目来说,开发难度高,不容易开发及扩展和维护
1.2垂直架构
架构说明:
按照业务进行切割,形成小的单体项目。
特点:
①.以单体架构为单位进行系统的划分,划分成一个个系统.
②.项目与项目之间独立开发,开发效率高.
③.项目是以接口调用为主(早期主要使用webservice)
优点:
①.项目架构简单,前期开发的成本低,周期短,小型企业首选.
②.垂直架构进行mvc分层设计,针对分层做相应的处理做到集群(10~1000)
③.不同的项目采用不同的技术实现.
缺点:
①.全部的功能都集中在一个项目中完成,对于大型项目来说,开发难度高,不容易开发及扩展和维护.
②.集群扩展有瓶颈
②.项目与项目之间存在数据冗余,耦合度高.
②.项目是以接口调用为主,存在数据同步问题.
1.3SOA架构
SOA全称为Service-Oriented Architecture,即面向服务的架构。
它可以根据需求通过网络对松散耦合的粗粒度应用组件(服务)进行分布式部署、组合和使用。
一个服务通常以独立的形式存在于操作系统进程中。
站在功能的角度,把业务逻辑抽象成可复用的服务,通过服务的编排实现业务的快速再生,
目的:把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用。
架构说明:
将重复功能或模块抽取成组件的形式,对外提供服务,在项目与服务之间使用ESB(企业服务总线)的形式作为通信的桥梁。
特点: ①.基于soa服务思想进行功能的抽取(重复代码问题解决),以服务为中心来管理项目. ②.各个系统之间要进行调用,所以出现ESB来管理项目(可以使用各种技术实现:webservice,rpc等) ③.ESB是作为系统与系统之间连接的桥梁,进行统一管理.
优点: ①.重复代码进行了抽取,提高了开发效率,提高了系统的可维护性. ②.可以针对某个系统进行扩展,做集群更容易. ③.采用ESB来管理服务组件,有利于降低企业开发项目难度
缺点: ①.系统与服务的界限模糊的,不利于设计. ②.ESB是作为系统与系统之间桥梁,没有统一标准,种类很多,不利于维护!
常见的企业服务总线:
- IBM WebSphere ESB
- Microsoft ESB
- JBOSS SOA Platform等等
1.4微服务架构
架构说明:
- 将系统服务层完全独立出来,抽取为一个一个的微服务。
- 抽取的粒度更细,遵循单一原则。
- 采用轻量级框架协议传输。
特点:
①.把系统的服务层完全独立出来,有利于资源的重复利用,提高开发效率.
②.微服务遵守单一原则
③.微服务与微服务之间的调用使用restful轻量级调用.
优点:
①.微服务拆分更细,有利于资源的重复利用,提高开发效率
②.可以更加精准针对某个服务做方案
③.微服务去中心化,使用restful轻量级通信协议比使用ESB企业服务总线更容易维护
④.适应市场更容易,产品迭代周期更短.
缺点:
微服务量多,服务治理成本高,不利于系统维护
分布式系统架构且是微服务架构,技术成本高(容错,分布式事务等),对团队高挑战
1.5Serverless架构
为了减少运维,降低部署难度。现在越来越多的大厂在开始布局云计算战场了,目前微服务架构开发Serverless模式的有腾讯的tsf:cloud.tencent.com/product/tsf
1.6阿里淘宝架构演进之路
参考文献:mp.weixin.qq.com/s?__biz=MzU…
2.服务注册中心介绍
问题:
那么一旦采用分布式架构,服务都部署在不同的机器上,如何实现服务的通信呢?
服务和服务之间如何进行调用的?
要解决上面的问题,我们就需要使用服务中心(解决服务注册地址)+rpc通信(解决数据传输通信问题)
(我们今天讲的zookeeper可以实现服务注册中心)。
解决: 采用服务中心,服务中心可以发现服务,进行服务治理。
没有服务中心,服务之间调用
使用服务注册中心管理服务
3.zookeeper概述
3.1 zookeeper简介
动物园管理员
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。其由JAVA编写,支持JAVA 和C两种语言的客户端。
3.2Zookeeper常见的应用场景
1.服务注册中心
2.分布式锁
3.3 zookeeper数据存储单元znode
zookeeper中数据基本单元叫节点,即为znode。一个znode节点下面又可以包含多个子节点,最终以树的这种层级结构呈现出来。每个znode节点路径path唯一,存储自己的节点数据。
我们可以通过文件系统目录结构大致对znode结构有个初步认识:
zookeeper的znode节点模型:
所以zookeeper存储的数据节点 都是以/ 开头 以树状结构进行存储数据!
并且zookeeper对所在的节点和数据 自带监控功能,可以随时监听到数据节点和存储数据的变化。
4.zookeeper下载安装
下载页面地址:zookeeper.apache.org/releases.ht…
linux环境下安装zookeeper(了解)
1:安装jdk(略)
2:把.gz文件上传到linux系统
3:解压缩文件
tar -zxvf apache-zookeeper-3.5.8-bin.tar.gz
4:文件夹重新命名
mv apache-zookeeper-3.5.8-bin /usr/local/zookeeper
5:进入zookeeper目录
cd /usr/local/zookeeper/
6:创建数据存放目录
mkdir data
7:进入conf目录
cd conf
8:将文件zoo_sample.cfg备案一份,文件名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
9.修改zoo.cfg配置文件
vi zoo.cfg
修改dataDir属性为自己的目录地址:
配置说明:
# zookeeper时间配置中的基本单位 (毫秒)
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数
syncLimit=5
#zookeper 数据存储目录
dataDir=/tmp/zookeeper
#对客户端提供的端口号
clientPort=2181
#单个客户端与zookeeper最大并发连接数
#maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
#autopurge.snapRetainCount=3
#自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
#autopurge.purgeInterval=1
10.启动zookeeper服务端
先切换到zookeeper的bin目录
cd /usr/local/zookeeper/bin/
执行脚本:
./zkServer.sh start
以上就是zookeeper的安装以及启动过程。
接下来咋们用客户端连接一下:
同样在bin目录下执行:
./zkCli.sh
执行完如果出现WatchedEvent state:SyncConnected type:None path:null一直卡主住这里可以敲回车即可。
zookeeper默认创建了一个名称为"zookeeper"的znode节点。
11.服务停止
./zkServer.sh stop
windows环境下安装zookeeper(教学)
1.确保jdk环境变量配置正确
2.将apache-zookeeper-3.5.8-bin.tar.gz压缩文件进行解压
解压后目录结构:
3.在安装目录下新建一个data文件夹
4.进入conf文件夹并将zoo_samle.cfg文件备份一份重命名为zoo.cfg
5.编辑并修改zoo.cfg文件内容中dataDir目录地址
配置说明:
# zookeeper时间配置中的基本单位 (毫秒)
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数
syncLimit=5
#zookeper 数据存储目录
dataDir=/tmp/zookeeper
#对客户端提供的端口号
clientPort=2181
#单个客户端与zookeeper最大并发连接数
#maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
#autopurge.snapRetainCount=3
#自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
#autopurge.purgeInterval=1
6.启动zookeeper
找到bin目录下zkServer.cmd,双击运行,注意:此版本zookeeper启动会默认占用8080端口
注意:1.如果你当前8080端口被占用了,那么启动的时候会闪退,cmd窗口会自动关闭,此时可以在zoo.cfg配置文件里面最后一行添加admin.serverPort=8123,然后再双击zkServer.cmd运行就ok了。2.dataDir路径配置的一定不要包含中文,并且路径使用''不要使用'/'。
7.客户端访问
在bin目录下双击zkCli.cmd