logo资料库

Sentinel官方中文文档.pdf

第1页 / 共58页
第2页 / 共58页
第3页 / 共58页
第4页 / 共58页
第5页 / 共58页
第6页 / 共58页
第7页 / 共58页
第8页 / 共58页
资料共58页,剩余部分请下载后查看
Sentinel: 分布式系统的流量防卫兵
1、快速上手
Sentinel 是什么?
详细文档
Quick Start
1.在应用中引入Sentinel Jar包
2.定义资源
3.定义规则
4.检查效果
5.启动 Sentinel 控制台
Bugs 和反馈
2、Sentinel简介
2.1 Sentinel 是什么
Sentinel 的历史
2.2 Sentinel 基本概念
资源
规则
2.3 Sentinel 功能和设计理念
2.3.1流量控制
1、什么是流量控制
2、流量控制设计理念
2.3.2熔断降级
1、什么是熔断降级
2、熔断降级设计理念
2.3.3系统负载保护
2.3.4Sentinel 是如何工作的
3、Sentinel技术路线
3.1 Overview
3.2 异步调用支持
3.3 热点限流
3.4 集群限流与 Service Mesh
3.5 监控标准化
3.6 Reactive 支持
3.7 更多适配(生态)
3.8 高版本 Java 适配
3.9 智能化
4、如何使用Sentinel
4.1 简介
4.2 定义资源
4.2.1抛出异常的方式定义资源
4.2.2返回布尔值方式定义资源
4.2.3判断限流降级异常
4.3 主流框架的适配
4.4 定义规则
4.4.1规则的定义
4.4.2流量控制规则 (FlowRule)
1、流量规则的定义
2、通过代码定义流量控制规则
4.4.3熔断降级规则 (DegradeRule)
4.4.4系统保护规则 (SystemRule)
4.4.5查询更改规则
4.5 定制自己的持久化规则
4.6 规则生效的效果
5、SentinelSentinel工作主流程
5.1 Overview
5.2 NodeSelectorSlot
5.3 ClusterBuilderSlot
5.4 StatisticSlot
5.5 FlowSlot
5.6 DegradeSlot
5.7 SystemSlot
6、Sentinel流量控制
6.1概述
6.2基于QPS/并发数的流量控制
6.2.1 并发线程数流量控制
6.2.2 QPS流量控制
6.3基于调用关系的流量控制
6.3.1 根据调用方限流
6.3.2 根据调用链路入口限流:链路限流
6.3.3 具有关系的资源流量控制:关联流量控制
7、Sentinel熔断降级
7.1概述
7.2示例
8、系统负载保护
8.1背景
8.2原理
8.3试验数据
1、触发限流之后,通过调节允许通过的入口请求数和系统负载的关系:
2、RT和load的关系
3、当下游系统好转之后,应用是否能够快速的自恢复
8.4 对阈值的依赖
8.5 改进点
9、实时监控
9.1 簇点监控
9.1.1获取簇点列表
9.1.2查询某个簇点的详细信息
9.1.3簇点调用者统计信息
9.2链路监控
9.3历史资源数据
9.3.1资源的秒级日志
9.3.2被拦截的秒级日志
9.3.3实时查询
10、动态规则扩展
10.1规则
10.2DataSource 扩展
10.2.1拉模式拓展
10.2.2推模式拓展
10.2.3注册数据源
10.3示例
10.3.1API 模式:使用客户端规则 API 配置规则
10.3.2拉模式:使用文件配置规则
10.3.3推模式:使用 Nacos 配置规则
10.3.4推模式:使用 ZooKeeper 配置规则
10.3.5推模式:使用 Apollo 配置规则
11、控制台
11.1 概述
11.2. 启动控制台
11.2.1 下载代码并编译控制台
11.2.2 启动
11.3. 客户端接入控制台
11.3.1 引入JAR包
11.3.2 配置启动参数
11.3.3 触发客户端初始化
11.4. 查看机器列表和监控
11.4.1 "机器列表"中显示机器
11.4.2 "簇点链路"中显示刚刚调用的资源
11.4.3 "实时监控"汇总资源信息
11.5. 规则管理及推送
11.5.1 规则管理
11.5.2 规则推送
12、注解支持
12.1@SentinelResource 注解
12.2配置
12.2.1AspectJ
12.2.2Spring AOP
13、主流框架的适配
13.1Web Servlet
13.2Dubbo
13.3Spring Cloud
13.4gRPC
13.5Apache RocketMQ
Sentinel: 分布式系统的流量防卫兵 1、快速上手 Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量 为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征:  丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景, 例如秒杀,即突发流量控制在系统容量可以承受的范围;消息削峰填谷;实时熔断 下游不可用应用,等等。  完备的监控功能: Sentinel 同时提供最实时的监控功能,您可以在控制台中看到接 入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。  简单易用的扩展点: Sentinel 提供简单易用的扩展点,您可以通过实现扩展点,快 速的定制逻辑。例如定制规则管理,适配数据源等。 Sentinel 分为两个部分:  核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同 时对 Dubbo / Spring Cloud 等框架也有较好的支持。  控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外 的 Tomcat 等应用容器。 详细文档 请移步 Wiki,查阅详细的文档、示例以及使用说明。 Please refer to README for README in English。
与 Sentinel 相关的生态(包括社区用户实现的扩展、整合、示例以及文章)可 以参见 Awesome Sentinel,欢迎补充! 如果您正在使用 Sentinel,欢迎在 这里 留言告诉我们您的使用场景,以便我们 更好地去改进。 Quick Start 下面的例子将展示应用如何三步接入 Sentinel。同时,Sentinel 也提供一个所见 即所得的控制台,可以实时监控资源以及管理规则。 1.在应用中引入 Sentinel Jar 包 注意: Sentinel JAR 包仅支持 Java 6 或者以上版本。 如果应用使用 pom 工程,则在 pom.xml 文件中加入以下代码即可: com.alibaba.csp sentinel-core x.y.z 如果您未使用依赖管理工具,请到 Maven Center Repository 直接下载 JAR 包。 2.定义资源 接下来,把需要控制流量的代码用 Sentinel API SphU.entry("HelloWorld") 和 entry.exit() 包围起来即可。在下面的例子中, 我们将 System.out.println("hello wolrd"); 作为资源,用 API 包围起来。参考 代码如下: public static void main(String[] args) { initFlowRules();
while (true) { Entry entry = null; try { entry = SphU.entry("HelloWorld"); System.out.println("hello world"); } catch (BlockException e1) { System.out.println("block!"); } finally { if (entry != null) { entry.exit(); } } } } 完成以上两步后,代码端的改造就完成了。 3.定义规则 接下来,通过规则来指定允许该资源通过的请求次数,例如下面的代码定义了资 源"hello world"每秒最多只能通过 20 个请求。 private static void initFlowRules(){ List rules = new ArrayList(); FlowRule rule = new FlowRule(); rule.setResource("HelloWorld"); rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // Set limit QPS to 20. rule.setCount(20); rules.add(rule); FlowRuleManager.loadRules(rules); } 完成上面 3 步,Sentinel 就能够正常工作了。 4.检查效果 Demo 运行之后,我们可以在日志 ~/logs/csp/metrics.log.xXXX 里看到下面的输 出: |--timestamp-|------date time----|--resource-|p |block|s |e|rt 1529998904000|2018-06-26 15:41:44|hello world|20|0 |20|0|0
1529998905000|2018-06-26 15:41:45|hello world|20|5579 |20|0|728 1529998906000|2018-06-26 15:41:46|hello world|20|15698|20|0|0 1529998907000|2018-06-26 15:41:47|hello world|20|19262|20|0|0 1529998908000|2018-06-26 15:41:48|hello world|20|19502|20|0|0 1529998909000|2018-06-26 15:41:49|hello world|20|18386|20|0|0 其中 p 代表通过的请求, block 代表被阻止的请求, s 代表成功通过 Sentinel 的 请求个数, e 代表用户自定义的异常, rt 代表平均响应时长。 可以看到,这个程序每秒稳定输出 "hello world" 20 次,和规则中预先设定的阈 值是一样的。 更详细的说明可以参考: 如何使用 更多的例子可以参考: Demo 5.启动 Sentinel 控制台 Sentinel 同时提供控制台,可以实时监控各个资源的运行情况,并且可以实时地 修改限流规则。 更多的信息请参考:控制台 Bugs 和反馈 反馈 bugs、相关问题或者讨论,请提交 GitHub Issues。 联系我们: sentinel@linux.alibaba.com 2、Sentinel 简介
2.1 Sentinel 是什么 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向 分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔 断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。 Sentinel 的历史    2012 年,Sentinel 诞生,主要功能为入口流量控制。 2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖 了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。 2018 年,Sentinel 开源。 2.2 Sentinel 基本概念 资源 资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如, 由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是 一段代码。在接下来的文档中,我们都会用资源来描述代码块。 只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大 部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。 规则 围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系 统保护规则。所有规则可以动态实时调整。
2.3 Sentinel 功能和设计理念 2.3.1 流量控制 1、什么是流量控制 流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而, 从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到 来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统 的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的 请求调整成合适的形状,如下图所示: 2、流量控制设计理念 流量控制有以下几个角度:  资源的调用关系,例如资源的调用链路,资源和资源之间的关系;  运行指标,例如 QPS、线程池、系统负载等;  控制的效果,例如直接限流、冷启动、排队等。
Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想 要的效果。 2.3.2 熔断降级 1、什么是熔断降级 除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。 由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致 请求发生堆积。这个问题和 Hystrix 里面描述的问题是一样的。 Sentinel 和 Hystrix 的原则是一致的: 当调用链路中某个资源出现不稳定,例如, 表现为 timeout,异常比例升高的时候,则对这个资源的调用进行限制,并让请 求快速失败,避免影响到其它的资源,最终产生雪崩的效果。 2、熔断降级设计理念 在限制的手段上,Sentinel 和 Hystrix 采取了完全不一样的方法。 Hystrix 通过线程池的方式,来对依赖(在我们的概念中对应资源)进行了隔离。这 样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换 的成本,还需要预先给各个资源做线程池大小的分配。 Sentinel 对这个问题采取了两种手段:  通过并发线程数进行限制 和资源池隔离的方法不同,Sentinel 通过限制资源并发线程的数量,来减少不稳 定资源对其它资源的影响。这样不但没有线程切换的损耗,也不需要您预先分配 线程池的大小。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的 直接影响就是会造成线程数的逐步堆积。当线程数在特定资源上堆积到一定的数 量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收 请求。
 通过响应时间对资源进行降级 除了对并发线程数进行控制以外,Sentinel 还可以通过响应时间来快速降级不稳 定的资源。当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接 拒绝,直到过了指定的时间窗口之后才重新恢复。 2.3.3 系统负载保护 Sentinel 同时对系统的维度提供保护。防止雪崩,是系统防护中重要的一环。当 系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应。 在集群环境下,网络负载均衡会把本应这台机器承载的流量转发到其它的机器上 去。如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会 导致这台机器也崩溃,最后导致整个集群不可用。 针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负 载达到一个平衡,保证系统在能力范围之内处理最多的请求。 2.3.4Sentinel 是如何工作的 Sentinel 的主要工作机制如下:  对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源 进行实时统计和调用链路分析。  根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提 供开放的接口,方便您定义及改变规则。 Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。  3、Sentinel 技术路线 3.1 Overview Roadmap 时间点: 版本 Milestone 主要特性
分享到:
收藏