阿里巴巴宣布开源限流降级中间件——Sentinel

转载自  阿里巴巴宣布开源限流降级中间件——Sentinel

近日,阿里巴巴中间件团队宣布开源 Sentinel,并发布了首个社区版本v0.1.0。GitHub地址为:https://github.com/alibaba/Sentinel 。

关于Sentinel,阿里巴巴给出的描述比较简单:

A lightweight flow-control library providing high-available protection and monitoring (高可用防护的流量管理框架)。

Sentinel是什么?

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。说的简单一点,Sentinel是一个对资源调用的控制组件,主要涵盖限流、降级、负载保护等功能模块。

Sentinel于2012年诞生,第一个版本的主要功能为入口流量控制。在之后的6年里,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。

如今,阿里巴巴决定把Sentinel开源,可以说是对开源社区的一个重大贡献。

在开源的同时,阿里巴巴还宣布把 Sentinel 的适配器捐给了Dubbo,进一步完善了 Dubbo 生态。

在复杂的生产环境下可能部署着成千上万的 Dubbo 服务实例,流量持续不断地进入,服务之间进行相互调用。但是分布式系统中可能会因流量激增、系统负载过高、网络延迟等一系列问题,导致某些服务不可用,如果不进行相应的控制可能导致级联故障,影响服务的可用性,因此如何对流量进行合理的控制,成为保障服务稳定性的关键。随着Sentinel的开源,对于使用Dubbo构建微服务的企业和开发团队来说是一大福音。

关于Sentinel接入Dubbo的教程,可以参考:http://dubbo.incubator.apache.org

Sentinel 的特征

丰富的应用场景: Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀,即突发流量控制在系统容量可以承受的范围;消息削峰填谷;实时熔断下游不可用应用,等等。

完备的监控功能: Sentinel同时提供最实时的监控功能,您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

简单易用的扩展点: Sentinel提供简单易用的扩展点,您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理,适配数据源等。

Sentinel分为两个部分:

服务端基于Spring Boot开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。 服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

Sentinel 的功能

限流

当我们设计了一个函数,准备上线,这时候这个函数会消耗一些资源,处理上限是1秒服务3000个QPS,但如果实际情况遇到高于3000的QPS该如何解决呢?Sentinel提供了两种流量统计方式,一种是统计并发线程数,另外一种则是统计 QPS,当并发线程数超出某个设定的阈值,新的请求会被立即拒绝,当QPS超出某个设定的阈值,系统可以通过直接拒绝、冷启动、匀速器三种方式来应对,从而起流量控制的作用。

降级

接触过Spring Cloud、Service Mesh的同学,都知道熔断降级的概念。服务之间会有相互依赖关系,例如服务A做到了1秒上万个QPS,但这时候服务B并无法满足1秒上万个QPS,那么如何保证服务A在高频调用服务B时,服务B仍能正常工作呢?一种比较常见的情况是,服务A调用服务B时,服务B因无法满足高频调用出现响应时间过长的情况,导致服务A也出现响应过长的情况,进而产生连锁反应影响整个依赖链上的所有应用,这时候就需要熔断和降级的方法。Sentinel通过并发线程数进行限制和响应时间对资源进行降级两种手段来对服务进行熔断或降级。

塑形

通常我们遇到的流量具有随机性、不规则、不受控的特点,但系统的处理能力往往是有限的,我们需要根据系统的处理能力对流量进行塑形,即规则化,从而根据我们的需要来处理流量。Sentinel通过资源的调用关系、运行指标、控制的效果三个维度来对流量进行控制,开发者可以自行灵活组合,从而达到理想的效果。

负载保护

平时系统运行都没问题,但遇到大促的时候,发现机器的load非常高,这时候对系统的负载保护就显得非常重要,以防止雪崩。Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。需要注意的是,Sentinel在系统负载保护方面的判断机制是根据系统能够处理的请求,和允许进来的请求,来做平衡,而不是根据一个间接的指标(系统load)来做限流。因为我们最终追求的目标是在系统不被拖垮的情况下,提高系统的吞吐率,而不是load一定要到低于某个阈值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324939.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

张君豪同学谈学习

开学也快一个月了,也渐渐适应了学校生活,与同学一起非常的开心,老师讲的课也听得更认真了,回想一下,过去的几周,还是有不少的感想啊,于是我就粗略的总结一下。因为某些原因,导致晚开…

== 和 equals() 区别

一、回顾 的使用::运算符 1. 可以使用在基本数据类型变量和引用数据类型变量中 2. 如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等。(不一定类型要相同)如果比较的是引用数据类型变量:比较…

.NET Core 2.0 Preview2 发布汇总

前言 关于 ASP.NET Core 2.0 的新功能可以查看 Amazing ASP.NET Core 2.0。 这篇文章是 Priview2中的一些改进。 .NET Core 2.0 - Preview2 Azure 的改进Docker 镜像转移到了 Debian Stretch修复并支持 macOS High Sierra质量和性能的改进dotnet restore 将在 dotnet run,pu…

再有人问你volatile是什么,就把这篇文章发给他

转载自 再有人问你volatile是什么,就把这篇文章发给他 在再有人问你Java内存模型是什么,就把这篇文章发给他中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字…

端午前夕的班级小游戏

文章原创:高启航同学文章编辑:穆雄雄今天2020年6月24号,端午节放假前夕一早,依旧照常的早自习,同学们抵抗着困倦都在尽力而为的阅读笔记,虽然有些小不情愿,但声音还是很大。今天是班主任以及班委…

Servlet 流程控制

在之前的登陆例子里面所有的代码都是放到了jsp的页面中&#xff0c;但是JSP是负责显示的&#xff0c;现在用于了流程控制&#xff0c;这样十分不妥&#xff0c;所以我们把代码提取到了servlet里面 代码实现 Login.jsp <h3>用户登录</h3> <form action"…

