在学习一个新技术或新框架时,建议先查看其官方文档,以获得对其形成一个整体的认识。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-core
    Sentinel 核心模块,实现限流、熔断等基本能力。

  • sentinel-dashboard
    Sentinel 可视化控制台,提供基本的管理界面,配置限流、熔断规则等,展示监控数据等。

  • sentinel-adapter
    Sentinel 适配,Sentinel-core 模块提供的是限流等基本API,主要是提供给应用自己去显示调用,对代码有侵入性,故该模块对主流框架进行了适配,目前已适配的模块如下:

    • sentinel-apache-dubbo-adapter
      对 Apache Dubbo 版本进行适配,这样应用只需引入 sentinel-apache-dubbo-adapter 包即可对 dubbo 服务进行流控与熔断,大家可以思考会利用 Dubbo 的哪个功能特性。

    • sentinel-dubbo-adapter
      对 Alibaba Dubbo 版本进行适配。

    • sentinel-grpc-adapter
      对 GRPC 进行适配。

    • sentinel-spring-webflux-adapter
      对响应式编程框架 webflux 进行适配。

    • sentinel-web-servlet
      对 servlet 进行适配,例如 Spring MVC。

    • sentinel-zuul-adapter
      对 zuul 网关进行适配。

  • sentinel-cluster
    提供集群模式的限流与熔断支持,因为通常一个应用会部署在多台机器上组成应用集群。

  • sentinel-transport
    网络通讯模块,提供 Sentinel 节点与 sentinel-dashboard 的通讯支持,主要有如下两种实现。

    • sentinel-transport-netty-http
      基于 Netty 实现的 http 通讯模式。

    • sentinel-transport-simple-http
      简单的 http 实现方式。

  • sentinel-extension
    Sentinel 扩展模式。主要提供了如下扩展(高级)功能:

    • sentinel-annotation-aspectj
      提供基于注解的方式来定义资源等。

    • sentinel-parameter-flow-control
      提供基于参数的限流(热点限流)。

    • sentinel-datasource-extension
      限流规则、熔断规则的存储实现,默认是存储在内存中。

    • sentinel-datasource-apollo
      基于 apollo 配置中心实现限流规则、熔断规则的存储,动态推送生效机制。

    • sentinel-datasource-consul
      基于 consul 实现限流规则、熔断规则的存储,动态推送生效机制。

    • sentinel-datasource-etcd
      基于 etcd 实现限流规则、熔断规则的存储,动态推送生效机制。

    • sentinel-datasource-nacos
      基于 nacos 实现限流规则、熔断规则的存储,动态推送生效机制。

    • sentinel-datasource-redis
      基于 redis 实现限流规则、熔断规则的存储,动态推送生效机制。

    • sentinel-datasource-spring-cloud-config
      基于 spring-cloud-config 实现限流规则、熔断规则的存储,动态推送生效机制。

    • 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 提供了很多种数据源的实现,例如 sentinel-datasource-zookeeper,这部分内容随着该专栏的陆续更新,将会对该机制进行介绍。

有道无术,术可成;有术无道,止于术

欢迎大家关注Java之道公众号

好文章,我在看❤️

