Zookeeper典型使用场景实战

目录

1.zookeeper典型使用场景

1.1 开发实战 

1.1.1 配置nginx 

1.1.2 分布式锁


1.zookeeper典型使用场景

Zookeeper典型使用场景实战_第1张图片

 zookeeper分布式锁实现

路径下加分布式锁,加监听

锁的特性:1.独占性(zookeeper只能生成一个相同节点)

 Zookeeper典型使用场景实战_第2张图片

create /lock
get -w /lock

#...其他节点想创建lock节点会失败
delete /lock

基于临时节点和临时顺序节点加分布式锁

Zookeeper典型使用场景实战_第3张图片

1.1 开发实战 

 使用springboot+mybatis测试上述案例

Zookeeper典型使用场景实战_第4张图片 Zookeeper典型使用场景实战_第5张图片

 service减库存操作,采用两台JVM+ngnix前端操作测试,测试工具使用jmeter

Zookeeper典型使用场景实战_第6张图片

controller层调用service减库存方法。

 Zookeeper典型使用场景实战_第7张图片

使用jmeter测试 

Zookeeper典型使用场景实战_第8张图片Zookeeper典型使用场景实战_第9张图片 

http request增加一个监听

 Zookeeper典型使用场景实战_第10张图片

1.1.1 配置nginx 

 配置nginx,解压缩nginx压缩包,修改nginx.conf文件

 Zookeeper典型使用场景实战_第11张图片

Zookeeper典型使用场景实战_第12张图片

 Zookeeper典型使用场景实战_第13张图片

 启动nginx

Zookeeper典型使用场景实战_第14张图片

出现负数 

1.1.2 分布式锁

Zookeeper典型使用场景实战_第15张图片

分布式锁使用 

Zookeeper典型使用场景实战_第16张图片

 客户端初始化 

 重试策略 

Zookeeper典型使用场景实战_第17张图片

 加锁与释放锁代码,初始化quotra客户端 

加锁与解锁底层实现需要总结一下。(TODO)

结合下图公平锁实现来做

 Zookeeper典型使用场景实战_第18张图片

Zookeeper典型使用场景实战_第19张图片

 使用redis集群在master挂掉以后,slave选举成为master的过程中可能会丢失一部分数据。

而zookeeper在同步数据时候会把一半以上的机器同步完数据,这样即使leader节点挂掉也不会丢失数据,因为选举过程中新选出来的leader节点会把数据同步给其他节点,数据可靠性上还是zookeeper更好,性能上比redis差,因为要写一半以上的数据。

Zookeeper典型使用场景实战_第20张图片

Zookeeper典型使用场景实战_第21张图片

并发问题:1.读写并发不一致2.双写不一致问题。

 Zookeeper典型使用场景实战_第22张图片

 Zookeeper典型使用场景实战_第23张图片

 共享锁实现图:写请求执行前必须保证其他的读请求和写请求都完成

源码:InterProcessReadWriteLock需要看一下写锁和读锁的实现,参照原理图

Zookeeper典型使用场景实战_第24张图片

 Zookeeper典型使用场景实战_第25张图片

 leader选举(Leader Election):启动三个java进程

Zookeeper典型使用场景实战_第26张图片

Zookeeper典型使用场景实战_第27张图片

 Zookeeper典型使用场景实战_第28张图片

 Zookeeper典型使用场景实战_第29张图片

 1.1.3 注册中心

 简单的两个服务之间调用可以使用扩容或者ngnix集群

Zookeeper典型使用场景实战_第30张图片

 Zookeeper典型使用场景实战_第31张图片

 多个服务之间注册调用使用zookeeper,使用临时顺序节点注册服务,并且设置监听,有服务节点变化会动态让其他节点感知。

Zookeeper典型使用场景实战_第32张图片

 Zookeeper典型使用场景实战_第33张图片

zookeeper可以做注册中心,leader选举,分布式锁。 

官网链接:Spring Cloud Zookeeper

Zookeeper典型使用场景实战_第34张图片

Zookeeper典型使用场景实战_第35张图片

 实现一个负载均衡算法调用test服务,多次访问可以通过负载均衡算法找到其中一台服务,某一台挂掉以后会通过超时机制剔除掉挂掉的服务。这个过程是zookeeper服务自己调用的过程。这个过程在springcloud中是通过ribbon通过心跳检测机制一定时间内请求

 Zookeeper典型使用场景实战_第36张图片

 Zookeeper典型使用场景实战_第37张图片

 

你可能感兴趣的:(java-zookeeper,zookeeper,java)