阿里3个小时手把手教你用zookeeper实现分布式锁

仓库地址:https://gitee.com/J_look/ssm-zookeeper/blob/master/README.md

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

文章插图
 
整体思路
阿里3个小时手把手教你用zookeeper实现分布式锁

文章插图
 
  1. 所有请求进来 , 在/lock下创建 临时顺序节点  , 放心 , zookeeper会帮你编号排序
  2. 判断自己是不是/lock下最小的节点
  3. 是 , 获得锁(创建节点)
  4. 否则 , 对前面小我一级的节点进行监听
  5. 获得锁请求 , 处理完业务逻辑 , 释放锁(删除节点) , 后一个节点得到通知(比你年轻的死了 , 你
    成为最嫩的了)
  6. 重复步骤2
安装Nginx安装nginx运行所需的库
bash
//一键安装上面四个依赖yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel下载nginx
在那个目录下执行这个命令 就会下载到哪个目录下
bash
//下载tar包wget http://nginx.org/download/nginx-1.13.7.tar.gz解压
注意哦 解压出来的文件 我们还需要安装哦
下面所有的命令 都是在nginx-1.13.7文件夹里面进行哦
highlighter-
tar -zxvfnginx-1.13.7.tar.gz
  • 查看解压出来的文件
  • highlighter-
  • ll ./nginx-1.13.7
  •  
安装
创建一个文件夹 , 也就是nginx需要安装到的位置
bash
mkdir /usr/local/nginx执行命令 考虑到后续安装ssl证书 添加两个模块
bash
./configure --with-http_stub_status_module --with-http_ssl_module执行make install命令
bash
make install
  • 我们可以来到nginx安装到的目录下查看
  • 你们没有我这么多目录 conf 配置 sbin 启动nginx
  • 博主技术有限 , 还没有深入去学习nginx的 大致这样介绍吧
  •  
启动nginx服务
我这个是在/ 目录底下执行的 你们可以根据 自己所在的目录去执行
bash
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf访问nginx
nginx的默认端口是80
配置nginx
我们所做的配置大概就是
当有人请求去访问我们服务器 , 然后负载到我们处理请求的服务器 我这里是为了方便 处理请求的这两台服务器 是在我windows上
打开配置文件
bash
# 打开配置文件vim /usr/local/nginx/conf/nginx.conf
  • 图中 红框的位置 是需要添加的内容
  • 配置含义: 我们的nginx监听的是服务器的80端口 当有请求访问时 会负载到 look代理里面 server是处理请求的两台服务器
  • 查看本机ip Windows ==>ipconfig linux ==> ip a(ip address)

阿里3个小时手把手教你用zookeeper实现分布式锁

文章插图
 
xml
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; }


推荐阅读