服务容错
文章平均质量分 92
Hystrix,Sentinel
weixin_42073629
这个作者很懒,什么都没留下…
展开
-
常用的限流框架
作为应对高并发的手段之一,限流并不是一个新鲜的话题了。从Guava的Ratelimiter到Hystrix,以及Sentinel都可作为限流的工具。自适应限流一般的限流常常需要指定一个固定值(qps)作为限流开关的阈值,这个值一是靠经验判断,二是靠通过大量的测试数据得出。但这个阈值,在流量激增、系统自动伸缩或者某某commit了一段有毒代码后就有可能变得不那么合适了。并且一般业务方也不太能够正确评估自己的容量,去设置一个合适的限流阈值。而此时自适应限流就是解决这样的问题的,限流阈值不需要手动指定原创 2021-05-16 18:35:48 · 440 阅读 · 0 评论 -
Hystrix监控数据聚合
上一篇我们介绍了使用Hystrix Dashboard来展示Hystrix用于熔断的各项度量指标。通过Hystrix Dashboard,我们可以方便的查看服务实例的综合情况,比如:服务调用次数、服务调用延迟等。但是仅通过Hystrix Dashboard我们只能实现对服务当个实例的数据展现,在生产环境我们的服务是肯定需要做高可用的,那么对于多实例的情况,我们就需要将这些度量指标数据进行聚合。下面,在本篇中,我们就来介绍一下另外一个工具:Turbine。准备工作在开始使用Turbine之前,我们先回原创 2020-07-12 01:19:48 · 236 阅读 · 0 评论 -
Hystrix监控面板
断路器是根据一段时间窗内的请求情况来判断并操作断路器的打开和关闭状态的。而这些请求情况的指标信息都是HystrixCommand和HystrixObservableCommand实例在执行过程中记录的重要度量信息,它们除了Hystrix断路器实现中使用之外,对于系统运维也有非常大的帮助。这些指标信息会以“滚动时间窗”与“桶”结合的方式进行汇总,并在内存中驻留一段时间,以供内部或外部进行查询使用,Hystrix Dashboard就是这些指标内容的消费者之一。下面我们基于之前的示例来结合Hystrix D原创 2020-07-12 01:12:30 · 387 阅读 · 0 评论 -
Spring Cloud Hystrix的请求合并
通常微服务架构中的依赖通过远程调用实现,而远程调用中最常见的问题就是通信消耗与连接数占用。在高并发的情况之下,因通信次数的增加,总的通信时间消耗将会变的不那么理想。同时,因为对依赖服务的线程池资源有限,将出现排队等待与响应延迟的情况。为了优化这两个问题,Hystrix提供了HystrixCollapser来实现请求的合并,以减少通信消耗和线程数的占用。HystrixCollapser实现了在HystrixCommand之前放置一个合并处理器,它将处于一个很短时间窗(默认10毫秒)内对同一依赖服务的多个请原创 2020-07-12 00:15:34 · 173 阅读 · 0 评论 -
Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失(续)
前言上篇文章《Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失》我们对ThreadLocal数据丢失进行了详细的分析,并通过代码的方式复现了这个问题。在上篇文章的末尾我也说了思路给大家提供了,如果需要能够在Hystrix 为线程隔离模式也能正确传递数据的话,需要我们自己去修改。我这边以Zuul中自定义负载均衡策略来进行讲解,在Zuul中需要实现灰度发布的功能,需要在Filter中将请求的用户信息传递到自定的负载策略中,Zuul中整合了Hystrix,从Zuul原创 2020-07-12 00:10:17 · 207 阅读 · 1 评论 -
Spring Cloud中Hystrix 线程隔离导致ThreadLocal数据丢失
在Spring Cloud中我们用Hystrix来实现断路器,Zuul中默认是用信号量(Hystrix默认是线程)来进行隔离的,我们可以通过配置使用线程方式隔离。在使用线程隔离的时候,有个问题是必须要解决的,那就是在某些业务场景下通过ThreadLocal来在线程里传递数据,用信号量是没问题的,从请求进来,但后续的流程都是通一个线程。当隔离模式为线程时,Hystrix会将请求放入Hystrix的线程池中去执行,这个时候某个请求就有A线程变成B线程了,ThreadLocal必然消失了。下面我们通过原创 2020-07-11 23:58:09 · 177 阅读 · 0 评论 -
Hystrix降级逻辑中如何获取触发的异常
通过之前Spring Cloud系列教程中的《服务容错保护(Hystrix服务降级)》一文,我们已经知道如何通过Hystrix来保护自己的服务不被外部依赖方拖垮的情况。但是实际使用过程中经常碰到开发反应“莫名”触发了降级逻辑的情况。为了更精准的定位触发原因,或是在降级逻辑中需要根据不同的异常做不同的处理时,在降级方法中,我们希望可以获取到主逻辑中抛出的异常信息。接下来就来介绍一下Hystrix两种不同实现方式中如何在降级逻辑中获取异常信息的方法。注解方式先介绍一下用注解方式定义的Hystrix命令是原创 2020-07-11 23:42:03 · 417 阅读 · 1 评论 -
服务容错保护(Hystrix依赖隔离)
前言在上一篇《服务容错保护(Hystrix服务降级)》中,我们已经体验了如何使用@HystrixCommand来为一个依赖资源定义服务降级逻辑。实现方式非常简单,同时对于降级逻辑还能实现一些更加复杂的级联降级等策略。之前对于使用Hystrix来实现服务容错保护时,除了服务降级之外,我们还提到过线程隔离、断路器等功能。那么在本篇中我们就来具体说说线程隔离。依赖隔离“舱壁模式”对于熟悉Docker的读者一定不陌生,Docker通过“舱壁模式”实现进程的隔离,使得容器与容器之间不会互相影响。而Hyst原创 2020-07-11 00:42:21 · 303 阅读 · 0 评论 -
服务容错保护(Hystrix服务降级)
前言在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会出现因等待出现故障的依赖方响应而形成任务积压,线程资源无法释放,最终导致自身服务的瘫痪,进一步甚至出现故障的蔓延最终导致整个系统的瘫痪。如果这样的架构存在如此严重的隐患,那么相较传统架构就更加的不原创 2020-07-11 00:41:08 · 247 阅读 · 0 评论 -
Hystrix 工作原理
1. 流程图 下面的图片显示了一个请求在hystrix中的流程图。1.构造一个HystrixCommand或者HystrixObservableCommand对象 第一步是创建一个HystrixCommand或者HystrixObservableCommand对象来执行依赖请求。创建时需要传递相应的参数。 如果请求只返回一个单一值,使用HystrixCommand。HystrixCommand command = new HystrixCommand(arg1, arg2);原创 2020-06-20 09:04:42 · 1365 阅读 · 0 评论 -
Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker
1. 概述本文主要分享断路器 HystrixCircuitBreaker。HystrixCircuitBreaker 有三种状态 :CLOSED:关闭 OPEN:打开 HALF_OPEN:半开其中,断路器处于OPEN状态时,链路处于非健康状态,命令执行时,直接调用回退逻辑,跳过正常逻辑。HystrixCircuitBreaker 状态变迁如下图 : 红线:初始时,断路器处于CLOSED状态,链路处于健康状态。当满足如下条件,断路器从CLOSED变成OP...原创 2020-06-19 22:46:52 · 513 阅读 · 0 评论 -
Hystrix 源码解析 —— 命令合并执行
1. 概述本文主要分享Hystrix 命令合并执行。在《【翻译】Hystrix文档-实现原理》「请求合并」中,对 Hystrix 命令合并执行的概念、原理、使用场景、优缺点已经做了非常详细透彻的分享,所以胖友可以先认真阅读学习下。命令合并执行整体流程如下图 :FROM《【翻译】Hystrix文档-实现原理》「请求合并」第一步,提交单个命令请求到请求队列( RequestQueue ) 第二部,定时任务( TimerTask )固定周期从请求队列获取多个命令执行,合并执行。...原创 2020-06-19 22:40:51 · 334 阅读 · 0 评论 -
Hystrix 源码解析 —— 请求执行(四)之失败回退逻辑
1. 概述本文主要分享Hystrix 命令执行(四)之失败回退逻辑。建议 :对 RxJava 已经有一定的了解的基础上阅读本文。Hystrix 执行命令整体流程如下图:FROM《【翻译】Hystrix文档-实现原理》「流程图」红圈 :Hystrix 命令执行失败,执行回退逻辑。也就是大家经常在文章中看到的“服务降级”。 绿圈 :四种情况会触发失败回退逻辑( fallback )。 第一种 :short-circuit,处理链路处于熔断的回退逻辑,在「3. #handl...原创 2020-06-19 22:26:36 · 900 阅读 · 0 评论 -
Hystrix 源码解析 —— 命令执行(三)之执行超时
1. 概述本文主要分享Hystrix 命令执行(三)之执行超时。建议 :对 RxJava 已经有一定的了解的基础上阅读本文。开启执行超时功能,需要配置 :HystrixCommandProperties.executionTimeoutEnabled:执行命令超时功能开关。 值 :Boolean 默认值 :true HystrixCommandProperties.executionTimeoutInMilliseconds:执行命令超时时长。 值 :Integer ...原创 2020-06-19 22:22:50 · 441 阅读 · 0 评论 -
Hystrix 源码解析 —— 命令执行(二)之执行隔离策略
1. 概述本文主要分享Hystrix 命令执行(二)之执行隔离策略。建议 :对 RxJava 已经有一定的了解的基础上阅读本文。Hystrix 提供两种执行隔离策略( ExecutionIsolationStrategy ) :SEMAPHORE:信号量,命令在调用线程执行。在《Hystrix 源码解析 —— 命令执行(一)之正常执行逻辑》「3. TryableSemaphore」已经详细解析。 THREAD:线程池,命令在线程池执行。在《Hystrix 源码解析 —— 命令执行(...原创 2020-06-19 22:18:30 · 320 阅读 · 0 评论 -
Hystrix 源码解析 —— 命令执行(一)之正常执行逻辑
1. 概述本文主要分享Hystrix 命令执行(一)之正常执行逻辑。建议 :对 RxJava 已经有一定的了解的基础上阅读本文。Hystrix 执行命令整体流程如下图:FROM《【翻译】Hystrix文档-实现原理》「流程图」红框 :Hystrix 命令执行的过程。 蓝圈 :本文分享的部分 —— 正常执行逻辑。2. #applyHystrixSemantics(…)在《Hystrix 源码解析 —— 执行结果缓存》里,我们看到#toObservable()...原创 2020-06-19 22:05:54 · 200 阅读 · 1 评论 -
Hystrix 源码解析 —— 执行结果缓存
1. 概述本文主要分享Hystrix 执行命令的结果缓存。建议 :对 RxJava 已经有一定的了解的基础上阅读本文。Hystrix 执行命令整体流程如下图:FROM《【翻译】Hystrix文档-实现原理》「流程图」红圈 :在《Hystrix 源码解析 —— 执行命令方式》有详细解析。 紫圈 :在#toObservable()方法里,如果请求结果缓存这个特性被启用,并且缓存命中,则缓存的回应会立即通过一个 Observable 对象的形式返回;如果缓存未命中,则返回...原创 2020-06-19 21:57:28 · 204 阅读 · 0 评论 -
Hystrix 源码解析 —— 执行命令方式
1. 概述本文主要分享Hystrix 执行命令方法。建议 :对 RxJava 已经有一定的了解的基础上阅读本文。在官方提供的示例中,我们看到CommandHelloWorld通过继承HystrixCommand抽象类,有四种调用方式:方法 #execute() 同步调用,返回直接结果 #queue() 异步调用,返回java.util.concurrent.Future #observe() 异步调用,返回rx.Observable。向...原创 2020-06-19 21:54:43 · 161 阅读 · 0 评论 -
Hystrix 源码解析 —— 调试环境搭建
1. 依赖工具Gradle JDK IntelliJ IDEA推荐 Spring Cloud 书籍:请支持正版。下载盗版,等于主动编写低级 BUG。 程序猿DD ——《Spring Cloud微服务实战》 周立 ——《Spring Cloud与Docker微服务架构实战》 两书齐买,京东包邮。2. 源码拉取从官方仓库https://github.com/Netflix/Hystrix.gitFork出属于自己的仓库。为什么要Fork?既然开始阅读、调试源码,我们可能...原创 2020-06-19 21:51:50 · 293 阅读 · 1 评论 -
Sentinel 实战-集群流控
集群流控我们已经知道如何为应用接入限流了,但是到目前为止,这些还只是在单机应用中生效。也就是说,假如你的应用有多个实例,那么你设置了限流的规则之后,每一台应用的实例都会生效相同的流控规则,如下图所示:local-flow-in-each-server.png假设我们设置了一个流控规则,qps是10,那么就会出现如上图所示的情况,当qps大于10时,实例中的 sentinel 就开始生效了,就会将超过阈值的请求 block 掉。上图好像没什么问题,但是细想一下,我们可以发现还是会有这样的问原创 2020-06-01 00:03:32 · 7530 阅读 · 6 评论 -
Sentinel 实战-规则持久化
规则持久化的5种方式规则丢失无论是通过硬编码的方式来更新规则,还是通过接入 Sentinel Dashboard 后,在页面上操作来更新规则,都无法避免一个问题,那就是服务重启后,规则就丢失了,因为默认情况下规则是保存在内存中的。Dashboard 是通过 transport 模块来获取每个 Sentinel 客户端中的规则的,获取到的规则通过 RuleRepository 接口保存在 Dashboard 的内存中,如果在 Dashboard 页面中更改了某个规则,也会调用 transport原创 2020-06-01 00:02:56 · 786 阅读 · 0 评论 -
Sentinel 实战-限流篇
我们已经知道了 Sentinel 的三大功能:限流降级系统保护。现在让我们来了解下具体的使用方法,以限流来演示具体的步骤。引入依赖首先肯定是要先引入需要的依赖,如下所示:<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>x.y.z</version&..原创 2020-05-31 04:42:06 · 1575 阅读 · 0 评论 -
Sentinel 实战-控制台篇
通过 sentinel 的控制台,我们可以对规则进行查询和修改,也可以查看到实时监控,机器列表等信息,所以我们需要对 sentinel 的控制台做个完整的了解。部署控制台首先需要启动控制台, sentinel 的控制台是用 spring boot 写的一个web 应用,我们有几种方式来获取控制台:下载可执行 jar 包从release 页面下载截止目前为止最新版本的控制台 jar 包,如下图所示:下载源码构建除了可以下载预先构建好的可执行 jar 包之外,我们还可以把控制台的..原创 2020-05-31 04:39:24 · 1172 阅读 · 1 评论 -
带你了解「sentinel」中的概念实体
sentinel中有很多比较重要的概念,我们要了解一个框架,首先要对框架中重要的概念实体进行分析,本文我将跟大家一起来分析一下sentinel中非常重要的几个概念。Resourceresource是sentinel中最重要的一个概念,sentinel通过资源来保护具体的业务代码或其他后方服务。sentinel把复杂的逻辑给屏蔽掉了,用户只需要为受保护的代码或服务定义一个资源,然后定义规则就可以了,剩下的通通交给sentinel来处理了。并且资源和规则是解耦的,规则甚至可以在运行时动态修改。定义完资源原创 2020-05-31 04:30:48 · 233 阅读 · 0 评论 -
限流降级神器「sentinel」基于滑动时间窗口的实时指标统计分析
上篇文章中,我们了解了sentinel是如何构造资源调用链的,以及每种Slot的具体作用,其中最重要的一个Slot非StatisticSlot莫属,因为他做的事是其他所有的Slot的基础。包括各种限流,熔断的规则,都是基于StatisticSlot统计出来的结果进行规则校验的。本篇文章我将深入研究下sentinel是如何进行qps等指标的统计的,首先要确定的一点是,sentinel是基于滑动时间窗口来实现的。化整为零我们已经知道了Slot是从第一个往后一直传递到最后一个的,且当信息传递到Statis原创 2020-05-31 04:29:04 · 410 阅读 · 0 评论 -
限流降级神器-哨兵(sentinel)的资源调用链原理分析
我们已经知道了sentinel实现限流降级的原理,其核心就是一堆Slot组成的调用链。这里大概的介绍下每种Slot的功能职责:NodeSelectorSlot负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级; ClusterBuilderSlot则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据; StatisticsSlot则用于记录,统计不同维度的 ru...原创 2020-05-31 04:18:57 · 253 阅读 · 0 评论 -
限流降级神器-哨兵(sentinel)原理分析
Sentinel是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。大家可能会问:Sentinel 和之前常用的熔断降级库Netflix Hystrix有什么异同呢?Sentinel官网有一个对比的文章,这里摘抄一个总结的表格,具体的对比可以点此链接查看。对比内容 Sentinel Hystrix 隔离策略 信号量隔离 线程池隔离/信号量隔离 熔断降...原创 2020-05-31 04:12:17 · 4040 阅读 · 0 评论 -
在生产环境中使用 Sentinel 控制台
Sentinel 控制台作为 Sentinel 的一大利器,提供了多个维度的监控和规则配置功能。Sentinel 客户端目前已可用于生产环境,但若希望在生产环境中使用 Sentinel 控制台还需要进行一些改造。本文将介绍如何对 Sentinel 控制台进行改造以便在生产环境中使用。在生产环境中使用 Sentinel 控制台只需要两步改造:改造推送逻辑,支持向规则数据源进行推送 改造监控逻辑,支持监控数据持久化动态规则数据源Sentinel 的动态规则数据源用于从中读取及写入规则。从 0..原创 2020-05-31 04:00:50 · 431 阅读 · 0 评论 -
Sentinel 为 RocketMQ 服务保驾护航
在 Apache RocketMQ 中,当消费者去消费消息的时候,无论是通过 pull 的方式还是 push 的方式,都可能会出现大批量的消息突刺。如果此时要处理所有消息,很可能会导致系统负载过高,影响稳定性。但其实可能后面几秒之内都没有消息投递,若直接把多余的消息丢掉则没有充分利用系统处理消息的能力。我们希望可以把消息突刺均摊到一段时间内,让系统负载保持在消息处理水位之下的同时尽可能地处理更多消息,从而起到“削峰填谷”的效果:上图中红色的部分代表超出消息处理能力的部分。我们可以看到消息突刺往往都是原创 2020-05-31 03:55:21 · 768 阅读 · 0 评论 -
Sentinel 为 Dubbo 服务保驾护航
在复杂的生产环境下可能部署着成千上万的 Dubbo 服务实例,流量持续不断地进入,服务之间进行相互调用。但是分布式系统中可能会因流量激增、系统负载过高、网络延迟等一系列问题,导致某些服务不可用,如果不进行相应的控制可能导致级联故障,影响服务的可用性,因此如何对流量进行合理的控制,成为保障服务稳定性的关键。Sentinel是阿里中间件团队开源的,面向分布式服务架构的轻量级流量控制产品,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。本文将基于 Dubbo,看.原创 2020-05-31 03:46:02 · 396 阅读 · 0 评论 -
开源限流系统 Sentinel 全解析
阿里开源了自研的限流系统 Sentinel,官方对 Sentinel 的介绍中用到了一系列高大上的名词诸如 限流、熔断降级、流量塑形、系统负载保护等,还有漂亮的形容词诸如 轻巧、专业、实时等。作为技术消费者看到这样的广告词之后禁不住要大声感叹 —— NiuB!更要不得的是 Sentinel 的发布会由阿里的高级技术专家 子衿 主讲,她是一位女性开发者,这在男性主导额 IT 产业也算得上难得一见的奇观。Sentinel 入门首先,Sentinel 不算一个特别复杂的系统 ,普通技术开发者也可以.原创 2020-05-31 02:48:46 · 240 阅读 · 0 评论 -
Spring Cloud Alibaba 服务容错 Sentinel 入门
1. 概述本文我们来学习Spring Cloud Alibaba提供的Spring Cloud Alibaba Sentinel组件,对 Spring Cloud 进行整合,实现服务容错相关的功能。FROMhttps://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。S...原创 2020-05-30 19:45:20 · 6028 阅读 · 1 评论 -
Spring Boot 服务容错 Sentinel 入门
1. 概述在《Sentinel 极简入门》中,我们简单了解了 Sentinel,并搭建了 Sentinel 控制台。如果还没看的胖友,可以先看看该文的「1. 概述」和「2. 控制台」小节。Sentinel 功能比较强大,同时胖友可能对服务容错可能比较陌生,所以我们跟着示例,一个一个来学习噢。2. 流量控制示例代码对应仓库:lab-46-sentinel-demo。在本小节,我们来学习下 Sentinel 的流量控制功能,对应《Sentinel 官方文档 —— 流量控制》文章。F原创 2020-05-30 19:02:27 · 2158 阅读 · 0 评论 -
Sentinel 极简入门
1. 概述Sentinel 的官方文档非常完善,所以本文会大量引用噢。如果胖友对服务保障相关的中间件了解较少,可能本文看起来会看到蛮多新概念。不过问题不大,打怪升级多美好~1.1 介绍Sentinel 是什么?FROMhttps://github.com/alibaba/Sentinel轻量级的流量控制、熔断降级 Java 库。FROM《Sentinel 官方文档 —— 介绍》随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流...原创 2020-05-30 18:16:38 · 400 阅读 · 0 评论 -
Sentinel 与 Hystrix 的对比
Sentinel是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保护服务的稳定性。大家可能会问:Sentinel 和之前常用的熔断降级库 Netflix Hystrix 有什么异同呢?本文将从多个角度对 Sentinel 和 Hystrix 进行对比,帮助大家进行技术选型。Overview先来看一下Hystrix的官方介绍:Hystrix is a library that helps you...原创 2020-05-30 17:58:53 · 3522 阅读 · 0 评论 -
Spring Cloud Netflix 服务容错 Hystrix 入门
1. 概述在开始 Spring Cloud Netflix Hystrix 的学习之前,我们先来一起瞅瞅“服务雪崩”、“服务容错”等的概念,方便我们理解为什么要使用 Hystrix 框架。1.1 服务雪崩在微服务的架构体系中,我们会将系统拆分成多个服务小单元,通过 HTTP 或者 RPC 进行远程调用。如下图所示:在绝大多数情况下,服务消费者都能正常的远程调用服务提供者。但是某一时刻,服务提供者执行逻辑较慢,又或者网络出现抖动的情况,导致服务消费调用服务提供者超时或者失败。如下图所示:原创 2020-05-30 13:19:08 · 401 阅读 · 0 评论 -
Spring Boot 服务容错 Hystrix 入门
1. 概述在开始 Hystrix 的学习之前,我们先来一起瞅瞅“服务雪崩”、“服务容错”等的概念,方便我们理解为什么要使用 Hystrix 框架。友情提示:本文是《芋道 Spring Cloud Netflix 服务容错 Hystrix 入门》的弟弟篇。所以内容上,会有蛮多重叠的地方。写本文的主要目的是,分享在纯 Spring Boot环境下,如何使用 Hystrix 框架。基本所有的网上文章,都是通过Spring Cloud Netflix Hystrix进行 Hystrix 的使用,...原创 2020-05-28 23:59:32 · 898 阅读 · 0 评论
分享