Spring Cloud 入门学习(一),Eureka和Hystrix

一、Eureka(服务发现框架)

图片来源于Eureka开源代码
图片中可以看到总体架构分为了两个角色:Eureka Client 和 Eureka Server。而其中Eureka Client 又分为了Application Service 和 Application Client即服务提供者和服务消费者。可以简单的理解为,服务提供者卖家、消费者是买家、Eureka Server就是中间商。

Eureka的基础概念

  • Register,服务注册。

Eureka客户端向Eureka服务端注册时,会将客户端的元数据(IP、端口、主页等)一并传输给服务端。

  • Renew,服务续约。

Eureka客户端会每隔30秒向服务端发送一次心跳,以此告知当前的Eureka客户没有问题。正常情况下,如果Eureka服务端在90秒内没有收到Eureka客户的心跳, 就会将该客户实例从注册列表中删除。

  • Cancel,服务下线。

Eureka客户端在程序关闭时会想服务端发送取消请求,以此从服务端的注册表中删除该实例。该步骤不会自动执行,需要调用以下代码:
DiscoveryManager.getInstance().shutdownComponent();

  • Eviction,服务剔除。

正常情况下,如果服务端在90秒内没有接收到客户端的心跳,则会判定改客户端已经死亡,就会将该客户端的实例从注册表中删除。

参考自:深入理解Eureka

二、Hystrix(熔断、降级)

详情点击查看GitHub

在分布式环境中,许多服务依赖项中的一些不可避免地会失败。Hystrix 是一个库,它通过添加延迟容错和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix 通过隔离服务之间的访问点、停止它们之间的级联故障并提供回退选项来做到这一点,所有这些都可以提高系统的整体弹性。

之前有听到过服务雪崩这个名词,那时候看得脑壳疼,鬼知道什么意思啊!喂!

服务雪崩:

假设有三个服务A、B、C,其中A调用B,B调用C。但是此时C由于访问用户量太大,导致了阻塞。那么B调用C的时候由于迟迟接收不到C的消息,也导致了B崩了。而A也接收不到B的消息,则A也崩了。

在这里插入图片描述
所有服务全崩了,这就是服务雪崩。

熔断、降级就是为了防止服务雪崩的有效处理方式。

先说说熔断:
 熔断就是给某个方法添加一个断路器。然后增加了断路器的方法,如果调用时间超过了指定的阈值,就会中断对当前方法的调用,如此就不会影响到上一级调用的服务。

这边说的熔断其实就是Hystrix的断路器模式,我们可以使用注解@HystrixCommand标注某个方法,那么该方法就会被断路器所包装。当调用该方法的时间超过了指定时间(默认1000ms)就会中断该方法的调用。

@HystrixCommand(
    commandProperties = {@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds",value = "1200")}
)
public void c(){
	...代码省略
}

再说说降级:
 降级和熔断是不一样的,熔断是直接将服务B调用服务C方法之间的链路熔断。而降级则是当调用时间超过阈值后,则会调用备用方法,如此就可以增加用户体验。

@HystrixCommand(
    fallbackMethod="getBackC"
)
public void c(){
	...代码省略
}

public String getBackC(){
	return "当前服务繁忙,请稍后重试。";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值