• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

如何设计一个秒杀系统

极客笔记 Geekerstar 9个月前 (08-05) 311次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

如何设计一个秒杀系统

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

主要做到以下两点:

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

常用的系统分层结构:


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

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

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

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

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

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

总结

1、如果流量巨大,导致各个层的压力都很大可以适当的加机器横向扩容。如果加不了机器那就只有放弃流量直接返回失败。快速失败非常重要,至少可以保证系统的可用性。

2、业务分批执行:对于下单、付款等操作可以异步执行提高吞吐率。

3、主要目的就是尽量少的请求直接访问到 DB。


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:如何设计一个秒杀系统
喜欢 (0)
[247507792@qq.com]
分享 (0)
Geekerstar
关于作者:
本站技术支持

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00