当前位置: 首页 > 后端技术 > Java

关于限流算法优缺点的思考

时间:2023-04-01 18:30:57 Java

时间窗口(fixedwindow)将请求总数限制在一个固定的时间范围内,达到请求总数后服务就会降级。优点可以精确控制各个时间段的整体性能,防止服务崩溃措施,防止在时间段的临界点突然出现大流量。很可能大量的请求会在时间段的交界处直接打降级,影响后续的服务,比如每分钟允许100个请求,00:00:00~00:00:30有40个请求,那么00:00:31~00:01:00允许60个请求,而在00:00:31如果在~00:01:00有50个请求,则在00:01:01~00:01:30允许50个请求。优势时间区间滑动统计,剩余表现可以留到后半段时间。它可以防止在关键时间点崩溃的问题。缺点是不能流畅的控制请求流。它只能控制一段时间内的请求总量。从宏观上看,请求数在时间轴上的波形可能会出现较大的波动。漏斗算法维护一定数量的请求。空间,以稳定的速度处理请求,当漏斗中累积的请求数超过最大值时开始拒绝请求。优势始终以统一的速度处理请求,确保服务稳定性。缺点无法应对突发流量。由于处理速度恒定,当大量请求到达时,用户等待时间长,用户体验差。令牌桶算法维护一定数量的令牌。系统定时生成令牌放入桶中。与漏斗算法相比,处理请求的优势在于支持突发大流量。预生成的token可以瞬间拿走,然后匀速处理请求。既能支持高并发场景,又能流畅控制流量。大部分业务场景都会用到这个方案,用户体验要好一些,令牌桶的数量,生成的速度需要根据以往的系统性能和用户习惯等经验的积累来判断