关于Hystrix

 RPC远程调用过程中如何防止服务雪崩效用

微服务中如何保护服务

 Hystrix是一个微服务中关于服务保护框架,在分布式中能够实现对服务容错。出错之后的预备方案

 

背景

在今天,基于SOA的架构已经大行其道。伴随着架构的SOA化,相关联的服务熔断、降级、限流等思想,也在各种技术讲座中频繁出现。本文将结合Netflix开源的Hystrix框架,对这些思想做一个梳理。

伴随着业务复杂性的提高,系统的不断拆分,一个面向用户端的API,其内部的RPC调用层层嵌套,调用链条可能会非常长。这会造成以下几个问题:

API接口可用性降低

引用Hystrix官方的一个例子,假设tomcat对外提供的一个application,其内部依赖了30个服务,每个服务的可用性都很高,为99.99%。那整个applicatiion的可用性就是:99.99%的30次方 = 99.7%,即0.3%的失败率。

这也就意味着,每1亿个请求,有30万个失败;按时间来算,就是每个月的故障时间超过2小时。

 

服务熔断

为了解决上述问题,服务熔断的思想被提出来。类似现实世界中的“保险丝“,当某个异常条件被触发,直接熔断整个服务,而不是一直等到此服务超时。

熔断的触发条件可以依据不同的场景有所不同,比如统计一个时间窗口内失败的调用次数。

服务降级

有了熔断,就得有降级。所谓降级,就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。

这样做,虽然服务水平下降,但好歹可用,比直接挂掉要强,当然这也要看适合的业务场景。

关于Hystrix中fallback的使用,此处不详述,参见官网。

项目搭建

需求:搭建一套分布式rpc远程通讯案例:比如订单服务调用会员服务实现服务隔离,防止雪崩效应案例

 

Hystrix针对微服务保护框架,涉及到服务之间的rpc演出调用。订单与会员实现rpc调用

 

 微服务汇总 rpc远程调用使用http通讯

 采用restful 底层可以使用httpclient实现rpc远程通讯

 

订单服务 通过http协议 调用 会员服务  (基于请求响应的,需要等待他的响应)

 

 

Hystrix 是一个微服务关于服务保护的框架,是Netflix开源的一款针对分布式系统的延迟和容错解决框架,目的是用来隔离分布式服务故障。它提供线程和信号量隔离,以减少不同服务之间资源竞争带来的相互影响;提供优雅降级机制;提供熔断机制使得服务可以快速失败,而不是一直阻塞等待服务响应,并能从中快速恢复。Hystrix通过这些机制来阻止级联失败并保证系统弹性、可用。

转载于:https://www.cnblogs.com/toov5/p/9986813.html

### Hystrix 源码分析及下载 Hystrix 是 Netflix 开发的一款用于提高系统可用性和稳定性的框架,其核心设计理念围绕着隔离、降级和熔断机制展开。以下是关于 Hystrix 的源码分析以及如何获取其源码的相关信息。 #### 1. Hystrix 源码的核心结构 Hystrix 的主要功能通过 `HystrixCommand` 和 `HystrixObservableCommand` 实现,它们封装了对外部服务的调用逻辑,并提供了多种保护机制。在 AbstractCommand 构造函数中,可以看到熔断器初始化的关键代码片段: ```java this.circuitBreaker = initCircuitBreaker( this.properties.circuitBreakerEnabled().get(), circuitBreaker, this.commandGroup, this.commandKey, this.properties, this.metrics ); ``` 这段代码展示了熔断器是如何被初始化的[^3]。具体来说,如果启用了熔断器,则会通过工厂模式创建默认实现;如果没有启用,则返回一个无操作的占位对象 (`NoOpCircuitBreaker`)。 #### 2. Hystrix 的限流机制 除了熔断之外,Hystrix 还实现了多种限流策略,比如滑动窗口和令牌桶算法。这些限流手段通常会在 `HystrixCommandMetrics` 初始化时启动对应的消费者流(Streams)。具体的实现位于 hystrix-core jar 包下的 `com.netflix.hystrix.metric.consumer` 路径中[^2]。对于更深入的研究者而言,可以通过阅读 `HystrixConfigurationStream` 和 `HystrixCommandMetrics` 类来进一步理解其实现细节。 #### 3. 批量请求处理 Hystrix 支持将多个用户的请求合并成单次网络调用以减少资源消耗。例如,假设我们将某个命令配置为支持批量获取影片评分的操作,则无论何时 JVM 中有任何线程发起此类请求,Hystrix 都能够自动将其与其他相似请求组合在一起并发送给目标服务[^4]。 #### 4. 如何下载 Hystrix 源码? 要研究 Hystrix 的实际编码方式及其内部工作流程,可以从官方 GitHub 存储库克隆最新版本的代码: ```bash git clone https://github.com/Netflix/Hystrix.git ``` 需要注意的是,自 2018 年底起,该项目已停止新增特性开发,因此建议查看文档或其他替代方案作为补充学习材料[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值