Sentinel
是面向分布式服务架构的高可用流量控制组件。主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。
熔断降级
由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。
Sentinel
和Hystrix
的原则是一致的:当调用链路中某个资源出现不稳定,例如,表现为
timeout
,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败。
- 避免影响到其它的资源,最终产生雪崩的效果。
在限制的手段上,Sentinel
和 Hystrix
采取了完全不一样的方法。
Hystrix
通过 线程池 的方式,来对依赖进行了隔离。
- 这样做的好处是资源和资源之间做到了最彻底的隔离。
缺点是除了增加了线程切换的成本,还需要预先给各个资源做线程池大小的分配。
Sentinel
对这个问题采取了两种手段:
通过并发线程数进行限制:
- 当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。
- 堆积的线程完成任务后才开始继续接收请求。
通过响应时间对资源进行降级:
- 除了对并发线程数进行控制以外,
Sentinel
还可以通过响应时间来快速降级不稳定的资源。- 当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新恢复。
单机限流
限流受到机器数量的影响
负载不均衡
RPC
框架做的负载均衡是有同机房优先策略的,这就导致不同机器的流量可能会很不均衡。
集群限流
集群限流和单机限流最大的区别就是单机模式直接在本地生成,但是集群为了做全局调度,需要有一个统一的
Token
发放机制。