背景
2012年阿里巴巴研发的流量治理组件,核心功能流控、容错
有什么功能
流量控制
流量控制
网关控制
黑白名单
熔断降级
熔断
保护分布式系统防止因为调用下有服务时产生故障或者请求超时等异常影响上游服务,使用熔断方案,类似断路器,一旦达到异常或超时规则阈值,则会断开链接,一定时间后重新连接
降级
分布式服务中,当负载过多或者资源不足时,防止大量请求累积消耗资源,拖垮核心服务,当触发降级规则(一般是超过设置的资源负载),则会抛弃边缘服务的调用,节省资源。
实现原理—职责链模式(做什么)
职责链模式简介
请求沿着处理者链进行发送,每个处理者都可以对请求进行处理,或者将台传递给恋上的下一个 处理者
特点
每个处理者都可以处理请求
每个处理者都必须有下一个处理者的引用
优点
- 解耦:请求的发送者和处理者解耦
- 简化:简化对象,对象可以不知道链的结构
- 灵活:增加给对象指派指责的灵活性,可改变链的顺序,动态新增或删除
缺点
可能循环调用
可能链路太长,影响排错
场景
- 有多个对象可以处理同一个请求,运行时刻决定那个对象处理请求。
- 可动态指定一组对象处理请求。
sentinel框架
核心原理
Sentinel 中最核心的功能都是通过一套处理链(责任链)来实现,处理链中的每一个处理单元被称为一个 Slot。每个 Slot 执行完业务逻辑处理后,都会触发下一个节点的处理方法,如此往复直到最后一个Slot,由此就形成了sentinel的责任链。这里我们先简单地回顾一下各个 Slot 的职责:
- NodeSelectorSlot 负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级;
- ClusterBuilderSlot 则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;
- StatisticSlot 则用于记录、统计不同纬度的 runtime 指标监控信息;
- FlowSlot 则用于根据预设的限流规则以及前面 slot 统计的状态,来进行流量控制;
- AuthoritySlot 则根据配置的黑白名单和调用来源信息,来做黑白名单控制;
- DegradeSlot 则通过统计信息以及预设的规则,来做熔断降级;
- SystemSlot 则通过系统的状态,例如 load1 等,来控制总的入口流量;
特点
应用场景丰富
经历阿里巴巴十年双十一场景考验
丰富的开源生态
实时监控
类似组件
- Hystrix(Netflix Hystrix): Hystrix是Netflix开源的一种用于容错和故障处理的库。它提供了类似的功能,包括熔断、限流、降级和故障处理。Hystrix已经停止维护,但仍然广泛使用。
- Resilience4j: Resilience4j是一种用于容错和故障处理的Java库,具有类似于Hystrix的功能,但更加轻量级和模块化。它支持熔断、限流、重试等功能。
- Circuit: Circuit是Go语言中的一个库,用于实现断路器模式。它提供了熔断、限流和故障处理功能,适用于构建可靠的分布式系统。
- Prometheus: Prometheus是一种开源的监控和警报工具,用于监视应用程序的性能和状态。它可以帮助您收集和分析指标,并设置警报规则以便在问题发生时采取行动。
- Istio: Istio是一个用于微服务的服务网格平台,它提供了流量控制、故障注入、监控和安全性等功能。Istio的Envoy代理可以用于流量控制和故障处理。
- Zuul(Netflix Zuul): Zuul是Netflix开源的API网关,它可以用于路由、流量控制和故障处理。虽然主要用于API网关,但也可以用于一些类似的用例。
总结
sentinel 是流量整形,提升服务容错能力的组件