流量防护框架 Sentinel 初体验

本贴最后更新于 2274 天前,其中的信息可能已经事过境迁

背景

本文介绍的 Sentinel 是阿里巴巴最近开源的一个高可用防护的流量管理框架

特点

Sentinel 的特点是,本文简单归纳了一下,如下:

  1. 流量控制:支持多种流控策略,如线程数 / QPS / RT / 异常
  2. 熔断降级:下游应用不可用时,支持实时熔断
  3. 系统负载保护:突发流量时,只放过系统可以承受的流量,拦截多余的流量
  4. 实时监控和控制台:通过 SpringBoot 开发控制台,支持单台和集群的实时监控

稳定性

Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,有阿里巴巴背书,所以可以放心的用。

Dubbo 生态

Dubbo 已经通过投票,进入了 Apache 基金会孵化器。

Sentinel 的适配器已经捐给了 Dubbo,可以在 Dubbo 中直接使用 Sentinel

活跃度

Sentinel 最近在全国各地举办 meetup,而且有钉钉群/微信群可以交流讨论,开发者非常活跃,版本更新也比较快。

初体验

仅仅需要三步,五分钟,不需要额外的依赖。

pom.xml

引入 Sentinel 的依赖

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

业务代码

将业务代码用 SphU 包起来,如

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

设置流控策略

流按策略和业务代码是分离的,如下:

	private static void initFlowRules() {
		List<FlowRule> rules = new ArrayList<FlowRule>();
		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);
	}

而且流控策略支持动态下发。这个本文还没有尝试。

运行效果

输出了 20 个 hello world,剩下的请求会被 block。

hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
block!
block!
block!
block!
block!
block!
block!

查看日志

Sentinel 在本地 ~/logs/csp 目录下,已经保存了一份运行日志。所以看到本地多了一个 logs 文件夹千万不要惊讶,我已经习惯了。

日志内容如下:
tail testSentinel.MainSentinel-3577-metrics.log.2018-09-01

|--timestamp-|------date time----|-resource-|p |block|s |e|rt
1535765758000|2018-09-01 09:35:58|HelloWorld|20|36859|20|0|1
1535765759000|2018-09-01 09:35:59|HelloWorld|20|111935|20|0|0

其中各列的含义

  • p: 通过的请求
  • block: 被阻止的请求
  • s: 成功处理的请求个数
  • e: 用户自定义的异常
  • rt: 平均响应时长

Sentinel 与 Hystrix 的对比

传统的熔断库是 Netflix Hystrix,我在前面也写过一篇 Hystrix 初体验(一): 原理

Sentinel 和 Hystrix 有什么异同呢?

本文偏使用,就不多介绍啦,有兴趣的可以看 Sentinel 与 Hystrix 的对比

后记

微服务的生态还在快速发展,对于我们使用者,多一个选择,总是好事情。

参考

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...