对电商秒杀活动实现的学习总结

一、需要解决的几个问题

 

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 也会消失。  

 

以上内容是个学习整理,还有需多内容后续会进行一步完善。

 

 

 

    

上一篇:[小技巧]EF Core中如何获取上下文中操作过的实体


下一篇:Elasticsearch document id 生成方式