Nginx + Tomcat 反向代理 负载均衡 集群 部署指南

Posted 一叶知秋V

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx + Tomcat 反向代理 负载均衡 集群 部署指南相关的知识,希望对你有一定的参考价值。

当多个进程在不同的系统中,就需要使用分布式锁控制多个进程对同一个资源的访问。本篇介绍的是通过 Redis 实现的分布式锁。

为了确保分布式锁的可用性,我们至少要确保锁的实现同时满足以下四个条件:

  • 互斥性;
  • 不会发生死锁,即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁;
  • 具有容错性,只要大部分的 Redis 节点正常运行,客户端就可以加锁和解锁;
  • 加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。

分布式锁实现方案:

  • 数据库乐观锁;
  • 通过 Redis 实现分布式锁,利用 Redis 的 setnx 命令来实现分布式锁;
  • 通过 Zookeeper 实现分布式锁,利用 Zookeeper 的顺序临时节点实现分布式锁和等待队列;

优缺点:

分布式锁优点缺点
Redisset 和 del 指令的性能较高。1、实现复杂,需要考虑超时、原子性、误删等情况;
2、没有等待的队列,只能在客户端自旋来等锁,效率低下。
Zookeeper1、有封装好的框架,容易实现;
2、有等待锁的队列,大大提升抢锁效率。
添加和删除节点性能较低。

通过 Redis 实现分布式锁的流程图:

(c)2006-2024 SYSTEM All Rights Reserved IT常识