feign 第一次调用超时_尚学堂0126天Feign负载均衡及雪崩效应

第241次(httpPool&Hystrix)

学习主题:httpPool&Hystrix

对应作业

  1. 编写支持Gzip压缩案例
    1. 修改Consumer的全局配置文件,添加Gzip相关配置。

#-----------------------------feign gzip

#配置请求 GZIP 压缩

feign.compression.request.enabled=true

#配置响应 GZIP 压缩

feign.compression.response.enabled=true

#配置压缩支持的 MIME TYPE

feign.compression.request.mime-types=text/xml,application/xml,application/json

#配置压缩数据大小的最小阀值,默认 2048

feign.compression.request.min-request-size=512

  1. 为什么http连接池能提升性能
    1. Http的背景原理是什么?

a. 两台服务器建立 http 连接的过程是很复杂的一个过程,涉及到多个数据包的交换,并 且也很耗时间。 b. Http 连接需要的 3 次握手 4 次分手开销很大,这一开销对于大量的比较小的 http 消 息来说更大。

  1. Http优化解决方案有哪些?

a. 如果我们直接采用 http 连接池,节约了大量的 3 次握手 4 次分手;这样能大大提升吞 吐率。 b. feign 的 http 客户端支持 3 种框架;HttpURLConnection、httpclient、okhttp;默认是 HttpURLConnection。 c. 传统的 HttpURLConnection 是 JDK 自带的,并不支持连接池,如果要实现连接池的 机制,还需要自己来管理连接对象。对于网络请求这种底层相对复杂的操作,如果有可用的 其他方案,也没有必要自己去管理连接对象。 d. HttpClient 相比传统 JDK 自带的 HttpURLConnection,它封装了访问 http 的请求头, 参数,内容体,响应等等;它不仅使客户端发送 HTTP 请求变得容易,而且也方便了开发人 员测试接口(基于 Http 协议的),即提高了开发的效率,也方便提高代码的健壮性;另外 高并发大量的请求网络的时候,还是用“连接池”提升吞吐量。

  1. 编写支持Http连接案例
    1. 使用Gzip压缩Http连接的原理是什么?
    2. 使用Gzip压缩Http连接在处理参数时需要注意什么?

将 Feign 的 Http 客户端工具修改为 HttpClient

<!-- 使用Apache HttpClient替换Feign原生httpURLConnection -->

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

</dependency>

<!-- https://mvnrepository.com/artifact/io.github.openfeign/feign-httpclient -->

<dependency>

<groupId>io.github.openfeign</groupId>

<artifactId>feign-httpclient</artifactId>

<version>10.3.0</version>

</dependency>

#使用HttpClient替换默认的HttpURLConnection HttpClient自带连接池

feign:

httpclient:

enabled: true

/**

* 使用HTTPClient提升连接性能,get方式

*

* @param product

* @return

*/

@RequestMapping(value="/add3",method=RequestMethod.GET,consumes=MediaType.APPLICATION_JSON_VALUE)

public Product add3(@RequestBody Product product);

  1. 在微服务的日志中记录每个接口URL,状态码和耗时信息
    1. Logger.Level中NONE表示什么含义?
    2. Logger.Level中BASIC表示什么含义?
    3. Logger.Level中HEADERS表示什么含义?
    4. Logger.Level中FULL表示什么含义?

// NONE:不记录任何信息,默认值

// BASIC:记录请求方法、请求 URL、状态码和用时

// HEADERS:在 BASIC 基础上再记录一些常用信息

// FULL:记录请求和相应的所有信息

  1. 配置Feign负载均衡请求超时时间
    1. 配置Feign负载均衡请求超时时间的作用是什么?
    2. 配置Feign负载均衡请求超时时间分为几种方式?

防止由超时产生的异常

两种,全局配置,根据服务名配置

#全局配置 # 请求连接的超时时间 默认的时间为 1 秒

# 请求处理的超时时间

ribbon:

ConnectTimeout: 5000

ReadTimeout: 5000

Ego-Provider-Provider:

ribbon:

OkToRetryOnAllOperations: true

MaxAutoRetries: 2

MaxAutoRetriesNextServer: 0

