Zookeeper典型使用场景实战

目录

1.zookeeper典型使用场景

1.1 开发实战 

1.1.1 配置nginx 

1.1.2 分布式锁


1.zookeeper典型使用场景

 zookeeper分布式锁实现

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

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

 

create /lock
get -w /lock

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

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

1.1 开发实战 

 使用springboot+mybatis测试上述案例

 

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

controller层调用service减库存方法。

 

使用jmeter测试 

 

http request增加一个监听

 

1.1.1 配置nginx 

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

 

 

 启动nginx

出现负数 

1.1.2 分布式锁

分布式锁使用 

 客户端初始化 

 重试策略 

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

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

结合下图公平锁实现来做

 

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

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

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

 

 

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

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

 

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

 

 

 1.1.3 注册中心

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

 

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

 

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

官网链接:Spring Cloud Zookeeper

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bingtanghulu_6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值