![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
系统设计
文章平均质量分 88
宽宽卡溜
这个作者很懒,什么都没留下…
展开
-
基于信号量和令牌桶算法的限流
限流的三种算法限流主要有三种算法:信号量、漏桶算法和令牌桶算法。信号量限制的是并发、资源。令牌桶限制的是QPS。信号量Semaphore是一个计数信号量。常用于限制获取某资源的线程数量,可基于java的concurrent并发包实现。通过acquire()方法获取许可,该方法会阻塞,直到获取许可为止。通过release()方法释放许可。基于java的concurrent的实现@RestController@RequestMapping("/semaphore")pub转载 2021-09-06 11:49:47 · 476 阅读 · 0 评论 -
如何设计一个秒杀系统(完整版)
前言秒杀大家都不陌生。自2011年首次出现以来,无论是双十一购物还是 12306 抢票,秒杀场景已随处可见。简单来说,秒杀就是在同一时刻大量请求争抢购买同一商品并完成交易的过程。从架构视角来看,秒杀系统本质是一个高性能、高一致、高可用的三高系统。而打造并维护一个超大流量的秒杀系统需要进行哪些关注,就是本文讨论的话题。整体思考首先从高维度出发,整体思考问题。秒杀无外乎解决两个核心问题,一是并发读,一是并发写,对应到架构设计,就是高可用、一致性和高性能的要求。关于秒杀系统的设计思考,本文即基于此 3转载 2021-08-31 14:23:51 · 18015 阅读 · 1 评论 -
秒杀系统“减库存”设计的核心逻辑
如果要设计一套秒杀系统,那我想你的老板肯定会先对你说:千万不要超卖,这是大前提。如果你第一次接触秒杀,那你可能还不太理解,库存100件就卖100件,在数据库里减到0就好了啊,这有什么麻烦的?是的,理论上是这样,但是具体到业务场景中,“减库存”就不是这么简单了。例如,我们平常购物都是这样,看到喜欢的商品然后下单,但并不是每个下单请求你都最后付款了。你说系统是用户下单了就算这个商品卖出去了,还是等到用户真正付款了才算卖出了呢?这的确是个问题!我们可以先根据减库存是发生在下单阶段还是付款阶段,把减..转载 2021-08-31 14:12:24 · 495 阅读 · 0 评论