服务雪崩

多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和C又调用其它微服务,这就是“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,即为雪崩效应。

Hystrix

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里面,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式的弹性。
断路器,本身是一个开关装置,当某个服务单元发生故障后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的,可处理的备选响应(FallBack),而不是长时间等待或者抛出异常,这样就保证了服务调用方的线程不被长时间,不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

作用:

  • 服务降级
    服务器忙,请稍后再试,客户端一个友好提示(异常,超时等)
  • 服务熔断
    类比保险丝,达到最大服务访问后,直接拒绝访问,拉闸限电。然后调用服务降级的方法并返回友好提示
    过程===》
    服务的降级---->进而熔断----->恢复调用的链路。
  • 接近实时的监控
  • 服务 限流等
    秒杀高并发等操作,严禁一窝蜂的过来拥挤,大家排队,一秒钟N个,有序进行。

编码模拟

  • 创建cloud-provider-hystrix-paymant8001模块
  • 导依赖
 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.example</groupId><artifactId>cloud-api-commons</artifactId><version>${project.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><!--mysql-connector-java--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--jdbc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency></dependencies>

yml

server:port: 8001spring:application:name: cloud-provider-hystrix-paymentdatasource:type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: *******eureka:client:register-with-eureka: truefetch-registry: trueservice-url:
#      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eurekadefaultZone: http://eureka7001.com:7001/eureka
  • 主启动
@SpringBootApplication
@EnableEurekaClient
public class PaymentHystrixMain8001 {public static void main(String[] args) {SpringApplication.run(PaymentHystrixMain8001.class,args);}}
  • service
package ink.awz.springcloud.service;import org.springframework.stereotype.Service;import java.util.concurrent.TimeUnit;@Service
public class PaymentService {public String paymentInfo_OK(Integer id) {return "线程池:   "+Thread.currentThread().getName()+"paymentInfo_OK,id:  "+id+"\t"+"haha";}public String paymentInfo_TimeOut(Integer id) {try {TimeUnit.SECONDS.sleep(3);} catch (InterruptedException e) {throw new RuntimeException(e);}return "线程池:   "+Thread.currentThread().getName()+"paymentInfo_OK,id:  "+id+"\t"+"耗时3秒钟";}
}
  • controller
package ink.awz.springcloud.controller;import ink.awz.springcloud.service.PaymentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;@RestController
@Slf4j
public class PaymentController {@Autowiredprivate PaymentService paymentService;@Value("${server.port}")private String serverPort;@GetMapping("/payment/hystrix/ok/{id}")public String paymentInfo_OK(@PathVariable("id") Integer id) {String result = paymentService.paymentInfo_OK(id);log.info("result"+result);return result;}@GetMapping("/payment/hystrix/timeOut/{id}")public String paymentInfo_timeOut(@PathVariable("id") Integer id) {String result = paymentService.paymentInfo_TimeOut(id);log.info("result"+result);return result;}
}

关联下一篇JMeter压力测试工具

Hystrix 豪猪哥相关推荐

  1. SpringCloud学习记录 | 第十篇:Hystrix DashBoard 实时图像监控界面(豪猪哥)

    一.Hystrix DashBoard Hystrix提供了准实时的调用监控(Hystrix Dashboard),Hystrix会持续记录所有的通过Hystrix发起的请求执行信息,并以统计报表和图 ...

  2. 微服务——Hystrix断路器(豪猪哥)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 概述 分布式系统面临的问题 是什么 能干嘛 Hystrix重要概念 服务降级(fallback) 哪些情况会触发降级 服务熔 ...

  3. 服务熔断 hystrix(豪猪哥)

    前提 为何需要服务熔断 没有熔断服务会导致一个服务挂掉后,另一个服务也收到影响,也挂掉,以此类推.(故障蔓延) 0.Hystrix防止故障蔓延,通过控制那些访问的远程的服务结点,提供强大的故障和延迟提 ...

  4. Spring Cloud H (五)初战服务降级和熔断Hystrix(豪猪哥)

    目录 目录 前言 概述 服务雪崩 服务限流 服务降级 服务熔断 如何理解服务降级和熔断之间的关系 代码实战 Hystrix支付微服务构建 订单微服务调用支付服务出现卡顿 Hystrix之服务降级支付侧 ...

  5. SpringCloud04-Ribbon、OpenFeign、Hystrix

    SpringCloud04 Ribbon负载均衡服务调用 一.Ribbon 二.Ribbon的负载均衡和Rest调用 pom RestTemplate的使用 三.Ribbon负载规则 四.Ribbon ...

  6. SpringCloud学习使用(三)——Hystrix

    Hystrix介绍 在分布式环境中,不可避免地会有许多服务依赖项中的某些失败.Hystrix是一个库,可通过添加等待时间容限和容错逻辑来帮助您控制这些分布式服务之间的交互.Hystrix通过隔离服务之 ...

  7. [云原生]微服务架构是什么

    作者简介:大家好,我是?让我们一起共同进步吧!?? ??个人主页:的csdn博客 ??系列专栏: 数据结构与算法 ??哲学语录: 承认自己的无知,乃是开启智慧的大门 ??如果觉得博主的文章还不错的话, ...

  8. 【Java学习路线之JavaWeb】Spring Cloud教程(非常详细)

    文章目录 读者 阅读条件 微服务是什么 微服务,我们可以从字面上去理解,即"微小的服务",下面我们从"服务"和"微小"两个方面进行介绍. 微 ...

  9. 【Sentinel】

    提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一. 服务雪崩 二. 断路器 三. Sentinel的下载和安装 Windows下安装 docker安装 四.初始化监控 1 ...

最新文章

  1. 具有缺失值的多元时间序列的递归神经网络
  2. python 同步 互斥 信号量 锁 简介
  3. POJ 1806 Manhattan 2025
  4. linux指令 find指令详解
  5. Python文件与目录操作
  6. 首届CCF真题5-任务调度
  7. Hibernate关联映射(一对多/多对多)
  8. 【JVM】ZGC简介
  9. JMETER 线程组
  10. 多源最短路径---Floyd-Warshall算法
  11. vb.net编写函数应该在哪里_编写代码时清晰至上
  12. Qt与Visual Assitst X的集成问题
  13. 安卓平台中的动态加载技术分析
  14. 今天看C++Primer发现的问题
  15. 兄弟7895dw粉盒清零_兄弟brother打印机清零大全
  16. java定义上三角矩阵,数据结构-矩阵-三角矩阵(Java语言)
  17. 下载Linux系统内文件到Windows
  18. 【文献心得】关于内核在不同芯片平台移植的相关整理
  19. 优酷、腾讯视频播放器接口参数说明
  20. mysql参数之max_connect_errors

热门文章

  1. relu函数的优缺点
  2. 音频振动数据采集卡的技术参数-阿尔泰科技
  3. 【视觉-结构光三维重建-理论篇】结构光 三维重建----论文调研3
  4. 小程序基础入门(黑马学习笔记)
  5. 计算机一级msoffice讲义,XX全国一级计算机基础及MS Office应用讲义
  6. 百度软件测试工程师 智能硬件面试,百度智能硬件质量白皮书(1)
  7. php公式,Haversine公式与PHP
  8. HTTP中的API是什么?
  9. 【c++刷题Day3】专题4T3
  10. linux env 变量,Linux下 输入 env 而得到的环境变量解读