SpringCloudAlibaba之Sentinel(一)-Sentinel的由来

简介: SpringCloudAlibaba之Sentinel(一)-Sentinel的由来

本文已收录在Github关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都架构师,多家大厂后端一线研发经验,在分布式系统设计、数据平台架构和AI应用开发等领域都有丰富实践经验。

各大技术社区头部专家博主。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化
  • 活动&券等营销中台建设
  • 交易平台及数据中台等架构和开发设计
  • 车联网核心平台-物联网连接平台、大数据平台架构设计及优化
  • LLM Agent应用开发
  • 区块链应用开发
  • 大数据开发挖掘经验
  • 推荐系统项目

目前主攻市级软件项目设计、构建服务全社会的应用系统。

参考:

1 Sentinel是啥?

随微服务流行,服务和服务之间稳定性越来越重要。Sentinel是面向分布式服务架构的轻量级流量控制框架,以流量为切入点,从流控、熔断降级、系统负载保护等多维保障服务稳定性。

曾经:

如今:

可完成替代 Netflix-hystrix。

2 发展

  • 2012年,Sentinel诞生,主要功能为入口流量控制
  • 2013-2017年,Sentinel在阿里内部迅速发展,成为基础技术模块,覆盖所有核心场景,积累了大量流量归整场景及生产实践
  • 2018年,Sentinel 开源

3 雪崩效应

系统依赖的某个服务发生延迟或故障,数秒内导致所有应用资源(线程,队列等)被耗尽,造成雪崩效应。

cascading failure(级联失效 / 级联故障):

4 容错方案

4.1 超时模式

最常见的容错模式。

常见的有设置网络连接超时时间,一次RPC的响应超时时间。

主要解决当依赖服务出现建立网络连接或响应延迟,不用无限等待的问题,调用方可根据预置超时时间中断调用,及时释放关键资源,如Web容器的连接数,数据库连接数等,避免整个系统资源耗尽,而出现拒绝对外提供服务。

思想

只要释放够快,我就没那么容易挂~

4.2 限流(Rate Limiting/Load Shedder)

常用于下游服务容量有限,但又怕出现突发流量猛增(如爬虫,大促)而导致下游服务因压力过大而拒绝服务的场景。常见的限流模式有控制并发和控制速率

  • 一个是限制并发的数量
  • 一个是限制并发访问的速率。

思想

我就一碗饭量,给多了我也不吃!

4.3 舱壁隔离(Bulkhead Isolation)

造船行业使用此类模式,利用舱壁将不同船舱隔离,这样若一个船舱破了进水,只损失一个船舱,其它船舱可不受影响。借鉴造船行业经验,这种模式也在软件行业使用。

线程隔离(Thread Isolation)就是这种模式的常见场景。如系统A调用ServiceB、C、D三个远程服务,且部署A的容器一共有120个工作线程,采用线程隔离机制,可以给对B、C、D的调用各分配40个线程。当B慢了,给B分配的40个线程因慢而阻塞并最终耗尽,线程隔离可保证给C、D分配的80个线程不受影响。若无这种机制,当B慢时,120个工作线程会很快全部被对B的调用吃光,整个系统会全部慢下来,甚至系统停止响应。

实践经常遇到,如某接口由于数据库慢查询,外部RPC调用超时导致整个系统的线程数过高,连接数耗尽。可用舱壁隔离模式,为这种依赖服务调用维护一个小的线程池,当一个依赖服务由于响应慢导致线程池任务满的时候,不影响其他依赖服务的调用,缺点:增加线程数。

思想

别把鸡蛋放在一个篮子!

4.4 断路器模式

断路器三态转换:

思想

监控 + 开关

5 Sentinel VS hystrix

特性 Sentinel Hystrix
隔离策略 信号量隔离 线程池隔离/信号量隔离
熔断降级策略 基于响应时间或失败比率 基于失败比率
实时指标实现 滑动窗口 滑动窗口(基于 RxJava)
规则配置 支持多种数据源 支持多种数据源
扩展性 多个扩展点 插件的形式
基于注解的支持 支持 支持
限流 基于 QPS, 支持基于调用关系的限流 有限的支持
流量整形 支持慢启动、匀速器模式 不支持
系统负载保护 支持 不支持
控制台 开箱即用, 可配置规则、查看秒级监控、机器发现等 不完善
常见框架的适配 Servlet、Spring Cloud、Dubbo、gRPC 等 Servlet、Spring Cloud、Netflix

参考:

