镜像详情地址:https://cloud.hainiubl.com/#/excellentImageDetail?id=25237&imageType=excellent
点击镜像详情页面最下方的“添加到实验配置”按钮可直接运行该实战镜像
一、需求说明
我们都知道在设计全局系统时,关键业务操作的并发安全是一个核心问题。
在单机环境下,没有并发控制的情况下,多个线程可以同时对共享资源进行操作,这样很容易造成数据不安全问题,比如库存的超买超卖。为了避免数据不安全的问题,单机环境可以引入同步锁(如Java的synchronized
或ReentrantLock
)来线程安全。
在微服务和多元化系统中,应用程序通常部署在多台机器上,多个实例同时处理请求。如果每个实例仅在本地加锁,仍然会出现全局数据竞争:如库存扣减,实例多个同时使用相同的数据库记录,可能导致超卖的现象。这个时候就需要分布式锁来解决这个问题。
本练习将介绍如何基于Redis,实现高性能、高可用且简单的分布式锁
二、环境介绍
机器介绍
- 一台mysql机器
- 一台idea开发机
- 一台redis内存数据库
- 一台jmeter压测机器
- 五台linux服务器
- 一台nginx服务器
流程介绍
- 打开idea运行已经编写好的单机并且不加锁的扣减库存代码
- 通过jmeter并发测试,观察多线程并发请求,出现超卖的情况
- 升级代码引入ReentrantLock锁机制,可以保证多线程并发数据安全
- 多机服务器部署,使用nginx进行负载均衡转发请求
- 用jmeter测试加了ReentrantLock之后的多机并发访问出现超卖的情况
- 升级代码引入redisson分布式锁解决多机多线程并发访问数据不安全的问题
您没有该镜像的运行权限,所以无权查看该笔记
版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-海牛博士,http://hainiubl.com/topics/76608