Alibaba Sentinel 限流与熔断初探相关推荐

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

    温馨提示:源码分析 Alibaba Sentinel 专栏开始连载,本文展示如何学习一个全新的技术的方法.该专栏基于 1.7.0 版本. 在学习一个新技术或新框架时,建议先查看其官方文档, Senti ...

  2. Spring Cloud Alibaba 系统保护 - 限流与熔断:Sentinel 在项目中的最佳实践

    上一讲我们讲解了微服务的雪崩效应与如何基于 Sentinel 实现初步微服务限流,掌握了部署 Sentinel Dashboard与配置 Sentinel Core 客户端的技巧.本讲咱们继续 Sen ...

  3. Alibaba Sentinel限流功能

    以下文章来源方志朋的博客,回复"666"获面试宝典 前言 上周经历了合作方未按照约定在客户端进行缓存,以高QPS调用我这边某个接口的问题,当时带来的影响是接口RT变高,当时如果QP ...

  4. 1命名规则 sentinel_SpringCloud Gateway高阶之Sentinel限流、熔断

    享学特邀作者:老顾 头条号id:老顾聊技术 前言 为什么需要服务熔断和降级?微服务是当前业界的一大趋势,原理就是将单一职责的功能模块独立化为子服务,降低服务间的耦合,服务间互相调用.但是这样也会出现一 ...

  5. alibaba sentinel限流组件 源码分析

    如何使用? maven引入: <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>s ...

  6. SpringCloud Alibaba Sentinel限流详解 这一次别在错过

    点赞再看,养成习惯,微信搜索[牧小农]关注我获取更多资讯,风里雨里,小农等你,很高兴能够成为你的朋友. 项目源码地址:公众号回复 sentinel,即可免费获取源码 熔断规则 在上一篇文章中我们讲解了 ...

  7. SpringCloud Alibaba 实战之《限流与熔断:Sentinel 在项目中的最佳实践》

    上一讲我们讲解了微服务的雪崩效应与如何基于 Sentinel 实现初步微服务限流,掌握了部署 Sentinel Dashboard与配置 Sentinel Core 客户端的技巧.本讲咱们继续 Sen ...

  8. sentinel 限流熔断神器详细介绍

    一.限流熔断神器 sentinel 1.什么是 sentinel: 在基于 SpringCloud 构建的微服务体系中,服务间的调用链路会随着系统的演进变得越来越长,这无疑会增加了整个系统的不可靠因素 ...

  9. Sentinel限流熔断

    Sentinel作用:当我们 在系统负载过高时,可以通过Sentinel进行限流.降级.熔断三种措施来保护系统其提供了一个轻量级的控制台,提供机器发现,单机资源实时监控预计规则管理等功能. Senti ...

最新文章

  1. 根据Forms名找出其所归属的权限组
  2. 重要提醒--to 小爱
  3. android 电视关闭动画,Activity 展开和关闭动画
  4. 每天一道LeetCode-----给定字符串s和字符数组words,在s中找到words出现的位置,words内部字符串顺序无要求
  5. terminal services 找不到_电脑局域网中查看不到其他计算机或无法连接的解决办法...
  6. php火车订票系统设计论文,基于JSP的火车票订票系统 JSP146(毕业设计+论文)
  7. 帕特·基辛格被任命为英特尔CEO已有一年
  8. 矩池云上如何安装nvcc
  9. 浙江理工考研c语言程序设计,浙江理工大学C程序设计期末试卷A卷
  10. php寻仙记,寻仙记文字游戏完整实测源码 - 下载 - 搜珍网
  11. 数学建模层次分析法例题及答案_【数模】层次分析法 - 全国大学生数学建模竞赛(CUMCM) - 数学建模社区-数学中国...
  12. 【LeetCode - 247】中心对称数 II
  13. mysql alter table if exists_MySQL中的alter table命令的基本使用方法及提速优化
  14. centor 7英伟达显卡驱动安装
  15. antdesign 柱状图_你绝对想不到柱形图背后有这么多故事
  16. hexo建站之yilia主题diy
  17. MOS管安全工作区SOA及根据SOA选择MOS管
  18. java入门考点_java入门基础知识点总结
  19. 因特网是全球范围内的什么是计算机网络,因特网
  20. mouseenter事件java_从子元素输入父元素时,不会触发MouseEnter事件

热门文章

  1. 中考英语听说计算机考试满分,北京2018中考英语听说计算机考试注意事项
  2. c语言time_t转oletime,DateTimeFormatter可以格式化日期,但不能读取它自己的格式
  3. Retroifit原理
  4. mdb文件取消隐藏_webshellphp隐藏技巧
  5. 扩展Linux分区的一种方法
  6. 解决Redis之MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on d
  7. ubuntu安装python3、setuptools、ipython
  8. Nvidia Jetson TX2入门指南(白话版)
  9. MySQL命令:增删与改
  10. 移动端常用的四个框架