ConnectTimeout: 3000

ReadTimeout: 3000

对应作业

  1. 什么是服务灾难性雪崩效应
    1. 什么是灾难性雪崩效应?
    2. 造成雪崩原因是什么?

1)当发起少量请求时一切正常

2)当微服务中某个服务发送了大量请求后,可能会导致系统的某个服务瘫痪

3)由于得不到请求 ,会有更多的请求发送 ,会导致瘫痪掉的服务的上一个服务也会因为进程阻塞而瘫痪 ,以此类推 ,导致某系列功能完全瘫痪

4)因为某些节点服务瘫痪 ,可能会导致整个系统瘫痪 ,这就是雪崩效应的大致原理

1b38313313d929a214fe1de0fd776491.png
  1. 如何解决灾难性雪崩效应
    1. 解决灾难性雪崩效应有哪些方式?
    2. 每种方式的特点是什么?

57d37cfbe801e111fa85cd85ba12fc19.png
  1. 解决灾难性雪崩效应-降级-创建项目
    1. 什么是服务降级?
    2. @EnableCircuitBreaker注解的作用是什么?
    3. @HystrixCommand注解的作用是什么?

对服务做降级处理 , 当服务宕机时, 返回托底数据

添加熔断器,开启熔断

标记该方法为托底方法

  1. 解决灾难性雪崩效应-降级-服务降级处理
    1. 在几种情况下会触发getFallback的调用?

(1) 方法抛出非 HystrixBadRequestException 异常。

(2) 方法调用超时

(3) 熔断器开启拦截调用

(4) 线程池/队列/信号量是否跑满

  1. 解决灾难性雪崩效应-请求缓存-创建项目
    1. 什么是请求缓存?
    2. @EnableCaching注解的作用是什么?

Hystrix 为了降低访问服务的频率,支持将一个请求与返回结果做缓存处理。如果再次请求的 URL 没有变化,那么 Hystrix 不会请求服务,而是直接从缓存中将结果返回。这样可以大大降低访问服务的压力。

Hystrix 自带缓存。

开启本地缓存

  1. 解决灾难性雪崩效应-请求缓存-请求缓存处理
    1. @CacheConfig注解的作用是什么?
    2. @CacheEvict注解的作用是什么?

指定对哪个实体类开启缓存

删除缓存

  1. 解决灾难性雪崩效应-请求合并-创建项目
    1. 什么是请求合并?
    2. 什么情况下使用请求合并?
    3. 请求合并有哪些缺点?

合并请求之后, 将所有请求放在一个list集合中 ,然后统一放到线程池中请求provider

在高并发情况下

设置请求合并之后,本来一个请求可能 5ms 就搞定了,但是现在必须再等 10ms 看看还 有没有其他的请求一起的,这样一个请求的耗时就从 5ms 增加到 15ms 了,不过,如果我们要发起的命令本身就是一个高延迟的命令,那么这个时候就可以使用请求合并了,因为这个时候时间窗的时间消耗就显得微不足道了,另外高并发也是请求合并的一个非常重要的场景。

  1. 解决灾难性雪崩效应-请求合并-请求合并处理
  2. @HystrixCollapser注解的作用是什么?
  3. @HystrixProperty注解的作用是什么?
  4. @HystrixCommand注解的作用是什么?
  5. @HystrixCollapser注解中的batchMethod属性的作用是什么?
  6. @HystrixCollapser注解中的scope属性的作用是什么?
  7. @HystrixCollapser注解中的timerDelayInMiliseconds属性的作用是什么?
  8. @HystrixCollapser注解中的maxRequestsInBatch属性的作用是什么?

@HystrixCollapser(合并参数的设置)

@HystrixProperty请求时间间隔合并参数的设置

@HystrixCommand (真正调用provider的方法 形参必须是list不能是数组)

batchMethod 合并请求的方法

scope 请求方式

timerDelayInMiliseconds求时间间隔设置, 默认 为 10ms

maxRequestsInBatch允许的最大并发请求数

  1. 解决灾难性雪崩效应-服务熔断-创建项目
    1. 什么是服务熔断?

相当于电路的跳闸功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值