学MQ的时候,经常会有人拿秒杀这个场景去介绍流量削峰。这很好理解,将请求放到一个中转站去暂存,虽然生产者生产很快,但消费者可以慢慢去中转站获取。
关于限流,之前一直以为限流的思想类似MQ,不过是内存中的MQ,今天看了几种限流算法,发现限流和流量削峰有相似也有不同。
MQ的思想是用空间换时间差,生产者-消费者模型。
限流有几种算法:固定窗口算法、滑动窗口算法、漏桶算法、令牌桶算法。其中固定窗口、滑动窗口算法基于时间片流量控制,而漏桶和令牌桶算法与MQ的生产者-消费者-推拉模型相似。但是不能用空间换时间差相似的词来形容这两种算法,想想用空间整流不知道合不合适。
另外限流算法在限流过程中超过阈值会存在流量丢失的情况,MQ的流量丢失跟存储空间、持久化机制、消息投递的可靠性有关。
对于限流算法,我想关于流量丢失,应该也可以做出一些丢失的处理机制。