重试、熔断、限流、降级
文章平均质量分 94
Alibaba Sentinel、Hystrix、spring retry
xiaolyuh123
凡是过去,皆为序幕
展开
-
拒绝宕机!一文详解分布式限流方案(附代码实现)
限流是一种对请求或并发数进行限制的关键技术手段,旨在保障系统的正常运行。当服务资源有限、处理能力有限时,限流可以对调用服务的上游请求进行限制,以防止自身服务因资源耗尽而停止服务。阈值:指在单位时间内允许的请求量。例如,将 QPS(每秒请求数)限制为500,表示在1秒内最多接受500次请求。通过设置合适的阈值,可以控制系统的负载,避免过多的请求导致系统崩溃或性能下降。拒绝策略:用于处理超过阈值的请求的策略。常见的拒绝策略包括直接拒绝、排队等待等。转载 2024-02-29 16:44:47 · 154 阅读 · 0 评论 -
使用Guava retryer优雅的实现接口重调机制
转至:https://www.cnblogs.com/jianzh5/p/6651799.html使用Guava retryer优雅的实现接口重调机制 API 接口调用异常, 网络异常在我们日常开发中经常会遇到,这种情况下我们需要先重试几次调用才能将其标识为错误并在确认错误之后发送异常提醒。guava-retry可以灵活的实现这一功能。Guava re转载 2018-05-05 21:40:13 · 1028 阅读 · 0 评论 -
Hystrix的资源隔离策略
转至:https://blog.csdn.net/liuchuanhong1/article/details/73718794Hystrix的资源隔离策略有两种,分别为:线程池和信号量。说到资源隔离,那我们就要明白,我们为什么需要资源隔离。在一个分布式系统中,服务之间都是相互调用的,如下图所示:例如,我们容器(Tomcat)配置的线程个数为1000,转载 2018-04-17 16:43:05 · 903 阅读 · 2 评论 -
Hystrix实现主线程和子线程的ThreadLocal上下文传递
问题描述我在使用日志链路追踪的时候(基于SLF4J MDC机制实现日志的链路追踪),我发现使用Hystrix线程池隔离的时候,我不能将子线程没有复制主线程的MDC上下文(Slf4j MDC机制),导致日志链路断掉。问题分析Hystrix的线程池隔离是使用HystrixThreadPool来实现的。而获取HystrixThreadPool是在HystrixConcurrencyStrateg...原创 2018-12-16 01:30:31 · 2542 阅读 · 2 评论 -
Hystrix使用
http://www.sohu.com/a/168237143_609518 https://www.jianshu.com/p/efb049107572转载 2018-01-15 14:49:39 · 266 阅读 · 0 评论 -
Hystrix核心原理和断路器源码解析
Hystrix运行原理构造一个HystrixCommand或HystrixObservableCommand对象执行命令。检查是否已命中缓存,如果命中直接返回。检查断路器开关是否打开,如果打开,直接熔断,走fallback逻辑。检查线程池/队列/信号量是否已满,如果已满,直接拒绝请求,走fallback逻辑。上面条件都不满足,调用HystrixObservableCommand.construct()方法HystrixCommand.run()方法,执行业务逻辑。判断运行业务逻辑方法是否出原创 2020-08-15 20:23:29 · 734 阅读 · 0 评论 -
Spring异常重试框架 Spring Retry
转至:https://www.cnblogs.com/EasonJim/p/7684649.htmlSpring Retry支持集成到Spring或者Spring Boot项目中,而它支持AOP的切面注入写法,所以在引入时必须引入aspectjweaver.jar包。快速集成的代码样例:@Configuration@EnableRetrypublic c转载 2018-05-05 21:37:41 · 1820 阅读 · 0 评论 -
spring-retry重试与熔断详解
转至:http://www.broadview.com.cn/article/233本文是《亿级流量》第6章 超时与重试机制补充内容。spring-retry项目实现了重试和熔断功能,目前已用于SpringBatch、Spring Integration等项目。RetryOperations定义了重试的API,RetryTemplate提供了模板实现,线程安全的转载 2018-05-05 21:35:48 · 5306 阅读 · 0 评论 -
Alibaba Sentinel DegradeRule 降级规则源码
Alibaba Sentinel 支持多种降级方式:根据响应时间:判断单位时间内平均响应时间是否达到阈值;根据异常比例:判断单位时间内,异常数量和异常比例是否达到阈值;根据异常数量:判断单位时间内异常数量是否达到阈值;一旦触发熔断,熔断开关将会打开,这时将拒绝所有请求,拒绝时间为设置的降级时间间隔。通过源码我们可以发现,Sentinel直接使用的是ScheduledExecutorService开启的一个延迟任务来实现降级时间间隔。如:响应时间达到阈值,并且熔断时间间隔配置为5S,这时熔断开.原创 2020-09-10 16:25:19 · 3237 阅读 · 0 评论 -
Alibaba Sentinel 骨架源码分析
Sentinel 的核心骨架,将不同的 Slot 按照顺序串在一起(责任链模式),从而将不同的功能(限流、降级、系统保护)组合在一起。slot chain 其实可以分为两部分:统计数据构建部分(statistic)和判断部分(rule checking)。核心结构:业务埋点示例// 资源的唯一标识String resourceName = "testSentinel";Entry entry = null;String retVal;try { entry = SphU.entry(r原创 2020-08-14 10:33:21 · 642 阅读 · 0 评论 -
Alibaba Sentinel 使用ZooKeeper集中管理和推送规则
如果不做任何修改,Sentinel Dashboard 的推送规则方式是通过 API 将规则推送至客户端并直接更新到内存中,这种方式规则保存在内存中,重启即消失不建议在线上使用,架构图如下:Sentinel官方是建议使用推模式,这种方式规则是持久化的,服务重启不会消失;通过配置中心来保证规则的一致性;规则实时下发,响应速度快,架构图如下:Sentinel 目前提供了ZooKeeper, Apollo, Nacos 等的动态数据源实现,但是为了使用第二种架构方式我们需要对原来的Dashboard进行一原创 2020-08-11 21:31:04 · 1607 阅读 · 0 评论 -
Alibaba Sentinel LeapArray 源码分析
最近在使用Alibaba Sentinel来做服务的限流、熔断和降级。一直有一个比较好奇的点,Sentinel是如果做到高效的数据统计的。通过官方文档介绍:StatisticSlot: 则用于记录、统计不同纬度的 runtime 指标监控信息;(做实时统计)Sentinel 底层采用高性能的滑动窗口数据结构LeapArray来统计实时的秒级指标数据,可以很好地支撑写多于读的高并发场景。由此可以发现Sentinel使用了滑动窗口算法来做数据统计,并且具体实现是在LeapArray类中。Sentin原创 2020-08-11 16:05:49 · 1604 阅读 · 0 评论