随记(纯属闲谈)-秒杀系统流量削峰之无损方案

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oytf10001/article/details/89763344

今天要介绍的无损的削峰方案主要有3个:

1.使用队列

     通过队列来控制瞬时访问峰值,队列两端其中一端用来承接访问者,另外一端将访问转交给后台系统。就如有大坝一样把洪峰阻击在上游,使得中下游有一个缓冲时间来疏导洪水。

2.答题

   答题其实有两方面的目的。一是为了防止秒杀器的存在,另外一方面则是通过将1s的访问量分发至2-10s,通过时间片的轮转来削峰。

3.分层过滤

    将访问量通过系统的层层过滤,使得最后真正执行的是写数据库的操作。将例如查询,校验等一些与最后写库的不是很紧密的操作尽量提前。

最后总结一下:

    队列缓冲方式更加通用,它适用于内部上下游系统之间调用请求不平缓的场景,由于内部系统的服务质量要求不能随意丢弃请求,所以适用消息队列能起到很好的削峰和缓冲作用。

    答题更适用于秒杀或者营销活动等应用场景,在请求发起端就控制发起请求的速度,因为越到后面无效请求也会越多,所以配合后面介绍的分层拦截的方式,可以更进一步减少无效请求对系统资源的消耗。

    分层过滤非常适合交易性的写请求,比如减库存或者拼车这种场景,在读的时候需要知道还有没有库存或者是否还有剩余空座位。但是由于库存和座位又是不停变化的,所以读的数据是否一定要非常准确呢?其实不一定,你可以放一些请求过去,然后在真正减的时候再做强一致性保证,这样既过滤一些请求又解决了强一致性读的瓶颈。

   不过,在削峰的处理方式上除了采用技术手段,其实还可以采用业务手段来达到一定效果,例如在零点开启大促的时候由于流量太大导致支付系统阻塞,这个时候可以采用发放优惠券、发起抽奖活动等方式,将一部分流量分散到其他地方,这样也能起到缓冲流量的作用。

  参考:https://yq.aliyun.com/articles/700672?spm=a2c4e.11154873.tagmain.78.48c13224rPuVJX

猜你喜欢

转载自blog.csdn.net/oytf10001/article/details/89763344