首页 > 其他分享 >2 秒杀系统架构

2 秒杀系统架构

时间:2024-12-31 12:29:24浏览次数:8  
标签:缓存 架构 请求 系统 用户 秒杀 我们 页面

第一步 思考面临的问题和业务场景

秒杀系统面临的问题: 短时间内并发非常高,如果按照秒杀的并发做相应的承载会造成大量资源的浪费。第二解决超卖的问题。

第二步 思考目前的处境和解决方案

因为秒杀系统属于短时间内的高并发问题,我们不可能使用那么多的硬件资源去部署对应的承载。而且还有个问题,我们其实并卖不到那么多的商品,只是做一个商品促销的噱头吸引用户到我们的平台来,让他们知道我们的平台并记下我们的平台。

那么也就是说其实大部分用户买不到商品是正常行为,所以我们可以通过这个特性把大部分的用户在服务的上游就过滤掉,而不是公平的竞争有限的商品。基于这个思想我们对我们的设计进行一些优化。

  1. 用户在进行抢购前肯定是先打开页面,这是第一步。那么我们为了避免服务器资源被短时间大量的请求压垮,需要把页面静态化放到CDN上,减少服务器的压力
  2. 用户在到了秒杀的时间节点为了抢到商品肯定快速的点击页面,这个请求会使用到后台的服务,我们为了减少用户频繁的请求,在前端代码做一些控制,点击按钮后置灰不能多次的点击请求后台服务
  3. 用户在点击按钮无反应的情况下,可能会重写打开页面再次发起请求,可以利用页面缓存让用户在一段时间内打开的页面是缓存页面
  4. 用户打开页面时候,有些实时数据肯定是要最新的,要不然用户发现是假数据或者是缓存在浏览器和CDN上的时候,用户体验很差。比如像剩余库存这些数据,但是我们又不希望这些查询请求落到数据库,所以部分数据放在缓存中,减少数据库的压力(页面缓存也可以但是需要缓存的时间短,不能太长

当我们做了上面的工作之后,还是会有大量的请求涌入到后台服务。因为要解决超卖的问题,我们在买入操作的时候肯定是要给商品的数量加锁。如果请求并发太高,会造成redis分布式锁设置的失效时间失效,也会造成超卖的问题。

我们可以在购买商品,锁库存数量之前再过滤掉一部分请求。例如我们用不加锁的缓存下商品数量,当涌入的人数超过一定数量的时候比如超过商品库存的时候,或者商品库存N倍的时候,后面的请求就不会再进入到后面的处理逻辑。

我们在一个用户点击购买时,就给用户数量+1,超过一定数量就不让后面的人进入。这个时候有个问题,就是我们的缓存并未加锁,比如我商品库存是100件,由于未加锁,这个时候可能同时涌入300个用户进入购买流程。其实这个问题很容易解决,我们在这300个人进入购买流程后再加分布式锁,这个时候就能保证加锁的redis不会处问题。

上面的思想基本上是基于把用户进入到购买流程前尽量过滤掉,到真正购买的流程后其实没有那么多的竞争压力,对服务器的压力也减小很多。上面我们用到了很多缓存策略,我们还需要考虑缓存穿透的问题,雪崩的问题等等。这些细节我们在后面的文章中再做讨论,我们接着讲后面的设计

第三 不怕一万就怕万一,我们对系统的可用性做到尽量的好

假如我们在秒杀系统中有一些关键的点没考虑到,秒杀系统崩了。结果影响到其他正常的服务怎么办?

我们的解决方案是隔离。把秒杀系统的服务和正常的服务隔离开。我们知道秒杀活动是需要商家参与的,当商家加入秒杀活动的时候,我们在秒杀服务建立和正常业务同样的库表结构,商家参与秒杀的商品数量等信息同步到秒杀系统的库中,这样可以做到完全的物理隔离,即时秒杀系统崩了,其他的业务也能正常运行。

以上是秒杀服务设计中比较重要的几个点。具体的细节涉及到太多,我们不做深究。

标签:缓存,架构,请求,系统,用户,秒杀,我们,页面
From: https://blog.csdn.net/yusongcao/article/details/144840639

相关文章

  • Flyte工作流平台调研(一)——整体架构
    简介Flyte是一个开源的工作流编排平台,专为机器学习和数据处理任务设计。它帮助用户定义、管理和运行复杂的数据工作流,确保数据的可重复性、可扩展性和高效性。Flyte的客户端,支持使用pythonsdk、Console、ctl和API等方式提交工作流,后台将工作流编译成多个任务链接成数据依赖......
  • [开题报告]宠物中心管理系统计算机毕业设计源码、研究背景、意义、目的、内容、方案和
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和生活水平的提高,宠物已成为许多家庭不可或缺的成员。宠物数量的激增,带动了宠物相关产业的蓬勃发展。然而,宠物中心作为宠物服务......
  • 随笔-处理器微架构-测量最大IPC
    目录固定cpu运行频率max_ipc_test.shLSD(LoopStreamDetector)arm固定cpu频率方式固定cpu运行频率我的测试环境cpu频率管理是intel_pstate:$lscpu|grep-ihzModelname:Intel(R)Core(TM)i5-10500CPU@3.10GHzCPUmaxMHz:......
  • 记一次 .NET某汗液测试机系统 崩溃分析
    一:背景1.讲故事上个月在社区写的文章比较少,一直关注的朋友应该知道那段时间被狗咬了以及一些琐事处理,所以手头上也攒了不少需要分享的案例,这段时间比较空闲,逐个给大家做个分享吧,刚好年后为新版的.NET高级调试训练营做案例储备,所以抓紧时间疯狂输出吧!这次生产事故的dump是训......
  • BLOB 和TEXT 有什么区别?思维导图 代码示例(java 架构)
    列对比运算符用于在SQL查询中比较两列或一列与一个值。SQL支持多种类型的对比运算符,如=、<>或!=(不等于)、<、<=、>和>=等等。这些运算符可以用来构建WHERE子句中的条件表达式,以筛选出符合特定条件的记录。在Java架构中,当你使用JDBCAPI与数据库交互时,你可以......
  • 2024年CRM系统灵活性与可拓展性盘点
    在当今数字化商业浪潮中,CRM系统已成为众多企业提升客户关系管理水平、增强市场竞争力的关键工具。对企业而言,CRM的灵活性与可扩展性至关重要。灵活性使得CRM系统能够贴合企业独特的业务流程和运营模式,快速响应不断变化的市场需求和内部管理调整,并且允许CRM集成其他系统,让数据......
  • 车身舒适系统HIL仿真测试解决方案
    概述    车身舒适控制系统是指为驾乘人员提供舒适性控制的装置,包括车内外照明控制、中央门锁、电动窗机、智能雨刮器、无钥匙系统、电动转向柱、电动座椅、辅助加热系统、智能空调器等,有着开关及传感器种类繁多、负载及执行器样式各异、硬件设计高冗余、高集成度、软件版......
  • 使用websocket制作一个简易的聊天系统
    创建一个简易的聊天系统前端部分使用WebSocket主要包含以下几个步骤:建立WebSocket连接处理连接打开事件发送消息接收并显示消息处理连接关闭和错误事件以下是一个简易的HTML和JavaScript示例,展示了如何使用WebSocket实现聊天系统的前端部分:HTML(index.html)<......
  • Deepseek V3 —— 6850亿参数混合专家(MoE)架构开源大模型!Deepseek V3全方位客观评测
    地址:https://www.youtube.com/watch?v=BnoMTeKxwBQ......
  • 如何彻底删除53kf系统代码并确保不影响其他功能?
    您好,根据您的描述,您希望彻底删除53kf系统的代码,并确保不会影响其他功能的正常运行。以下是详细的步骤和注意事项:备份现有数据:在进行任何删除操作之前,务必先备份所有重要数据。包括但不限于数据库、配置文件、静态资源等。这样即使出现问题,也可以迅速恢复到之前的稳定状态。......