一、需要解决的几个问题
1、防刷问题
(一)一定要是注册用户参与秒杀。
(二)系统生成GUID,存储到缓存中。
(三)给客户端返回秒杀的接口+GUID。
(四)验证GUID,如果合法通过,执行秒杀业务,删除GUID.
2、解决大并发问题
(一)暴力消峰 利用内存队列,如存100万个访问,超过了,直接返回客户秒杀结束。
(二)排队执行
(三)消息队列 一般集群形势出现 abbitmq、kafka 第三方组件实现 (后面有专门的学习笔记)
3、秒杀产品详情页的展示
(一)亿级流量三级缓存架构设计解决。
实现要解决缓存雪崩、缓存击穿、缓存穿透。
(二)静态化的技术 +nginx 解决。
(三)动静分离结合。
4、共享数据的处理
(一)秒杀库存处理
(二)超卖的现象的处理
(三)使用锁解决问题
(四)基本上分布式的形式开发
二、分布式锁的实现
1、数据实现分布式锁
如果系统 的访问不大,企业几万人用的管理系统,基本没有流量的网站,都可以使用。实现起相关简单
2、redis分布式锁
keylock
概念:
(1)死锁 如查锁不删除,其他线程就拿不到锁,就要产生死锁。
(2)超时机制 + 续命机制 (如要一个线程拿到锁处理不完,就要超时,超时后,还是没完成任务,就要继续处理) /* 这儿有点乱,可以自己百度一下*/
(3) 设计重入 机制 (时间片 因为每个一线程都会有执行的时间片, 不片时间不一定能完成整个任务,要判断是否完成,如果没有,同一线程直接执行)
(4)锁误删 A创建的锁,让B给删除了。
redis 分布式锁的不足
(1) 羊群效应
访问量大,会出现 羊群效应 ,带宽不足,网络卡。
redis 可实现高可用,但不能实现高可靠
3、Zookeeper 集群保证一致性
原理: 共享锁
第一步,请求全部保存 locks 如30万个秒杀, 把生成30万个记录。
第二步,对上面的集合进行排序
第三步,排序最小的获取锁,其他节点监视次小节点的删除事件
备注:如果session 失效,对应的lock 也会消失。
以上内容是个学习整理,还有需多内容后续会进行一步完善。