漏桶和令牌桶
漏桶主要目的是控制数据注入到网络中的速率,平滑网络上的突发流量.
令牌桶原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌,则拒绝服务.
漏桶由于速率恒定,不能应付突发rate.而令牌桶则可以在短时间应付突发rate.即短时间允许流量速率大于令牌生成速率.比如令牌产生速率为4/s,令牌桶上线为8,那第一秒没有请求,那第二秒就可以处理8个请求.这种允许突发的高峰的设计,更符合服务器的性能特性.毕竟平均最大qps和瞬间最大qps是不一样的.
sliding window
为了应对突发流量,在统计的时候,把时间分为更细个颗粒度,维护多个小时间段的计数器.从而避免突发流量.比如要求每分钟qps为100,如果用户在59分30秒的时候发送100个请求,又在0分30秒之前的时候又发100个请求,其实这时从59m30s到0m30s的时间内qps为200,这时候把统计的时间段分隔的更细,可以有效避免这种情况的发生.
Hystrix有两种隔离级别Thread/Semaphore
Thread提供一个线程池,一个请求使用一个线程,超过线程池大小的请求直接返回失败.
Semaphore限制并发资源.请求有自己的线程,通过Semaphore count来控制并发量.
Thread模式更消耗资源,高并发环境更适合用Semaphore.Semaphore模式是使用调用者的线程,也就是说没有完全隔离.Semaphore超时时,没办法停止.