第一题主要是访问量在某个时间节点突然增大,避免服务的瘫痪,时时查询QPS并计算是否达到上限确实是可行的,但是有一个问题,定时任务怎么防止突然某个时间的增大,如果查询时间间隔太短,那么频繁的查询计算QPS计算是否会占用较大内存,浪费性能,而间隔时间太长,又没办法避免突然的访问量增大。 我查了些资料,有些想法,就是对不同模块的访问使用令牌桶,令牌桶本身就把访问量控制住,不去查询QPS,而是令牌桶的令牌分发完了启用拒绝策略,每次都去令牌桶里拿令牌访问请求才能通过,而令牌桶按照一定速率往里面添加令牌,因为桶里的令牌数量是限制固定的,所以突然时刻的访问量增大,不用去查询QPS,而是因为拿不到令牌而被拒绝。