随着双 11, 春运抢票这种业务的存在, 分布式高并发成为了技术人员必须要面对的问题, 那么如果保证数据的准确性呢? 一般主流的方式就是加锁.
分布式锁一般有三种实现方式: 1. 数据库乐观锁; 2. 基于 Redis 的分布式锁; 3. 基于 ZooKeeper 的分布式锁.
首先, 为了确保分布式锁可用, 我们至少要确保锁的实现同时满足以下四个条件:
互斥性. 在任意时刻, 只有一个客户端能持有锁.
不会发生死锁. 即使有一个客户端在持有锁的期间崩溃而没有主动解锁, 也能保证后续其他客户端能加锁.
具有容错性. 只要大部分的 Redis 节点正常运行, 客户端就可以加锁和解锁.
解铃还须系铃人. 加锁和解锁必须是同一个客户端, 客户端自己不能把别人加的锁给解了.
具体的代码实现请看这篇详细的文章:
http://www.cnblogs.com/0201zcr/p/5942748.html
推荐一篇电商秒杀的架构思路, 这位作者写的太好了:
https://blog.csdn.net/bigtree_3721/article/details/72760538
秒杀架构划重点:
(1) 将秒杀系统单独部署, 甚至使用独立域名, 防止秒杀系统崩溃影响正常业务
(2) 页面内容静态化, 读多写少的接口做好缓存
(3) 将下单页面的 Url 作为随机数, 在秒杀开始的时候才能得到
(4) 前端控制请求发送
(5) 采用最少连接的负载均衡算法
(6) 拍下减库存比付款减库存用户体验更好一些
(7) 数据库采用乐观锁 (采用带版本号更新)
来源: http://www.bubuko.com/infodetail-2659991.html