Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Posted 一叶知秋V
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx + Tomcat 反向代理 负载均衡 集群 部署指南相关的知识,希望对你有一定的参考价值。
当多个进程在不同的系统中,就需要使用分布式锁控制多个进程对同一个资源的访问。本篇介绍的是通过 Redis 实现的分布式锁。
为了确保分布式锁的可用性,我们至少要确保锁的实现同时满足以下四个条件:
- 互斥性;
- 不会发生死锁,即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁;
- 具有容错性,只要大部分的 Redis 节点正常运行,客户端就可以加锁和解锁;
- 加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。
分布式锁实现方案:
- 数据库乐观锁;
- 通过 Redis 实现分布式锁,利用 Redis 的 setnx 命令来实现分布式锁;
- 通过 Zookeeper 实现分布式锁,利用 Zookeeper 的顺序临时节点实现分布式锁和等待队列;
优缺点:
分布式锁 | 优点 | 缺点 |
---|---|---|
Redis | set 和 del 指令的性能较高。 | 1、实现复杂,需要考虑超时、原子性、误删等情况; 2、没有等待的队列,只能在客户端自旋来等锁,效率低下。 |
Zookeeper | 1、有封装好的框架,容易实现; 2、有等待锁的队列,大大提升抢锁效率。 | 添加和删除节点性能较低。 |
通过 Redis 实现分布式锁的流程图: