云社区 博客 博客详情

第五阶段10.30运维 开发 实施 测试

SegmentFault思否 发表于 2020-10-31 22:25:54 2020-10-31
0
0

【摘要】 ribbonribbon 提供了负载均衡和重试功能, 它底层是使用 RestTemplate 进行 Rest api 调用RestTemplateRestTemplate是SpringBoot提供的一个Rest远程调用工具它的常用方法:getForObject() 执行get请求postForObject() 执行post请求ribbon负载均衡和重试Ribbon负载均衡...

ribbon

ribbon 提供了负载均衡和重试功能, 它底层是使用 RestTemplate 进行 Rest api 调用

RestTemplate

RestTemplate是SpringBoot提供的一个Rest远程调用工具
它的常用方法:
getForObject() 执行get请求
postForObject() 执行post请求

ribbon负载均衡和重试

image.png

Ribbon负载均衡

image.png

RestTemplate 设置 @LoadBalanced

@LoadBalanced 负载均衡注解,会对 RestTemplate 实例进行封装,创建动态代理对象,并切入(AOP)负载均衡代码,把请求分发到集群中的服务器

ribbon重试

image.png
1.添加spring-retry依赖
2.ribbon:
MaxAutoRetriesNextServer: 2
MaxAutoRetries: 1
OkToRetryOnAllOperations: true
OkToRetryOnAllOperations=true
默认只对GET请求重试, 当设置为true时, 对POST等所有类型请求都重试
MaxAutoRetriesNextServer
更换实例的次数
MaxAutoRetries
当前实例重试次数,尝试失败会更换下一个实例

Hystrix断路器

image.png
微服务宕机时,ribbon无法转发请求

添加hystrix依赖

修改application.yml

string:
application:

name: hystrix

主程序添加 @EnableCircuitBreaker启用hystrix断路器

启动断路器,断路器提供两个核心功能:

  • 降级,超时、出错、不可到达时,对服务降级,返回错误信息或者是缓存数据
  • 熔断,当服务压力过大,错误比例过多时,熔断所有请求,所有请求直接降级
  • 可以使用 @SpringCloudApplication 注解代替三个注解

在contller中添加降级方法例如getItems()中添加getItemsFB()
添加 @HystrixCommand 注解,指定降级方法名

hystrix超时设置

hystrix等待超时后, 会执行降级代码, 快速向客户端返回降级结果, 默认超时时间是1000毫秒

为了测试 hystrix 降级,我们把 hystrix 等待超时设置得非常小(500毫秒)

此设置一般应大于 ribbon 的重试超时时长,例如 10 秒
hystrix:
command:

default:
  execution: isolation: thread: timeoutInMilliseconds: 500

hystrix dashboard断路器仪表盘

hystrix 对请求的降级和熔断,可以产生监控信息,hystrix dashboard可以实时的进行监控
actuator 是 spring boot 提供的服务监控工具,提供了各种监控信息的监控端点

management.endpoints.web.exposure.include 配置选项,
可以指定端点名,来暴露监控端点

如果要暴露所有端点,可以用 “*”
image.png
1.添加autuator依赖
2.management:
endpoints:

web:
  exposure: include: hystrix.stream

访问actuator路径 查看监控端点

http://localhost:端口号/actuator

Hystrix dashboard仪表盘

image.png
1.添加依赖 Hystrix Dashboard
和Eureka Discovery Client
2.yml配置
hystrix:
dashboard:

proxy-stream-allow-list: localhost

3.主程序添加### @EnableHystrixDashboard@EnableDiscoveryClient

hystrix熔断

整个链路达到一定的阈值,默认情况下,10秒内产生20次请求,则符合第一个条件,满足第一个条件的情况下,如果请求的错误百分比大于阈值,则会打开断路器,默认为50%。
Hystrix的逻辑,先判断是否满足第一个条件,再判断第二个条件,如果两个条件都满足,则会开启断路器

断路器打开 5 秒后,会处于半开状态,会尝试转发请求,如果仍然失败,保持打开状态,如果成功,则关闭断路

使用apache的并发访问测试工具ab

image.png

用 ab 工具,以并发50次,来发送20000个请求

ab -n 20000 -c 50http://localhost:3001/item-service/35
断路器状态为open,所有请求会被短路,直接降级执行fallback方法

hystrix配置

hystrix.command.default.execution.isolation.thread.timeoutInmilliseconds
请求超时时间,超时后,出发失败降级

hystrix.command.default.circuitBreaker.requestVolumeThreshold
10秒内请求数量,默认20,如果没有达到该数量,即使请求全部失败,也不会触发3断路器打开

hystrix.command.default.circuiBreaker.errorThresholdPercentage
失败请求百分比,达到该比例则触发断路器打开

hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds
断路器打开多长时间后,再次允许尝试访问(半开),仍失败则继续保持打开状态,如果成功访问则关闭断路器,默认5000
源码: https://github.com/benwang6/spring-cloud-repo

feign声明式客户端接口

微服务应用中,ribbon和hystrix总是同时出现,feign整合了两者,并提供了声明式消费者客户端
1.添加依赖
image.png
主程序添加@EnableDiscoveryClient和@EnablefeignClient

feign声明式客户端

image.png
如果请求参数名与方法参数名不同@RequestParam不能省略,并且要指定请求参数名:
@RequestParam("score") Integer s

feign+ribbon 负载均衡和重试

无需额外配置,feign默认已启用了ribbon负载均衡和重试机制,可以通过配置对参数进行调整
image.png

yml配置ribbon超时和重试

ribbon.xxx全局配置
item-service.ribbon.xxx 对特定服务实例的配置
image.png

feign+hystrix降级

feign默认没有启用hystrix,添加配置,启用hystrix
feign.hystrix.enabled=true

可以添加配置,暂时减小降级超时时间,以便后续对降级进行测试

image.png

feign+hystrix监控和熔断测试

配置actuator 暴露htstrix.stream监控端点
yml暴露hystrix.stream端点
image.png

Feign集成Hystrix

默认不启用Hystrix,Feign不推荐启用hystrix
如果有特殊需求要启用hystrix,首先做基础配置
1.添加hystrix的完整依赖
2.添加@EnableCircuiBreaker
3.yml配置feign.hystrix.enabled=true

降级

在声明式客户端接口的注解中,指定一个降级类
降级类要作为声明式客户端接口的子类来定义

hystrix监控

用actuator暴露hystrix.stream监控端点
1.actuator依赖
2.暴露监控端点
m.e.w.e.i=hystrix.stream
3.http://localhost:3001/actuator/hystrix.stream
4.通过调用后台服务,
监控代码 ab -n 20000 -c 10 http:localhost:3001/user-service/7

文章来源: segmentfault.com,作者:木木,版权归原作者所有,如需转载,请联系作者。

原文链接:segmentfault.com/a/1190000037674241

登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 0
点赞
分享文章到微博
分享文章到朋友圈

上一篇:快给我进来看linux操作系统下C语言多线程同步使用指南

下一篇:使用Go进行io_uring的动手实践

评论 (0)


登录后可评论,请 登录注册

评论