Sentinel

一、简介

随着微服务架构的流行,服务与服务之间交互的稳定性越来越重要。

当生产服务挂掉的时候,我们首先想到的是:激增流量、被其它服务拖垮、异常没处理。总之就是缺乏高可用防护和容错机制,尤其是针对流量的防护。

Sentinel是面向分布式服务架构的轻量级流量控制组件,以流量为切入点,从流量控制、熔断降级、自适应的系统保护等多个维度来保证系统的稳定性。

 

二、基本概念

sentinel-flow-index-overview-en

1、流量控制

客户端和服务端进行通信时,两方的速率并不一定相等,如果客户端某一时间内发来的请求过多,会导致服务端处理不过来。

这时,服务端只能把处理不过来的数据放到缓存区里。如果缓存区满了,客户端还在发送数据,服务端没法存放只能把收到的数据包丢掉,而大量的丢包造成大量的网络资源浪费。

所以,需要控制客户端的发送速率,让发送和接收处于一定的平衡。这种控制手段,也就是流量控制。

2、熔断降级

熔断

在股市交易中的熔断是,当行情波动过大,终止交易15分钟,如果开盘后继续大幅波动,触发熔断机制,当天终止交易。

而程序中的熔断,是因为某个服务故障或者异常引起的,类似于股市熔断,当触达某个异常条件,直接熔断整个服务,而不是一直等到这个服务的响应。也是为了防止连锁反应造成雪崩,而采用的一种保护措施。

一般在接口响应速度很慢、超时的时候,触发熔断。

降级

当服务器压力剧增的时候(系统压力过载),根据当前业务情况及流量,对一些服务和页面进行有策略的降级。以此来缓解服务器资源的的压力,保证核心业务的正常运行。“弃车保帅”的思想。

自动降级:1)通过配置的请求超时时间;2)不稳定API调用次数达到一定数量;3)所调用的远程服务出现故障

人工降级:1)秒杀场景;2)双十一大促场景

3、系统自适应保护

对系统维度进行保护,当系统负载很高时,如果仍持续让请求进入,可能会导致系统崩溃,无法响应。

即使是集群环境,当把压力过载的服务机器上的流量转发到别的机器上,如果别的机器也处于过载状态,则有可能把这台机器直接搞崩溃,最后导致整个集群不可用。

Sentinel提供的保护机制,让系统的入口流量和系统的负载达到一个平衡,进而保证系统在能力范围之内处理最多的请求。

 

三、Hystrix和Sentinel的区别

Hystrix主要是以隔离和熔断为主的容错机制,超时或被熔断的调用将会快速失败,并可以提供 fallback 机制。用线程池隔离的方式,对资源进行完全的隔离,但是会引起大量的线程切换开销。性能并不是很高。

Sentinel侧重于多样化的流量控制,熔断降级,系统负载保护。是通过对并发线程数和服务的响应时间,来对流量进行控制和熔断降级,因此也就没有线程切换上的开销了,也不用预留线程池资源。性能更好。

 

四、使用示例

基于QPS限流

预热流控

并发控制

熔断降级(慢请求、请求报错率、请求报错数)

热点防护

 

sentinel使用步骤说明:

1、初始化

使用sentinel,需要在程序启动时对sentinel进行相关初始化配置。

2、配置规则

根据业务场景的要求来配置相应的规则。

3、埋点

通过sentinel的Entry()方法,将业务逻辑封装起来,也就是“埋点”。每个埋点都需要指定规则的资源名称(resource),代表触发了这个规则的调用或访问。