手机网站开发流程,网站规划的注意事项,福州网站设计哪家比较好,外贸公司用的采购储运财务软件Hystrix
问题产生 雪崩效应#xff1a; 一种因为服务提供者的不可用导致服务调用者不可用#xff0c;并将不可用情况逐渐放大的过程 形成过程#xff1a; 服务提供者不可用#xff1a; 硬件故障#xff0c;硬件损坏#xff0c;服务器宕机#xff0c;网络硬件故障…Hystrix
问题产生 雪崩效应 一种因为服务提供者的不可用导致服务调用者不可用并将不可用情况逐渐放大的过程 形成过程 服务提供者不可用 硬件故障硬件损坏服务器宕机网络硬件故障造成不可用程序bug缓存击穿大量请求同一个key此处key过期导致loder到DB造成服务提供者过载导致不可用用户大量请求 重试加大流量 用户重试用户不断刷新页面代码逻辑重试服务调用端存在服务异常之后的重试逻辑 服务调用者不可用 同步调用等待造成资源耗尽服务调用者此时也不可用造成服务雪崩 Hystrix工作原理 线程池隔离Hystrix隔离方式采用线程/信号量的方式通过隔离限制依赖的并发量和阻塞扩散 线程隔离 hystrix在每一个依赖调用分配了一个线程池单线程池满了调用将会立即被拒绝默认采用不排队加速失败判定线程数是可以被设定的。原理 用户请求将不直接依赖于服务本身而是通过线程池中空闲线程来范文服务如果线程池已满择进行降级处理用户请求不会被阻塞至少可以有一个执行结果例如友好的提示而不是无休止的等待知道系统奔溃 信号隔离类似信号量的一个使用用于限制并发访问反正阻塞扩散与现场隔离最大不同在于执行依赖代码的线程依然是请求线程(改线程需要通过信号申请如果客户端是可以信的且可以快速放回可以使用信号隔离代替线程隔离降低开销)信号量大小可以动态调整 熔断器circuit Breaker 熔断器是位于线程池之前的组建当用户请求某一个服务之后hystrix会先经过熔断器此时如果熔断器的状态是打开说明已经熔断的这时将直接进行降级处理不会继续发送请求到线程池熔断器相当于线程池之前的一层屏障每个熔断器默认维护十个bucket美妙创建一个bucket每个bucket记录成功失败超时拒绝次数当新的bucket被创建旧的bucket被抛弃依照bucket的记录来决定是否打开或者关闭断路器。熔断器状态机 closed熔断器关闭状态调用失败次数累计到了阀值或者一定比例择启动熔断机制。open熔断打开状态下游调用直接返回错误不走网络不进入线程池进入这个状态之后设计了一个时钟选型默认时间达到一定时间一般设置成平均故障处理事件也就是MTTR会进入半熔断状态half-open半熔断状态允许定量的服务请求也就是一部分请求尝试如果调用都成功或者一定比例成功则认为恢复关闭断路器否则认为还没好有回到熔断打开状态。 熔断流程 将请求request封装成一个HystrixCommend,或者HystrixObservableCommand对象执行execute(),queue()方法来做同步或者异步调用如果Hystrix缓存中有数据则读取缓存数据之后返回检查熔断器circuit-breaker是否打开如果打开择直接执行getFallback方法降级处理判断线程池信号量队列是否被占满如果满直接执行getFallBack方法降级处理执行HystrixObservableCommand.construct()或者HystrixCommand.run()如果调用超时执行getFallback方法如果调用异常抛出HystrixBadRequestException也直接执行getFallback方法调用成功返回成功结果getFallBack降级逻辑以下情况执行 断路器已经打开线程池队列信号量满run方法执行抛出HystrixBadrequestExceptionrun方法超时 没有实现getFallBack方法直接抛出异常信息降级逻辑失败也直接抛异常 Hystrix执行方式刚才说的HystricCommend中的run方法Hystrix可以有不同的执行策略 execute为代表的同步执行一旦开始执行当前线程就得阻塞一直等到命令返回结果queue座位代表的异步执行命令执行开始返回一个future对象不阻塞后面的逻辑开发者更具自己需求获取结果响应式执行HystrixObservableCommand中使用的模式命令会返回一个Observable对象开发可以给Observable对象注册上Observable通过Rxjava的方式响应式的处理命令执行过程中的不同阶段比如HystrixCommand中的Observer方法去消费observable中生产的事件。