百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Sentinel 限流与熔断初探(技巧篇)

mhr18 2024-11-27 11:59 23 浏览 0 评论

温馨提示:源码分析 Alibaba Sentinel 专栏开始连载,本文展示如何学习一个全新的技术的方法。该专栏基于 1.7.0 版本。

在学习一个新技术或新框架时,建议先查看其官方文档以获得对其形成一个整体的认识。https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8D,

1、Sentinel 是什么 ?主要能解决什么问题?

按照官方的定义,Sentinel 意为分布式系统的流量防卫兵,主要提供限流、熔断等服务治理相关的功能。

服务的动态注册、服务发现是 SOA、微服务架构体系中首先需要解决的基本问题,服务治理是 SOA 领域又一重要课题,而 dubbo 框架只提供了一些基本的服务治理能力,例如限制服务并发调用数、配置合适的业务线程数量等,但熔断相关的功能就涉及的较少。

Sentinel 将作为 Dubbo 生态的重要一员,将集中解决服务治理相关的课题,服务限流与熔断又是服务治理首先要解决的课题。

那什么是限流与熔断呢?

限流:我们通常使用TPS对流量来进行描述,限流就是现在服务被调用的并发TPS,从而对系统进行自我保护。

熔断:就是当系统中某一个服务出现性能瓶颈时,对这个服务的调用进行快速失败,避免造成连锁反应,从而影响整个链路的调用。

2、限流与熔断的使用场景

限流还是比较好理解,例如一个项目在上线之前经过性能测试评估,例如服务在 TPS 达到 1w/s 时系统资源利用率飙升,与此同时响应时间急剧增大,那我们就要控制该服务的调用TPS,超过该 TPS 的流量就需要进行干预,可以采取拒绝、排队等策略,实现流量的削峰填谷。

还有一个场景,例如一下开放平台,对接口进行收费,免费用户要控制调用TPS,账户的等级不同,允许调用的TPS也不同,这种情况就非常适合限流。

那熔断的使用场景呢?我们首先来看一下如下的分布式架构。


例如应用A 部署了3台机器,如果由于某种原因,例如线程池 hold 住,导致发送到它上面的请求会出现超时而报错,由于该进程并未宕机,请求还是会通过负载算法请求出现故障的机器,出现整个1/3的请求出现超时报错,影响整个系统的可用性?也就是其中一台故障会对整个服务质量产生严重的影响,虽然是集群部署,但无法达到高可用性。那如何解决该问题?如果在调用方(API-Center) 对异常进行统计,发现发往某一台机器的错误数或错误率达到设定的值,就在一定的世界间隔内不继续发往该机器,转而发送给集群内正常的节点,这样就实现了高可用,这就是所谓的熔断机制。

有了上面的基本认识,接下来会进行一些阅读源码的准备,为后面的源码分析 Sentinel 打下坚实的基础。

3、Sentinel 源码结构

Sentinel 源码结构结构如图所示:

Sentinel 的核心模块说明如下:

  • sentinel-core
    Sentinel 核心模块,实现限流、熔断等基本能力。
  • sentinel-dashboard
    Sentinel 可视化控制台,提供基本的管理界面,配置限流、熔断规则等,展示监控数据等。
  • sentinel-adapter
    Sentinel 适配,Sentinel-core 模块提供的是限流等基本API,主要是提供给应用自己去显示调用,对代码有侵入性,故该模块对主流框架进行了适配,目前已适配的模块如下:
    1、sentinel-apache-dubbo-adapter
    对 Apache Dubbo 版本进行适配,这样应用只需引入 sentinel-apache-dubbo-adapter 包即可对dubbo 服务进行流控与熔断,大家可以思考会利用 Dubbo 的哪个功能特性。
    2、sentinel-dubbo-adapter
    对 Alibaba Dubbo 版本进行适配。
    3、sentinel-grpc-adapter
    对 GRPC 进行适配。
    4、sentinel-spring-webflux-adapter
    对响应式编程框架 webflux 进行适配。
    5、sentinel-web-servlet
    对 servlet 进行适配,例如 Spring MVC。
    6、sentinel-zuul-adapter
    对 zuul 网关进行适配。
  • sentinel-cluster
    提供集群模式的限流与熔断支持,因为通常一个应用会部署在多台机器上组成应用集群。
  • sentinel-transport
    网络通讯模块,提供 Sentinel 节点与 sentinel-dashboard 的通讯支持,主要有如下两种实现。
    1、sentinel-transport-netty-http
    基于 Netty 实现的 http 通讯模式。
    2、sentinel-transport-simple-http
    简单的 http 实现方式。
  • sentinel-extension
    Sentinel 扩展模式。主要提供了如下扩展(高级)功能:
    1、sentinel-annotation-aspectj
    提供基于注解的方式来定义资源等。
    2、sentinel-parameter-flow-control
    提供基于参数的限流(热点限流)。
    3、sentinel-datasource-extension
    限流规则、熔断规则的存储实现,默认是存储在内存中。
    4、sentinel-datasource-apollo
    基于 apollo 配置中心实现限流规则、熔断规则的存储,动态推送生效机制。
    5、sentinel-datasource-consul
    基于 consul 实现限流规则、熔断规则的存储,动态推送生效机制。
    6、sentinel-datasource-etcd
    基于 etcd 实现限流规则、熔断规则的存储,动态推送生效机制。
    7、sentinel-datasource-nacos
    基于 nacos 实现限流规则、熔断规则的存储,动态推送生效机制。
    8、entinel-datasource-redis
    基于 redis 实现限流规则、熔断规则的存储,动态推送生效机制。
    9、sentinel-datasource-spring-cloud-config
    基于 spring-cloud-config 实现限流规则、熔断规则的存储,动态推送生效机制。
    10、sentinel-datasource-zookeeper
    基于 zookeeper 实现限流规则、熔断规则的存储,动态推送生效机制。

