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

#-----------------------------spring boot gzip
#是否启用压缩
server.compression.enabled=true
server.compression.mime-types=application/json,application/
xml,text/html,text/xml,text/plain

2.为什么http连接池能提升性能

(1)Http的背景原理是什么?

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

(2)Http优化解决方案有哪些?

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

3.编写支持Http连接案例

(1)使用Gzip压缩Http连接的原理是什么?

(2)使用Gzip压缩Http连接在处理参数时需要注意什么?

如果参数为对象数属性,则需添加consumes=MediaType.APPLICATION_JSON_VALUE

4.在微服务的日志中记录每个接口URL,状态码和耗时信息

(1)Logger.Level中NONE表示什么含义?

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

(2)Logger.Level中BASIC表示什么含义?

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

(3)Logger.Level中HEADERS表示什么含义?

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

(4)Logger.Level中FULL表示什么含义?

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

5.配置Feign负载均衡请求超时时间

(1)配置Feign负载均衡请求超时时间的作用是什么?

#全局配置
#请求连接的超时时间 默认的时间为 1 秒
ribbon.ConnectTimeout=5000
#请求处理的超时时间
ribbon.ReadTimeout=5000

#局部配置# 对所有操作请求都进行重试
ego-product-provider.ribbon.OkToRetryOnAllOperations=true
#对当前实例的重试次数
ego-product-provider.ribbon.MaxAutoRetries=2
#切换实例的重试次数
ego-product-providert.ribbon.MaxAutoRetriesNextServer=0
请求连接的超时时间
ego-product-provider.ribbon.ConnectTimeout=3000
#请求处理的超时时间
ego-product-provider.ribbon.ReadTimeout=3000

(2)配置Feign负载均衡请求超时时间分为几种方式?

6.什么是服务灾难性雪崩效应

(1)什么是灾难性雪崩效应?

一个服务器不能正常工作,则有可能影响很多服务器瘫痪

(2)造成雪崩原因是什么?

在这里插入图片描述

7.如何解决灾难性雪崩效应

(1)解决灾难性雪崩效应有哪些方式?

1.降级2.缓存3.请求合并4.熔断5。隔离

(2)每种方式的特点是什么?

降级
超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据。
实现一个 fallback 方法, 当请求后端服务出现异常的时候, 可以使用 fallback 方法返回的值.
隔离(线程池隔离和信号量隔离)
限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。熔断
当失败率(如因网络故障/超时造成的失败率高)达到阀值自动触发降级,熔断器触发的快
速失败会进行快速恢复。
缓存
提供了请求缓存。
请求合并
提供请求合并。

8.解决灾难性雪崩效应-降级-创建项目

(1)什么是服务降级?

超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据。
实现一个 fallback 方法, 当请求后端服务出现异常的时候, 可以使用 fallback 方法返回的值.

(2)@EnableCircuitBreaker注解的作用是什么?

开启熔断器

(3)@HystrixCommand注解的作用是什么?

服务容错性注解

9.解决灾难性雪崩效应-降级-服务降级处理

(1)在几种情况下会触发getFallback的调用?

(1)方法抛出非 HystrixBadRequestException 异常。
(2) 方法调用超时
(3) 熔断器开启拦截调用
(4) 线程池/队列/信号量是否跑满

10.解决灾难性雪崩效应-请求缓存-创建项目

(1)什么是请求缓存?

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

(2)@EnableCaching注解的作用是什么?

在启动类中配置启动缓存

11.解决灾难性雪崩效应-请求缓存-请求缓存处理

(1)@CacheConfig注解的作用是什么?

缓存配置

(2)@CacheEvict注解的作用是什么?

删除缓存

12.解决灾难性雪崩效应-请求合并-创建项目

(1)什么是请求合并?

服务的一端发送多个请求合并成一个请求发给另外一个服务

(2)什么情况下使用请求合并?

在微服务架构中,我们将一个项目拆分成很多个独立的模块,这些独立的模块通过远程
调用来互相配合工作,但是,在高并发情况下,通信次数的增加会导致总的通信时间增加,
同时,线程池的资源也是有限的,高并发环境会导致有大量的线程处于等待状态,进而导致 响应延迟,为了解决这些问题,我们需要来了解 Hystrix 的请求合并。

(3)请求合并有哪些缺点?

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

13.解决灾难性雪崩效应-请求合并-请求合并处理

(1)@HystrixCollapser注解的作用是什么?

合并请求注解,且方法返回值必须是future

(2)@HystrixProperty注解的作用是什么?

@HystrixCommand的commandProperties配置@HistrixProperty隔离策略

(3)@HystrixCommand注解的作用是什么?

容错性注解

(4)@HystrixCollapser注解中的batchMethod属性的作用是什么?

合并请求的方法

(5)@HystrixCollapser注解中的scope属性的作用是什么?

请求方式

(6)@HystrixCollapser注解中的timerDelayInMiliseconds属性的作用是什么?

请求时间间隔在10s之内的请求会合并为一个请求

(7)@HystrixCollapser注解中的maxRequestsInBatch属性的作用是什么?

设置触发批处理请求执行之前,批处理的最大请求数

14.解决灾难性雪崩效应-服务熔断-创建项目

(1)什么是服务熔断?

当失败率(如因网络故障/超时造成的失败率高)达到阀值自动触发降级,熔断器触发的快
速失败会进行快速恢复。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值