前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计一个秒杀系统

设计一个秒杀系统

作者头像
爱明依
发布2022-04-01 08:23:30
2120
发布2022-04-01 08:23:30
举报
文章被收录于专栏:爱明依

设计一个秒杀系统

具体实现参考 秒杀架构实践

主要做到以下两点:

  • 尽量将请求过滤在上游。
  • 尽可能的利用缓存(大多数场景下都是查多于写)。

常用的系统分层结构:

<div align="center"> <img src="https://ws4.sinaimg.cn/large/006tNc79ly1fmjw06nz2zj306f0fejrh.jpg" width=""/> </div>

针对于浏览器端,可以使用 JS 进行请求过滤,比如五秒钟之类只能点一次抢购按钮,五秒钟只能允许请求一次后端服务。(APP 同理)

这样其实就可以过滤掉大部分普通用户。

但是防不住直接抓包循环调用。这种情况可以最简单的处理:在Web层通过限制一个 UID 五秒之类的请求服务层的次数(可利用 Redis 实现)。

但如果是真的有 10W 个不同的 UID 来请求,比如黑客抓肉鸡的方式。

这种情况可以在服务层 针对于写请求使用请求队列,再通过限流算法(限流算法)每秒钟放一部分请求到队列。

对于读请求则尽量使用缓存,可以提前将数据准备好,不管是 Redis 还是其他缓存中间件效率都是非常高的。

ps : 刷新缓存情况,比如库存扣除成功这种情况不用马上刷新缓存,如果库存扣到了 0 再刷新缓存。因为大多数用户都只关心是否有货,并不关心现在还剩余多少。

总结

  • 如果流量巨大,导致各个层的压力都很大可以适当的加机器横向扩容。如果加不了机器那就只有放弃流量直接返回失败。快速失败非常重要,至少可以保证系统的可用性。
  • 业务分批执行:对于下单、付款等操作可以异步执行提高吞吐率。
  • 主要目的就是尽量少的请求直接访问到 DB
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设计一个秒杀系统
    • 总结
    相关产品与服务
    云数据库 Redis®
    腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档