zookeeper实现分布式锁

本文详细介绍了如何利用Zookeeper实现分布式锁来避免超卖问题。首先讲解了分布式锁的基本概念和羊群效应,接着展示了安装和配置Nginx的过程。然后通过创建SSM项目并设置数据库,引入MyBatis,展示了Spring XML配置。文章通过启动多个服务并使用JMeter模拟高并发测试,演示了在未使用分布式锁时出现的商品超卖问题。最后,引入Zookeeper分布式锁的解决方案,通过代码示例展示如何在控制层加入逻辑,确保并发请求的有序处理,从而成功防止了超卖情况的发生。
摘要由CSDN通过智能技术生成

zookeeper实现分布式锁

仓库地址: README.md · J_look/ssm+zookeeper - Gitee.com

  • 锁:我们在多线程中接触过,作用就是让当前的资源不会被其他线程访问!
    我的日记本,不可以被别人看到。所以要锁在保险柜中
    当我打开锁,将日记本拿走了,别人才能使用这个保险柜
  • 在zookeeper中使用传统的锁引发的 “羊群效应” :1000个人创建节点,只有一个人能成功,999
    人需要等待!
  • 羊群是一种很散乱的组织,平时在一起也是盲目地左冲右撞,但一旦有一只头羊动起来,其他的羊
    也会不假思索地一哄而上,全然不顾旁边可能有的狼和不远处更好的草。羊群效应就是比喻人都有
    一种从众心理,从众心理很容易导致盲从,而盲从往往会陷入骗局或遭到失败。

实现分布式锁大致流程

整体思路

  1. 所有请求进来,在/lock下创建 临时顺序节点 ,放心,zookeeper会帮你编号排序

  2. 判断自己是不是/lock下最小的节点

  3. 是,获得锁(创建节点)

  4. 否,对前面小我一级的节点进行监听

  5. 获得锁请求,处理完业务逻辑,释放锁(删除节点),后一个节点得到通知(比你年轻的死了,你

    成为最嫩的了)

  6. 重复步骤2

安装nginx

安装nginx运行所需的库

//一键安装上面四个依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

下载nginx

在那个目录下执行这个命令 就会下载到哪个目录下

//下载tar包
wget http://nginx.org/download/nginx-1.13.7.tar.gz

解压

注意哦 解压出来的文件 我们还需要安装哦

下面所有的命令 都是在nginx-1.13.7文件夹里面进行哦

tar -zxvf  nginx-1.13.7.tar.gz
  • 查看解压出来的文件

    ll ./nginx-1.13.7

安装

创建一个文件夹,也就是nginx需要 安装到的位置

mkdir /usr/local/nginx

执行命令 考虑到后续安装ssl证书 添加两个模块

./configure --with-http_stub_status_module --with-http_ssl_module

执行make install命令

make install
  • 我们可以来到nginx安装到的目录下查看
  • 你们没有我这么多目录 conf 配置 sbin 启动nginx
  • 博主技术有限 ,还没有深入去学习nginx的 大致这样介绍吧

启动nginx服务

我这个是在/ 目录底下执行的 你们可以根据 自己所在的目录去执行

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

访问nginx

nginx的默认端口是80

配置nginx

我们所做的配置大概就是

  • 当有请求去访问我们服务器,
  • 然后负载到我们处理请求的服务器 我这里是两台
  • 为了方便 处理请求的这两台服务器 是在我Windows上

打开配置文件

# 打开配置文件
vim /usr/local/nginx/conf/nginx.conf
 红框的位置
查看本机ip

upstream look{ 
    server 192.168.204.1:8001; //192.168.204.1是我本机的ip地址,8001是tomcat的端口号
    server 192.168.204.1:8002; //8002是另外一个工程的tomcat端口号
}
server { 
	listen 80; 
	server_name localhost; 
	#charset koi8-r; 
	#access_log logs/host.access.log main; 
	location / {
		proxy_pass http://look; 
		root html; 
	index index.html index.htm; 
}

工程的搭建

搭建ssm框架 有时间推出springboot的版本

  • 创建一个maven项目(普通maven项目即可)

创建数据库:

-- 商品表
create table product(
id int primary key auto_increment, -- 商品编号
product_name varchar(20) not null, -- 商品名称
stock int not null, -- 库存
version int not null -- 版本
)
insert into product (product_name,stock,version) values('锦鲤-清空购物车-大奖',5,0)
-- 订单表
create table `order`(
id varchar(100) primary key, -- 订单编号
pid int not null, --
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值