首页 > 其他分享 >分布式系统【秒杀系统设计】

分布式系统【秒杀系统设计】

时间:2023-10-30 10:12:12浏览次数:31  
标签:请求 队列 系统 秒杀 消息 分布式系统 设计 填谷

一、场景

      秒杀活动属于临时高并发写请求,在活动即将开始之前,面临的是高并发的毒请求,因为客户会疯狂刷新活动页面了解内容。

二、采用策略

       大概策略有以下几种:缓存策略、

     2.1、缓存策略

       商品的数据可以放在缓存中,或者将静态资源放到CDN中(CDN加速技术)。减少对数据库的访问压力。

     2.2、消息队列【削峰填谷】

       用消息队列来存储提交的任务,RPC框架中,将请求写入队列,通过工作线程去处理。

       问:为何不用分库分表?

       答:分库分表会增加系统复杂性,还要坐数据迁移等。秒杀场景,高并发的写请求并非持续的,是非连续的,可能只有几秒或者几十秒就会结束,如果采用分库分表,得不偿失。

       故,可以将秒杀请求暂时写入存储在消息队列中,之后用业务服务器告知用户“秒杀进行中”等,等待释放系统资源后再去处理其他用户请求。

       具体就是部署N台队列处理程序,不断的消费消息队列中的任务,然后校验库存,之后下单操作等。用户请求时可以在消息队列中短暂堆积的,当库存为零,消息堆积的请求就可以全部释放。

    

       注意:秒杀过程不能长时间不给用户响应,只能短暂的延迟通知结果。写入流量的大小和数据库处理能力需要提前做好评估,最后根据不同量级决定部署的处理程序台数。

      关键字:削峰填谷

    2.3、消息队列【异步化机制】

      秒杀场景下,一个购买请求流程,是有主次之分的。次要流程不该和主要流程一起同步执行,会增加响应时间。比如主要流程为创建订单和扣减库存,次要流程发放优惠券和增加用户积分等操作就可以放到下单成功后异步处理。 

      

    2.4、消息队列【解耦】

          比如公司大数据团队有个需求,需要对秒杀活动进行统计数据,用以分析活动商品的受欢迎程度、用户满意度等相关指标。

         问:为何不使用传统HTTP或者RPC方式来同步调用?

         答:1、整个系统耦合度较高。如果大数据团队接口出问题,会影响我们的秒杀系统。

                2、如果大数据团队变更接口,秒杀系统还要响应的更改接口。

        消息队列的解耦:

                1、秒杀系统产生一条购买数据,我们先将全部数据发送到消息队列中。

                2、然后大数据团队自己订阅消息队列Topic。

                3、最后他们自己做数据处理方面的工作。

        如此,大数据团队的系统故障和接口变更就不会队秒杀系统造成影响,接口变更也不会相互影响,实现了系统解耦。    

           

 三、总结

        消息对垒的削峰填谷、异步处理、解耦在秒杀活动中起到了只管重要的作用。

  1. 削峰填谷可以削掉到达秒杀系统的峰值流量,让业务逻辑处理更加缓和自然;
  2. 异步处理可以简化整个业务流程的步骤从而提升系统性能;
  3. 解耦合可以将秒杀系统和大数据系统解耦开,这样彼此间的任何变更都不会影响到对方,提升系统整体的鲁棒性。

 

标签:请求,队列,系统,秒杀,消息,分布式系统,设计,填谷
From: https://www.cnblogs.com/xiaobaicai12138/p/17797168.html

相关文章

  • 设计模式实验四
    软件设计                 石家庄铁道大学信息学院 实验4:抽象工厂模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解抽象工厂模式的动机,掌握该模式的结构;2、能够利用抽象工厂模式解决实际问题。 [实验任务一]:人与肤色使用抽象工厂模......
  • 数据库 —— 图书管理系统设计
    问题:高版本数据库备份还原到低版本数据库不兼容问题?解决:高版本数据库生成低版本数据库对应SQL脚本,后者用SQL脚本创建数据库。 详见:http://www.360doc.com/content/21/0804/18/13237883_989521566.shtml ......
  • 2023-2024-1 20231309 《计算机基础与程序设计》第五周学习总结
    2023-2024-120231309《计算机基础与程序设计》第五周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第五周作业这个作业的目标作业正文2023-2024-120231309《计算机基础与程......
  • 2023-2024-1 20231324《计算机基础与程序设计》第五周学习总结
    2023-2024-120231309《计算机基础与程序设计》第五周学习总结这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业的要求在哪里1.学习《计算机科学概论》第6章并完成云班课测试;2.学习《C语言程序设计》第4章并完成云班课测试。作业正文本博客链接ht......
  • 2023-2024 -1 20231415 《计算机基础与程序设计》第六周学习总结
    这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP/这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#JXJC这个作业的目标学习计算机科学概论第6章并完成云班课测试,学习《C语言程序设计》第4章并完成云班课测试作业正......
  • 2023-2024-1 20231425 《计算机基础与程序设计》第五周周总结
      作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业的要求2022-2023-1计算机基础与程序设计第五周作业这个作业的目标学习《计算机科学概论(第7版)》第6章、《C语言程序设计》第4章作业正文 本周学习内容总结......
  • 学年(2023-2024-1)学号(20231311)《计算机基础与程序设计》第5周学习总结
    2023-2024-120231311《计算机基础与程序设计》第5周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2022-2023-1计算机基础与程序设计第五周作业这个作业的目标下载Pep/9虚拟机,学习机器语言与汇编语言,算法与伪代码等......
  • 2023-2024-1 20231325 《计算机基础与程序设计》第5周学习总结
    目录*作业信息*教材学习内容总结1.《计算机科学概论》第6章2.《c语言程序设计》第4章*基于AI的学习*学习心得*学习进度条作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业的要求在哪里1.学习《计算机科学概论》第6章并完成云......
  • 重学面向对象,体会设计模式
    先上图(学长今晚讲得好激情,就像哈佛大学cs50的老师~~~~)图一让你明白,在Java帝国,你有多么渺小 回忆一下学长讲课的思路~Driver这个类里面封装了很多各种各样的方法,包括接学生回家,包括开车的时速,里面包括了,司机本身的一个职责,以及车的一个功能,但问一个问题,如果今天司机的大巴......
  • 2023-2024-1 20231418 《计算机基础与程序设计》第五周周总结
     作业信息这个作业属于哪个课程2022-2023-1-计算机基础与程序设计这个作业的要求2022-2023-1计算机基础与程序设计第五周作业这个作业的目标学习《计算机科学概论(第7版)》第6章、《C语言程序设计》第4章作业正文lhttps://www.cnblogs.com/20231418txm/p/177966......