wangqi的blog

贫,气不改;达,志不改


  • 首页

  • 关于

  • 归档

  • 搜索

Hystrix(七)——请求合并

发表于 2018-07-10

请求合并

你可以在HystrixCommand之前放置一个请求合并器(HystrixCollapser为请求合并器的抽象父类),该合并器可以将多个发往同一个后端依赖服务的请求合并成一个。

阅读全文 »

Hystrix(六)——失败回退逻辑

发表于 2018-07-10

当命令执行失败时,Hystrix将会执行失败回退逻辑,失败的原因可能是:

  1. construct()或run方法抛出异常
  2. 当线路是开路,导致命令被短路时
  3. 当命令对应的线程池或信号量被占满
  4. 超时
阅读全文 »

Hystrix(五)——执行超时

发表于 2018-07-09

开启执行超时功能,需要配置:

  • HystrixCommandProperties.executionTimeoutEnabled:执行命令超时功能开关

    • 值:Boolean
    • 默认值:true
  • HystrixCommandProperties.executionTimeoutInMilliseconds:执行命令超时时长

    • 值:Integer
    • 单位:毫秒
    • 默认值:1000毫秒

在AbstractCommand.executeCommandAndObserve方法中,如果HystrixCommandProperties属性中开启了执行命令超时开关,则调用lift实现对执行命令超时的监控。代码如下:

1
2
3
4
if (properties.executionTimeoutEnabled().get()) {
execution = executeCommandWithSpecifiedIsolation(_cmd)
.lift(new HystrixObservableTimeoutOperator<R>(_cmd));
}
阅读全文 »

Hystrix(四)——执行隔离策略

发表于 2018-07-09

依赖隔离

Hystrix通过使用仓壁模式(注:将船的底部划分成一个个的舱室,这样一个舱室进水不会导致整艘船沉没。将系统所有依赖服务隔离起来,一个依赖延迟升高或者失败,不会导致整个系统失败)来隔离依赖服务,并限制访问这些依赖服务的并发度。

阅读全文 »

Kubernetes基本概念

发表于 2018-07-08

Kubernetes中的大部分概念如Node、Pod、Replication Controller、Service等都可以看做一种”资源对象”,几乎所有的资源对象都可以通过Kubernetes提供的kubectl工具(或者API编程调用)执行增、删、改、查等操作并将其保存在etcd中持久化存储。从这个角度来看,Kubernetes其实是一个高度自动化的资源控制系统,它通过跟踪对比etcd库里保存的”资源期望状态”与当前环境中的”实际资源状态”的差异来实现自动控制和自动纠错的高级功能。

阅读全文 »

Hystrix(三)——正常执行逻辑

发表于 2018-07-07

正常逻辑执行

AbstractCommand.toObservable()方法中,当缓存特性未开启或者缓存未命中时,将applyHystrixSemantics传入Observable.defer方法中,声明执行命令的Observable。

阅读全文 »

Hystrix(二)——命令执行方式

发表于 2018-07-06

构建HystrixCommand或者HystrixObservableCommand对象

使用Hystrix的第一步是创建一个HystrixCommand或者HystrixObservableCommand对象来表示你需要发给依赖服务的请求。你可以向构造器传递任意参数。

若只期望服务每次返回单一的回应,按如下方式构造一个HystrixCommand即可:

1
HystrixCommand command = new HystrixCommand(arg1, arg2);

若期望依赖服务返回一个Observable,并应用Observable模式监听依赖服务的回应,可按如下方式构造一个HystrixObservableCommand:

1
HystrixObservableCommand command = new HystrixObservableCommand(arg1, arg2);
阅读全文 »

RxJava2基本知识整理

发表于 2018-07-05

Rx是微软的.NET的一个响应式扩展。Rx借助可观测的序列提供一种简单的方式来创建异步的,基于事件驱动的程序。

简单点说,Rx就是一种响应式编程,来创建基于事件的异步程序。

Rx其实是一种编程思想,用很多语言都可以实现,比如RxJava、RxJS、RxPHP等等。

RxJava就是Java对Rx的实现,一个在JVM上使用可观测的序列来组成异步的、基于事件的程序的库。

RxJava的异步实现,是通过一种扩展的观察者模式来实现的。

阅读全文 »

Hystrix(一)——应用

发表于 2018-07-05

在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会出现因等待出现故障的依赖方响应而形成任务积压,线程资源无法释放,最终导致自身服务的瘫痪,进一步甚至出现故障的蔓延最终导致整个系统的瘫痪。如果这样的架构存在如此严重的隐患,那么相较于传统架构就更加的不稳定。为了解决这样的问题,产生了断路器等一系列的服务保护机制。

针对上述问题,在Spring Cloud Hystrix中实现了线程隔离、断路器等一系列的服务保护功能。它也是基于Netflix的开源框架Hystrix实现的,该框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备了服务降级、服务熔断、线程隔离、请求缓存、请求合并以及服务监控等强大功能。

阅读全文 »

Eureka(八)——RateLimiter

发表于 2018-07-03

Eureka在实现中有一个限流器来保证Eureka Server的稳定。

阅读全文 »

1…101112…20

wangqi

199 日志
GitHub E-Mail
© 2025 wangqi
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4