Sentinel 项目阅读

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

个人笔记总结:

  1. Sentinel 是为了微服务的稳定性而设计,和 Quota 的设计不同。虽然两者都有限流的能力。 Quota 是为了在弹性服务中,为了避免用户之间相互干扰而设计的。
  2. 核心是使用责任链设计模式
  3. 解耦:通过 SPI 的设计方式,使得各种逻辑做到完全的可插拔。多种 Slot 可以自定义需要的。对外提供的接口,可以根据配置的加载类决定使用 HTTP 或 Netty 的不同服务实现方式。
  4. 流控策略实现:核心点在于将所有的统计构建为树,类似资源树的定义。将数据统计放在树上,流控也基于此进行实现。规则策略定义为「目标 + 规则 + 策略」。
  5. 集群流控:
    1. 选择一个服务作为 Token Server 服务,集群统计与流控的逻辑都打到此服务上。
    2. 使用 Netty 进行客户端和服务端间通信,不实现选主逻辑,但提供接口来实现 Token Server 切换上。可以通过第三方组件来做选主逻辑。(组件或服务设计时,不用考虑将所有的逻辑都做全,只需要做好核心逻辑即可,其他可以使得第三方组件实现。这也是一种解耦。
    3. 单纯从系统保护的角度看,我们系统中是否一定需要集群流控。普通服务中,我们只需要做到单机服务保护即可,而当系统中存在中心的并且资源优先的中心化服务时,才需要进行集群流控的方式来限制对服务的压力。

架构

参考: