Sentinel 是什么?

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

Sentinel 具有以下特征:

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

Sentinel 的主要特性:

Sentinel 的开源生态:

Sentinel 分为两个部分:

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

Quick Start

1.1 公网 Demo

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

1.2 手动接入 Sentinel 以及控制台

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

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

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

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.7.2</version>
</dependency>

注意: 从 Sentinel 1.5.0 开始仅支持 JDK 1.7 或者以上版本。Sentinel 1.5.0 之前的版本最低支持 JDK 1.6。

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

STEP 2. 定义资源

接下来,我们把需要控制流量的代码用 Sentinel API SphU.entry("HelloWorld") 和 entry.exit() 包围起来即可。在下面的例子中,我们将 System.out.println("hello world"); 这端代码作为资源,用 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();}}}
}

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

STEP 3. 定义规则

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

private static void initFlowRules(){List<FlowRule> 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 就能够正常工作了。更多的信息可以参考 使用文档。

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 控制台文档 启动控制台,可以实时监控各个资源的运行情况,并且可以实时地修改限流规则。

详细文档

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

Please refer to README for README in English。

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

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

交流与反馈

Sentinel: 分布式系统的流量防卫兵 1相关推荐

  1. 介绍 spring Alibaba Sentinel: 分布式系统的流量防卫兵

    目录 一.Sentinel 是什么? 二.Sentinel 具有特征 三.下载和安装 一.Sentinel 是什么? Sentinel 是分布式系统的流量防卫兵,Sentinel 以流量为切入点,从流 ...

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

    前言 在 Spring Cloud 体系中,熔断降级我们会使用 Hystrix 框架,限流通常会在 Zuul 中进行处理,Zuul 中没有自带限流的功能,我们可以自己做限流或者集成第三方开源的限流框架 ...

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

    sentinel sentinel base 服务编写 关键名词解释 sentinel base 官网: https://github.com/alibaba/Sentinel https://git ...

  4. SpringCloud(十二)SpringCloudAlibaba Sentinel 分布式系统的流量防卫兵

    文章目录 一.Sentinel是什么? 1.1 Sentinel 具有 以下特性 二.Sentinel 使用 2.1 Sentinel 安装. 2.2 创建 `sgg-alibaba-sentinel ...

  5. sentinel分布式系统的流量防卫兵

    首先在根目录下开启cmd黑窗口启用jar文件 java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproj ...

  6. 分布式系统的流量防卫兵Sentinel-入门指南

    1.介绍 欢迎来到 Sentinel 的世界!这篇新手指南将指引您快速入门 Sentinel. Sentinel: 分布式系统的流量防卫兵 1.1 Sentinel 是什么? 随着微服务的流行,服务和 ...

  7. 3 - 分布式系统的流量防卫兵:Sentinel

    Java工程师的进阶之旅 学习 SpringCloud2 这一篇就够了 1 - SpringCloud Alibaba 介绍 2 - 服务注册与配置中心:Nacos 3 - 分布式系统的流量防卫兵:S ...

  8. 详解sentinel:分布式系统的流量防卫兵

    目录 sentinel是什么 sentinel具有以下特征 丰富的应用场景 完备的实时监控 广泛的开源生态 完善的SPI扩展点 sentinel的主要特性 下载安装 控制台 应用接入 pom文件 ap ...

  9. Sentinel:分布式系统的流量防卫兵 | Spring Cloud 19

    一.Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.流量路由.熔断降级.系统自适应过载保护.热点流量防护等多个维度保护 ...

最新文章

  1. 动软发布微信营销服务系统,微信商城系统!
  2. hadoop 集群:物理机突然间ping不同虚拟机
  3. git push前请先git pull
  4. oracle中偏移,怎么对相同的坐标点偏移?
  5. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]49.描述在IPsec和TLS后的基本想法
  6. ubuntu开机时网络图标不见了且不能上网
  7. iis同时运行django和php,使用Django同时运行UWSGI和ASGI
  8. 视频内容理解核心技术解密:Partial re-ID 在成片体检中的技术实践
  9. mysql语法错误文件_使用logstash同步MySQL的数据时,在jdbc查询sql文件时报sql语法错误,sql文件是navicat生成的...
  10. 定时备份windows机器上的文件到linux服务器上的操作梳理(rsync)
  11. Atitit bootsAtitit bootstrap布局 栅格.docx目录1. 简述container与container-fluid的区别 11.1.1. 在bootstrap中的布局
  12. oracle设置口令期限,[20180316]改变oracle用户口令时限.txt
  13. GB28181国标协议
  14. k叉树的性质_相关树及性质
  15. as打开时出现The environment variable JAVA_HOME (with The value of C:\Java\jdk1.8.0_101\bin) does not poin
  16. 应试教育---幸好我们还有一张考卷
  17. 小米米家打印机,打印状态提示出错无法正常打印,怎么办?
  18. 科学论文写作工具TEX/LaTEX/CTEX
  19. max9286 四合一_美信推出GMSL四通道解串器MAX9286
  20. 【GPGPU】新秀 --- 沐曦集成电路(上海)有限公司

热门文章

  1. vim 使用 surround 批量添加 引号
  2. C++继承中的访问级别
  3. delete语句与reference约束冲突怎么解决_mysql update语句和原数据一样会更新么
  4. java编程代码大全_掌握Java编程技巧,代码重构
  5. python在什么系统中开发_Python虚拟开发环境,怎样才能在系统中创建
  6. 磁共振线圈分类_磁共振硬件(二)主磁体分类
  7. WebView 加载javaScript
  8. java wav 波形_java读取wav文件(波形文件)并绘制波形图的方法
  9. swap 将硬盘变内存
  10. mysql set bulk_insert_buffer_size