2019-12-22-zookeeper概要
含义:动物管理员,管理节点
作用:开源的分布式应用程序协调服务(简单来说,就是一个抽象出来,专门管理各个服务的管理员,发现服务,注册服务,以实现分布式应用的联合工作)
feature
- 树状目录结构,节点称作znode
- 持久节点(客户端断开仍然存在)
- 临时节点(断开消失)
- 节点监听(通过get exists,getchildren来实行监听)
应用:
- 分布式锁
描述 | |
---|---|
问题场景 | 我们有一个服务C,将A系统的订单数据,发送到B系统进行财务处理,但这个服务部C署了三个服务器来进行并发,其中有些数据在传送处理时会new一个objectid,如果不添加锁,该数据可能被两个服务同时调起,在B服务中生成两条记录 |
解决方案 | 我们同步数据时候,需要给同一个数据加锁,防止该数据同时被两个服务调起,服务访问某条订单数据时候,需要先获得锁,操作完后释放锁 |
实现方式 | 每个服务连接一个znode的下属有序临时节点,并监听上个节点的变化,编号最小的临时节点获得锁,操作资源,来实现 |
- 服务注册和发现
问题场景 | 我们同步数据的服务C(上个表格中描述),可能是部署在一个机器上的多进程,也可能是部署在多个物理ip上的服务,他是动态变化的,如果没有zookeeper类的软件,可能我每改一次ip,都需要重启一下服务,服务宕机了,也要改ip(不然404) |
解决方案 | 我们需要有个服务来管理应用状态,知道服务的运行状态,这样,当其他服务调起这个服务的时候,才能通过zookeeper提供的地址进行同行 |
实现方式 | 服务启动会注册到zookeeper,并保持心跳,其他服务想要调用某服务的时候,询问zookeeper拿到地址,然后发送请求报文(例如RPC) |
1.每个应用创建一个持久节点,每个服务在持久节点下建立临时节点,不同应用间会有监听,A服务如果变动,B服务会收到订阅 | |