目录
相关文章
|
SpringCloudAlibaba 监控 Dubbo
SpringCloudAlibaba篇(三)整合Sentinel(限流、流量整形、熔断降级、系统负载保护、热点防护,分布式服务架构的高可用流量防护组件)
SpringCloudAlibaba篇(三)整合Sentinel(限流、流量整形、熔断降级、系统负载保护、热点防护,分布式服务架构的高可用流量防护组件)
SpringCloudAlibaba篇(三)整合Sentinel(限流、流量整形、熔断降级、系统负载保护、热点防护,分布式服务架构的高可用流量防护组件)
|
SpringCloudAlibaba 监控 Dubbo
SpringCloudAliBaba篇 之 Sentinel:图解分布式系统的流量防卫兵(上)
SpringCloudAliBaba篇 之 Sentinel:图解分布式系统的流量防卫兵
866 0
|
缓存 SpringCloudAlibaba Linux
SpringCloudAliBaba篇 之 Sentinel:图解分布式系统的流量防卫兵(下)
SpringCloudAliBaba篇 之 Sentinel:图解分布式系统的流量防卫兵
230 0
|
存储 SpringCloudAlibaba NoSQL
九.SpringCloudAlibaba极简入门-持久化Sentinel限流规则
在前两章节我们学习了通过[Sentinel的限流和熔断机制](https://blog.csdn.net/u014494148/article/details/105484410)来保护微服务,提高系统的可用性,但是有一个问题,我们在Sentinel配置了限流,熔断策略,默认情况下Sentinel的数据是基于内存存储,当客户端断开,或者Sentinel重启数据就会丢失,这不是我们愿意看到的。所有我们需要的Sentinel做数据持久。 Sentinel 中支持5种持久化的方式:file、redis、nacos、zk和apollo,本片文章针对于Nacos进行持久化配置。
|
SpringCloudAlibaba Java 开发者
SpringCloudAlibaba之Sentinel简单使用
高频率刷新,可以看到hello world、fallback、block handler都会出现。
315 0
|
SpringCloudAlibaba Rust 监控
SpringCloudAlibaba:5.1Sentinel的基本使用
SpringCloudAlibaba:5.1Sentinel的基本使用
333 0
|
SpringCloudAlibaba Java Sentinel
十四.SpringCloudAlibaba极简入门-Sentinel对Gateway网关进行限流
服务网关在微服务架构中充当了请求访问入口的角色,是非常重要的一个部分,在高并发的系统中我们通常会在网关层通过流控降级等手段把多余的请求拒绝在外来防止微服务被高并发请求打垮,在之前我们有讨论过《服务网关Spring Cloud Gateway》和 《Sentinel流控》,一个是服务网关,一个是流控降级,本篇文章要讨论的是如何使用Sentinel对Gateway进行流控
|
SpringCloudAlibaba 负载均衡 Java
八.SpringCloudAlibaba极简入门-Sentinel兼容Feign进行服务熔断
Spring Cloud Alibaba是Spring Cloud的一个子项目,OpenFeign是Spring Cloud的客户端负载均衡器,使用Spring Cloud Alibaba依然可以很方便的集成OpenFeign,如果要使用OpenFeign作为服务客户端负载均衡,那么我们需要考虑OpenFeign开启Sentinel进行服务熔断降级。
|
SpringCloudAlibaba 双11 Sentinel
七.SpringCloudAlibaba极简入门-Sentinel熔断
在上一章节我们探讨了Sentinel的流控(限流)功能,Sentinel除了流控还提供了服务熔断和降级机制,服务之间的调用关系错综复杂,微服务的调用链上的某些服务资源不稳定(宕机,异常,超时)可能会导致可能请求的失败和请求的堆积,调用链产生连锁反应可能会导致整个微服务架构瘫痪。服务熔断降级机制是保障高可用的重要措施之一。
|
消息中间件 SpringCloudAlibaba 监控
六.SpringCloudAlibaba极简入门-Sentinel限流
限流 , 限制流量,这里的流量我们可以理解成请求数量,其实就是限制服务器的请求并发数量,为什么要这么做?如果不做限流,那么在大量并发请求下我们的服务器会慢慢的变慢然后顶不住压力而挂掉(类似堵车)。并不是说并发越大越好,有的时候我们的项目规模和业务决定了我们不需要那么大的并发性,当大量的并发请求访问到服务器时我们需要把部分请求拒绝在外,这个是流量限制 - 限流。 熔断机制在在《Spring Cloud 极简入门》中有详细的解释,熔断机制是对服务调用链路的保护机制,如果链路上的某个服务不可访问,调用超时,发生异常等,服务会进行发熔断,触发降级返回托底数据。简单理解就是当服务器不可访问,可以返回一