分布式微服务架构面临的问题

  • 在微服务架构中,根据业务来拆分成一个个的服务,而服务与服务之间存在着依赖关系(比如用户调商品,商品调库存,库存调订单等等),在Spring Cloud中多个微服务之间可以用 RestTemplate+Ribbon 和 Feign来调用。
  • 在服务之间调用的链路上由于网络原因、资源繁忙或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,导致响应时间过长或不可用,此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

熔断机制是应对雪崩效应的一种微服务链路保护机制。在微服务架构中,一个请求需要调用多个服务是非常常见的。
当服务之间调用的链路上某个微服务不可用或者响应时间太长时,会导致连锁故障。当失败的调用到一定阈值(默认是5秒内20次调用失败) 就会启动熔断机制。在 SpringCloud 框架里熔断机制通过Hystrix实现,Hystrix会监控微服务间调用的状况。熔断机制的注解是 @HystrixCommand
熔断器打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。
服务提供方中使用熔断器示例:
image.png

feign中是自带熔断器的,只需要在接口上使用注解,并实现该接口。
image.png
熔断时会执行下面的方法。
image.png

Q.E.D.


擅长前端的Java程序员