4、在 IntelliJ IDEA 中运行 Sentine Demo

在 sentinel-demo 模块下提供了很多示例,Seninel 一开始是为 Dubbo 而生的,故我们选取一下 sentinel-demo-apache-dubbo 为本次演示的示例。

注意:该版本需要引入的 apache dubbo 版本需要修改为 2.7.2。

<dependency>

    <groupId>org.apache.dubbo</groupId>

    <artifactId>dubbo</artifactId>

    <version>2.7.2</version>

</dependency>

Step1:先启动 sentinel-dashboard,启动参数配置如下:

sentinel-demo-apache-dubbo 模块如下所示:

先启动服务提供者,其配置参数如下:

启动后,我们能看到消费者会出现报错,因为触发了限流,我们可以通过控制台查看接入应用的信息,例如输入:http://localhost:8080

部分截图如下:

可以在控制台动态添加限流、熔断等规则配置,然后接入的客户端将能在不启动应用的情况下生效。

默认情况下,sentinel-dashboard 中的规则是存储在内存中,重启后就会丢失,因此 Sentinel 提供了很多种数据源的实现,这部分内容随着该专栏的陆续更新,将会对该机制进行介绍。

相关推荐

Spring Boot 分布式事务实现简单得超乎想象

环境:SpringBoot2.7.18+Atomikos4.x+MySQL5.71.简介关于什么是分布式事务,本文不做介绍。有需要了解的自行查找相关的资料。本篇文章将基于SpringBoot...

Qt编写可视化大屏电子看板系统15-曲线面积图

##一、前言曲线面积图其实就是在曲线图上增加了颜色填充,单纯的曲线可能就只有线条以及数据点,面积图则需要从坐标轴的左下角和右下角联合曲线形成完整的封闭区域路径,然后对这个路径进行颜色填充,为了更美观...

Doris大数据AI可视化管理工具SelectDB Studio重磅发布!

一、初识SelectDBStudioSelectDBStudio是专为ApacheDoris湖仓一体典型场景实战及其兼容数据库量身打造的GUI工具,简化数据开发与管理。二、Select...

RAD Studio 、Delphi或C++Builder设计代码编译上线缩短开发时间

#春日生活打卡季#本月,Embarcadero宣布RADStudio12.3Athens以及Delphi12.3和C++Builder12.3,提供下载。RADStudio12.3A...

Mybatis Plus框架学习指南-第三节内容

自动填充字段基本概念MyBatis-Plus提供了一个便捷的自动填充功能,用于在插入或更新数据时自动填充某些字段,如创建时间、更新时间等。原理自动填充功能通过实现com.baomidou.myba...

「数据库」Sysbench 数据库压力测试工具

sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。目前支持的数据库有MySQL、Oracle和PostgreSQL。以...

如何选择适合公司的ERP(选erp系统的经验之谈)

很多中小公司想搞ERP,但不得要领。上ERP的目的都是歪的,如提高效率,减少人员,堵住财务漏洞等等。真正用ERP的目的是借机提升企业管理能力,找出管理上的问题并解决,使企业管理更规范以及标准化。上ER...

Manus放开注册,但Flowith才是Agent领域真正的yyds

大家好,我是运营黑客。前天,AIAgent领域的当红炸子鸡—Manus宣布全面放开注册,终于,不需要邀请码就能体验了。于是,赶紧找了个小号去确认一下。然后,额……就被墙在了外面。官方解释:中文版...

歌浓酒庄总酿酒师:我们有最好的葡萄园和最棒的酿酒师

中新网1月23日电1月18日,张裕董事长周洪江及总经理孙健一行在澳大利亚阿德莱德,完成了歌浓酒庄股权交割签约仪式,这也意味着张裕全球布局基本成型。歌浓:澳大利亚年度最佳酒庄据悉,此次张裕收购的...

软件测试进阶之自动化测试——python+appium实例

扼要:1、了解python+appium进行APP的自动化测试实例;2、能根据实例进行实训操作;本课程主要讲述用python+appium对APP进行UI自动化测试的例子。appium支持Androi...

为什么说Python是最伟大的语言?看图就知道了

来源:麦叔编程作者:麦叔测试一下你的分析能力,直接上图,自己判断一下为什么Python是最好的语言?1.有图有真相Java之父-JamesGoshlingC++之父-BjarneStrou...

如何在Eclipse中配置Python开发环境?

Eclipse是著名的跨平台集成开发环境(IDE),最初主要用来Java语言开发。但是我们通过安装不同的插件Eclipse可以支持不同的计算机语言。比如说,我们可以通过安装PyDev插件,使Eclip...

联合国岗位上新啦(联合国的岗位)

联合国人权事务高级专员办事处PostingTitleIntern-HumanRightsDutyStationBANGKOKDeadlineOct7,2025CategoryandL...

一周安全漫谈丨工信部:拟定超1亿条一般数据泄露属后果严重情节

工信部:拟定超1亿条一般数据泄露属后果严重情节11月23日,工信部官网公布《工业和信息化领域数据安全行政处罚裁量指引(试行)(征求意见稿)》。《裁量指引》征求意见稿明确了行政处罚由违法行为发生地管辖、...

oracle列转行以及C#执行语句时报错问题

oracle列转行的关键字:UNPIVOT,经常查到的怎么样转一列,多列怎么转呢,直接上代码(sshwomeyourcode):SELECTsee_no,diag_no,diag_code,...

取消回复欢迎 发表评论: