Sentinel: 分布式系统的流量防卫兵

简介: 一个强大的流量控制组件,可实现微服务的可靠性、弹性和监控。(单一云微服务的高可以流控防护组件)

image.png

Sentinel: 分布式系统的流量防卫兵

Sentinel 是什么?

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 具有以下特征:

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。


Sentinel 的主要特性:

image.png

Sentinel 的开源生态:

image.png

Sentinel 分为两个部分:

  • 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。
  • 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。

Quick Start

1.1 公网 Demo

如果希望最快的了解 Sentinel 在做什么,我们可以通过 Sentinel 新手指南 来运行一个例子,并且能在云上控制台上看到最直观的监控和流控效果等。

若希望无侵入将已有服务接入 Sentinel 来快速体验 Sentinel 全方位的流量防护和可观测能力,推荐采用 Java Agent 方式快速、无侵入将应用接入到云上 AHAS 控制台来体验 Sentinel 的能力。

1.2 手动接入 Sentinel 以及控制台

下面的例子将展示应用如何三步接入 Sentinel。同时,Sentinel 也提供所见即所得的控制台,可以实时监控资源以及管理规则。

STEP 1. 在应用中引入Sentinel Jar包

如果应用使用 pom 工程,则在 pom.xml 文件中加入以下代码即可:

<dependency>

   <groupId>com.alibaba.cspgroupId>

   <artifactId>sentinel-coreartifactId>

   <version>1.8.2version>

dependency>

注意: Sentinel 仅支持 JDK 1.8 或者以上版本。

如果您未使用依赖管理工具,请到 Maven Center Repository 直接下载 JAR 包。

STEP 2. 定义资源

接下来,我们把需要控制流量的代码用 Sentinel API SphU.entry("HelloWorld")entry.exit() 包围起来即可。在下面的例子中,我们将 System.out.println("hello world"); 这端代码作为资源,用 API 包围起来(埋点)。参考代码如下:

publicstaticvoid 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();

   }

}

   }

}

完成以上两步后,代码端的改造就完成了。当然,我们也提供了 注解支持模块,可以以低侵入性的方式定义资源。

STEP 3. 定义规则

接下来,通过规则来指定允许该资源通过的请求次数,例如下面的代码定义了资源 HelloWorld 每秒最多只能通过 20 个请求。

privatestaticvoid initFlowRules(){

   List<FlowRule> rules =newArrayList<>();

   FlowRule rule =newFlowRule();

   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 就能够正常工作了。更多的信息可以参考 使用文档

STEP 4. 检查效果

Demo 运行之后,我们可以在日志 ~/logs/csp/${appName}-metrics.log.xxx 里看到下面的输出:

|--timestamp-|------date time----|-resource-|p |block|s |e|rt
1529998904000|2018-06-26 15:41:44|HelloWorld|20|0    |20|0|0
1529998905000|2018-06-26 15:41:45|HelloWorld|20|5579 |20|0|728
1529998906000|2018-06-26 15:41:46|HelloWorld|20|15698|20|0|0
1529998907000|2018-06-26 15:41:47|HelloWorld|20|19262|20|0|0
1529998908000|2018-06-26 15:41:48|HelloWorld|20|19502|20|0|0
1529998909000|2018-06-26 15:41:49|HelloWorld|20|18386|20|0|0

其中 p 代表通过的请求, block 代表被阻止的请求, s 代表成功执行完成的请求个数, e 代表用户自定义的异常, rt 代表平均响应时长。

可以看到,这个程序每秒稳定输出 "hello world" 20 次,和规则中预先设定的阈值是一样的。

更详细的说明可以参考: 如何使用

更多的例子可以参考: Sentinel Examples

STEP 5. 启动 Sentinel 控制台

您可以参考 Sentinel 控制台文档 启动控制台,可以实时监控各个资源的运行情况,并且可以实时地修改限流规则。

image.png

详细文档

请移步 官方网站,查阅详细的文档、示例以及使用说明。若您希望从其它熔断降级组件(如 Hystrix)迁移或进行功能对比,可以参考 迁移指南

Please refer to README for README in English。

与 Sentinel 相关的生态(包括社区用户实现的扩展、整合、示例以及文章)可以参见 Awesome Sentinel,欢迎补充!

如果您正在使用 Sentinel,欢迎在 Wanted: Who is using Sentinel 留言告诉我们您的使用场景,以便我们更好地去改进。

企业版 AHAS Sentinel 提供全自动托管、高可用的集群流量防护手段以及多样化的实时监控能力,支持 Java/Go/Nginx/Service Mesh 服务,详情请参考 AHAS Sentinel 文档

交流与反馈

您可以通过 GitHub Issues 反馈 bugs、提出建议或者参与讨论,也可以通过公共邮箱联系我们。

也欢迎加钉钉群参与相关讨论:

  • Sentinel 开源讨论群(1群,已满):21977771
  • Sentinel 开源讨论群(2群,已满):30150716
  • Sentinel 开源讨论群(3群):31076969

贡献

我们随时都欢迎开发者来贡献!详情请参考 开源贡献指南

如果您是初次贡献,可以先从 good first issue 中认领一个比较简单的任务来快速参与社区贡献。

谁在使用

以下是部分使用 Sentinel 的企业列表。若您的公司也在使用 Sentinel,欢迎在 这里 进行登记,告诉我们您的使用场景,以便我们更好地去改进 :)

image.png

image.png

相关文章
|
4月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
99 1
|
2月前
|
监控 Java 双11
Sentinel底层如何计算京东双十一线上系统实时QPS
【10月更文挑战第19天】随着电子商务行业的快速发展,双十一已成为全球最大的购物狂欢节。京东作为中国领先的电商平台,每年的双十一活动都会迎来巨大的流量高峰。为了保障系统在高并发情况下的稳定运行,京东采用了多种技术手段来应对。
45 0
|
5月前
|
监控 算法 Java
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之配置Sentinel的流量控制规则问题如何解决
|
6月前
|
监控 Java API
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
152 0
深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南
|
6月前
|
自然语言处理 监控 开发者
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
springCloud之Sentinel流量路由、流量控制、流量整形、熔断降级
148 0
|
7月前
|
SQL SpringCloudAlibaba Sentinel
【八】SpringCloud Alibaba之整合Sentinel(实现流量控制3)
【八】SpringCloud Alibaba之整合Sentinel(实现流量控制3)
106 2
|
7月前
|
SpringCloudAlibaba Java 测试技术
【六】SpringCloud Alibaba之整合Sentinel(实现流量控制)
【六】SpringCloud Alibaba之整合Sentinel(实现流量控制)
117 1
|
7月前
|
SpringCloudAlibaba Java 测试技术
【七】SpringCloud Alibaba之整合Sentinel(实现流量控制2)
【七】SpringCloud Alibaba之整合Sentinel(实现流量控制2)
99 1
|
7月前
|
SQL Go 数据库
【Sentinel Go】新手指南、流量控制、熔断降级和并发隔离控制
【2月更文挑战第12天】随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
311 0
|
7月前
|
监控 Dubbo Linux
【分布式流控组件 Sentinel 快速入门】——图文详解操作流程(下)
【分布式流控组件 Sentinel 快速入门】——图文详解操作流程(下)
180 0