TCP 三次握手原理,你真的理解吗

转载自 TCP 三次握手原理&#xff0c;你真的理解吗 最近&#xff0c;阿里中间件小哥哥蛰剑碰到一个问题——client端连接服务器总是抛异常。在反复定位分析、并查阅各种资料文章搞懂后&#xff0c;他发现没有文章把这两个队列以及怎么观察他们的指标说清楚。 因此&#xff0…

属于你们的“礼仪小课堂”

2020年7月2日&#xff0c;对于3班的孩子们来说&#xff0c;是个无比重要的日子。在于老师&#xff08;6班班主任&#xff09;和王老师&#xff08;3班班主任&#xff09;紧锣密鼓的准备下&#xff0c;终于在我们班内开展了以“礼仪”为主题的专题讲解&#xff0c;此次讲解的主角…

.Net程序调试与追踪的一些方法

前言 作为一个.net开发工程师&#xff0c;不管是在写桌面程序、服务程序或web程序&#xff0c;在开发阶段&#xff0c;我们必须非常熟悉vs的动态调试技能&#xff0c;当然web程序可能还需要调试前端的脚本或样式&#xff0c;这不在本文的讨论范围。本文主要介绍vs的动态调试基…

toString()

Object类中toString()的使用&#xff1a; 1. 当我们输出一个对象的引用时&#xff0c;实际上就是调用当前对象的toString() 2. Object类中toString()的定义&#xff1a;public String toString() {return getClass().getName() "" Integer.toHexString(hashCode())…

线上服务器内存分析及问题排查

转载自 线上服务器内存分析及问题排查 平常的工作中&#xff0c;在衡量服务器的性能时&#xff0c;经常会涉及到几个指标&#xff0c;load、cpu、mem、qps、rt等。每个指标都有其独特的意义&#xff0c;很多时候在线上出现问题时&#xff0c;往往会伴随着某些指标的异常。大部…

RabbitMQ系列教程之一:我们从最简单的事情开始!Hello World

一、简介 RabbitMQ是一个消息的代理器&#xff0c;用于接收和发送消息&#xff0c;你可以这样想&#xff0c;他就是一个邮局&#xff0c;当您把需要寄送的邮件投递到邮筒之时&#xff0c;你可以确定的是邮递员先生肯定会把邮件发送到需要接收邮件的人的手里&#xff0c;不…

红歌合唱之团结就是力量

今天&#xff0c;由王老师组织的班级红歌大合唱之“团结就是力量”圆满落幕&#xff01;下面是整个合唱的视频&#xff0c;同学们个个都朝气蓬勃&#xff1a;以下是《团结就是力量》的全部歌词团结就是力量团结就是力量这力量是铁这力量是钢比铁还硬比钢还强向着法西斯蒂开火让…

Servlet API

1、书写一个servlet的方式 Servlet必须直接或间接实现 javax.servlet.Servlet 接口 通过继承javax.servlet.GenericServlet 类实现跨协议的 Servlet 通过继承javax.servlet.HttpServlet实现HTTP Servlet 自己定义个servlet&#xff0c;然后其他的java类都继承自己写好的servlet…

EventBus In eShop -- 解析微软微服务架构eShopOnContainers(四)

引言 大家好像对分析源码厌倦了&#xff0c;说实在我也会厌倦&#xff0c;不过不看是无法分析其后面的东西&#xff0c;从易到难是一个必要的过程。 今天说下EventBus&#xff0c;前几天园里的大神已经把其解刨事件总线&#xff08;Event Bus&#xff09;知多少&#xff0c;我…

基本数据类型、包装类、String三者之间的相互转换

package com.wdl.day13;import org.junit.Test;/** 包装类的使用:* 1.java提供了8种基本数据类型对应的包装类&#xff0c;使得基本数据类型的变量具有类的特征** 2.掌握的&#xff1a;基本数据类型、包装类、String三者之间的相互转换****/ public class WrapperTest {//Strin…

很简单很简单的DBHelper类

记录一个简单的DBHelper类吧&#xff0c;用的时候在上来拿&#xff01; /// <summary>/// 数据库连接工具类/// </summary>public class DBHelper{string constr "Data Source.;Initial CatalogschoolDB;Integrated SecurityTrue";private SqlConnecti…

DDD理论学习系列(1)-- 通用语言

1.引言 在开始之前&#xff0c;我想我们有必要先了解以下DDD的主要参与者。因为毕竟语言是人说的吗&#xff0c;就像我们面向对象编程一样&#xff0c;那通用语言面向的是&#xff1f;DDD的主要参与者&#xff1a;领域专家开发人员领域专家&#xff1a;精通业务的任何人。开发…

定了!对于本周四(7.16日)抽奖活动取消简要说明,新抽奖活动暂定下周三(7.22日)...

大家好&#xff0c;我是雄雄&#xff0c;对于本周四&#xff08;7.16日&#xff09;抽奖活动取消简要说明&#xff0c;新抽奖活动暂定下周三&#xff08;7.22日&#xff09;&#xff0c;欢迎各位粉丝积极参与&#xff0c;奖品已经准备好了&#xff0c;你&#xff01;准备好了吗…

RabbitMQ系列教程之二:工作队列(Work Queues)

今天开始RabbitMQ教程的第二讲&#xff0c;废话不多说&#xff0c;直接进入话题。 (使用.NET 客户端 进行事例演示) 在第一个教程中&#xff0c;我们编写了一个从命名队列中发送和接收消息的程序。在本教程中&#xff0c;我们将创建一个工作队列&#xff0c;这个队列将用于在…