博客
关于我
SpringCloud微服务(03):Hystrix组件,实现服务熔断
阅读量:416 次
发布时间:2019-03-06

本文共 3159 字,大约阅读时间需要 10 分钟。

微服务熔断与降级技术实践

一、熔断器简介

微服务架构的核心特点之一是多服务、多数据源的支持,这种架构模式使得各个服务之间形成了紧密的依赖关系。然而,这种依赖关系也带来了潜在的风险。一旦某个微服务出现故障,可能会引发连锁反应,导致整个系统陷入瘫痪,这就是著名的“雪崩效应”。为了应对这一挑战,微服务架构引入了熔断器这一重要的容错机制。

服务熔断

在微服务架构中,当一个服务出现故障时,熔断器会介入切断相关服务的调用,向客户端返回预定义的错误信息或占位响应,从而避免因单个服务故障导致整个系统的崩溃。熔断器的作用可以分为以下几个阶段:

  • 触发熔断:检测到依赖服务出现故障时,立即切断与该服务的通信。
  • 提示用户:向客户端返回明确的错误信息,告知服务不可用。
  • 资源释放:释放占用的资源,避免资源泄漏。
  • 后续测试:在一定时间后,尝试重建连接至依赖服务,测试其恢复状态。
  • 熔断器在检测到依赖服务恢复后,会自动重新建立连接,确保服务依赖关系的稳定性。

    服务降级

    在高并发场景下,服务器资源可能面临巨大的压力。服务降级是一种有效的资源管理策略,通过关闭非核心服务或限制不必要的功能,释放服务器资源,确保核心业务的正常运行。服务降级可以根据具体业务需求和流量情况灵活配置,例如在双十一大促销期间,支付宝会对部分非核心服务进行降级,以保障核心交易的顺畅进行。

    核心依赖

    在实际项目中,Hystrix作为熔断器的一重要组成部分,通过以下核心依赖实现服务熔断和降级功能:

    org.springframework.cloud
    spring-cloud-starter-hystrix

    核心注解

    在配置Hystrix时,常用的注解包括:

  • @EnableHystrix:在启动类注解中启用Hystrix功能。
  • @HystrixCommand:用于标注需要熔断的方法。
  • @HystrixProperty:用于配置Hystrix的相关属性,如超时设置、并发限制等。
  • 案例模块描述

    以下是基于Ribbon和Feign的服务熔断案例:

    • Ribbon服务熔断:展示基于Ribbon的服务熔断实现,包括简单案例和复杂配置。
    • Feign服务熔断:通过定义fallback方法实现服务熔断,配置在接口或服务类上,支持动态代理。

    基于Ribbon服务熔断

    熔断执行方法

    public String getDefaultInfo() {    return "服务被熔断";}

    简单案例

    @RequestMapping("/showInfo1")@HystrixCommand(fallbackMethod = "getDefaultInfo")public String showInfo1() {    return restTemplate.getForObject(server_name + "/getInfo", String.class);}

    复杂案例

    @RequestMapping("/showInfo2")@HystrixCommand(    fallbackMethod = "getDefaultInfo",    commandProperties = {        @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000"),        @HystrixProperty(name = "fallback.isolation.semaphore.maxConcurrentRequests", value = "1000")    },    threadPoolProperties = {        @HystrixProperty(name = "coreSize", value = "20"),        @HystrixProperty(name = "maxQueueSize", value = "-1")    },    ignoreExceptions = {ServiceException.class})public String showInfo2() {    String value = "";    if (value.equals("")) {        throw new ServiceException("运行异常");    }    return restTemplate.getForObject(server_name + "/getInfo", String.class);}

    启动类注解

    @SpringBootApplication(scanBasePackages = {"cloud.node02.consume", "cloud.block.code.service"})@EnableEurekaClient@EnableDiscoveryClient@EnableFeignClients(basePackages = {"cloud.block.code.service"})public class Application_8002 {    public static void main(String[] args) {        SpringApplication.run(Application_8002.class, args);    }}

    基于Feign服务熔断

    接口定义

    @FeignClient(value = "NODE02-PROVIDER", fallback = FallbackService.class)public interface GetAuthorService {    @RequestMapping(value = "/getAuthorInfo/{authorId}", method = RequestMethod.GET)    String getAuthorInfo(@PathVariable("authorId") String authorId);}

    熔断执行代码

    @Componentpublic class FallbackService implements GetAuthorService {    @Override    public String getAuthorInfo(String authorId) {        return "服务被熔断" + authorId;    }}

    配置文件

    feign:  hystrix:    enabled: true

    服务类注解

    @SpringBootApplication(scanBasePackages = {"cloud.node02.consume", "cloud.block.code.service"})@EnableEurekaClient@EnableDiscoveryClient@EnableFeignClients(basePackages = {"cloud.block.code.service"})public class Application_8002 {    public static void main(String[] args) {        SpringApplication.run(Application_8002.class, args);    }}

    转载地址:http://mnqkz.baihongyu.com/

    你可能感兴趣的文章
    OpenMMLab | S4模型详解:应对长序列建模的有效方法
    查看>>
    OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
    查看>>
    OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
    查看>>
    OpenMV入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
    查看>>
    OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
    查看>>
    OpenPPL PPQ量化(4):计算图的切分和调度 源码剖析
    查看>>
    OpenPPL PPQ量化(5):执行引擎 源码剖析
    查看>>
    openpyxl 模块的使用
    查看>>
    Openresty框架入门详解
    查看>>
    OpenResty(1):openresty介绍
    查看>>
    OpenResty(2):OpenResty开发环境搭建
    查看>>
    openshift搭建Istio企业级实战
    查看>>
    Openstack 之 网络设置静态IP地址
    查看>>
    OpenStack 搭建私有云主机实战(附OpenStack实验环境)
    查看>>
    OpenStack 综合服务详解
    查看>>
    OpenStack 网络服务Neutron详解
    查看>>
    Openstack 网络管理企业级实战
    查看>>
    Openstack(两控制节点+四计算节点)-1
    查看>>
    openstack--memecache
    查看>>
    openstack-keystone安装权限报错问题
    查看>>