学习主题:httpPool&Hystrix

学习目标:

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

1. 编写支持Gzip压缩案例

(1) 修改Consumer的全局配置文件,添加Gzip相关配置。

spring.application.name=eureka-consumer-httpclientserver.port=9002#-----------------------------feign gzip#配置请求 GZIP 压缩feign.compression.request.enabled=true#配置响应 GZIP 压缩feign.compression.response.enabled=true#配置压缩支持的 MIME TYPEfeign.compression.request.mime-types=text/xml,application/xml,application/json#配置压缩数据大小的最小阀值,默认 2048feign.compression.request.min-request-size=512#2.2.2对客户端浏览器的请求以及 Consumer 对 provider 的请#求与响应做 Gzip 压缩#-----------------------------spring boot gzip#是否启用压缩server.compression.enabled=trueserver.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain#启用httpclientfeign.httpclient.enabled=true#设置服务注册中心地址,指向另一个注册中心eureka.client.service-url.defaultZone=http://user:123@eureka2:8761/eureka/,http://user:123@eureka1:8761/eureka/

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

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

1. 两台服务器建立http连接的过程是很复杂的一个过程,涉及到多个数据包的交唤1,并且也很耗时

2. 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连接的原理是什么?

实际是将json格式的文本信息压缩进行传输 增加传递效率

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

需要添加json格式的注解 @RequestBody

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

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

不记录任何信息 ,默认

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

记录请求方法,请求url,状态码,和用时

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

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

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

记录请求和响应的所有信息

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

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

可能由于服务处理的请求较长就中断了该连接是不对的

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

全局配置 或者 局部配置

#全局配置/指定配置#对所有操作请求都进行重试eureka-provider.ribbon.OkToRetryOnAllOperations=true#对当前实例的重试次数eureka-provider.ribbon.MaxAutoRetries=2#切换实例的重试次数eureka-provider.ribbon.MaxAutoRetriesNextServer=0#设置eureka-provider生产者的ribbon链接超时时间eureka-provider.ribbon.ReadTimeout=3000# 请求连接的超时时间默认的时间为1秒eureka-provider.ribbon.ConnectTimeout=3000

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第242次(httpPool&Hystrix)

学习主题:httpPool&Hystrix

学习目标:

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

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

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

在微服务架构中,一个请求需要调用多个服务是非常常见的。如客户端访问A服务,而A服务需要调用B服务,B服务需要调用C服务,由于网络原因或者自身的原因,如果B服务或者C服务不能及时响应,A服务将处于阻塞状态,直到B服务C服务响应。此时若有大量的请求涌入,容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,造成连锁反应,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

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

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

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

降级:

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

隔离(线程池隔离和信号量隔离)

限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用

熔断

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

缓存

提供了请求缓存

请求合并

提供了请求合并

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

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

(1) 什么是服务降级?

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

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

开启熔断器 当某服务出现异常时,可以跳至其他方法处理

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

此注解表示此方法是hystrix方法

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

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

雪崩效应的服务的降级处理

当服务出现异常时触发

方法抛出非HystrixBadRequestException异常

方法调用超时

熔断器开启拦截调用

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

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

(1) 什么是请求缓存?

将相同请求的返回值和URL 存入redis数据库 ,下次再有相同的请求时就可以直接响应结果

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

Hystrix自带缓存,有两个缺点

1. 是一个本地缓存,再集群情况下缓存是不能同步的

2. 不支持第三方缓存容器,Redis,memcache不支持的可以使用spring的cache

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

开启缓存

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

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

这个用于配置该类会用到的一些共用的缓存配置 ,

例如:

@CacheConfig(cacheNames=”users”) : 配置了该数据访问对象中返回的内容将存储于名为users的对象中,我们也可以不用该注解,直接通过@Cacheable自己配置缓存集的名字来定义

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

删除数据时自动去redis数据库中删除缓存

(3).@Cacheable :配置了此注解的返回值将被加入缓存,同时在查询时,会从缓存中获取,如果不存在缓存才发起对数据库的访问

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

(1) 什么是请求合并?

将多个类似的请求合并成一个请求 再去请求数据

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

在高并发情况下,通信次数的增加会导致总的通信时间增加,同时,线程池的资源也是有限的,高并发环境会导致大量的线程处于等待状态,进而导致响应延迟

进而需要Hystrix的请求合并

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

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

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

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

使用hystrix的合并请求

被@HystrixCollapser标注的方法,返回类型必须为Future,使用异步方法,否则无法进行请求并行

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

设置请求并行参数

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

配置属性

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

合并请求的方法

方法只能接受一个参数,如果你需要传递多个参数,那么请将他们封装成一个类参数

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

请求方式 默认REQUEST

请求方式: 分为 REQUEST,GLOBAL

REQUEST范围只对一个request请求内的多次服务请求进行合并

GlOBAL 是多单个应用中的所有线程的请求中的多次服务请求进行合并

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

请求时间间隔在10ms(默认)之内的请求会被合并为一个请求

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

设置触发批处理执行之前, 在批处理中允许的最大请求数 默认Integer.MAX_VALUE

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

(1) 什么是服务熔断?

当电压过大时,保险丝自动熔断的意思

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

wget 地址 连接超时_HttoPool连接池 和Hystrix 服务容错机制相关推荐

  1. c3p0 服务启动获取连接超时_JDBC数据库连接池

    连接池的本质是构建一个容器,容器是用来存创建好的线程,http连接.数据库连接.netty连接等 各个连接池的使用大致分为三个部分 1.首先是初始化连接池,根据设置相应的参数.连接池的大小.核心连接数 ...

  2. oracle池式连接超时,oracle连接由于防火墙设置导致超时的问题

    当应用程序使用数据库连接池进行数据连接时,防火墙的设置有可能会导致连接出现超时或者被重置的问题.当从数据库读数据的时候 有可能会 Connection timed out, 这是由于应用会缓存数据连接 ...

  3. 极递云课显示服务器连接超时,服务器连接问题

    我是先 在python shell下操作的, import libvirt hosturi = 'qemu+ssh://strahe@localhost/system' host = libvirt. ...

  4. linux服务器sftp无法连接超时,sftp连接服务器失败

    实际工作例子: 在windows上用XShell工具时,某服务器长时间都没有反应. 但是ssh登录仍然可以正常连接. 换用linux上的sftp命令来连接时,出现了一些错误信息: [root@TS-3 ...

  5. 网页 服务器长连接超时时间,服务器设置长连接超时时间

    服务器设置长连接超时时间 内容精选 换一换 有以下几种现象:将制作好的SD卡插入开发者板并上电后,开发者板LED1与LED2灯状态信息异常.将制作好的SD卡插入开发者板,并通过USB方式连接Ubunt ...

  6. conda下载出现连接超时怎么办

    conda下载出现连接超时怎么办 文章目录: 一.连接超时原因 二.解决conda下载超时的两种办法 1.添加下载镜像地址 2.conda通过参数设置修改超时时间 三.超时依旧没有解决的其他原因 一. ...

  7. php 客户端socket长连接超时,[PHP] socket客户端时的超时问题

    连接socket分为连接超时和读取超时 $sock=stream_socket_client("www.google.com:80", $errno,$errstr,2);    ...

  8. 连接超时_记一次网络请求连接超时的事故

    点击上方蓝色字关注我们~前言 从HTTP请求超时.重试机制.操作系统网络等层面剖析了事故的原因,最终解决业务问题. 这里先抛两个问题: 1)你遭遇过由于网络连接或请求超时造成的生产事故吗? 2)你知道 ...

  9. 4g网络设置dns地址_你还没搞明白凭啥就你的手机网络不佳连接超时?

    早先时候,春节是汉族最重要最隆重的传统节日,现在逐渐的演化为全国乃至全球最为重要的庆典节日之一.每逢春节,外出的游子归来,大家都开开心心的聚在一起,或打牌.或聊天.或打游戏.而说到游戏就不能不提现在大 ...

最新文章

  1. ViSP创建之VS工程详细创建步骤(命令行方式)
  2. Android友盟增量更新
  3. 新概念C语言能力教程练习3答案,新概念C语言教程答案参考(自做)中国电力
  4. GARFIELD@07-02-2005
  5. 《白帽子将Web安全》摘抄
  6. 1 ~ express ~ 初始化。安装第三方模块express。中间件
  7. Android文本框输入汉字,android中EditText输入类型为何不能设置为中文
  8. 怎样让一个心浮气躁的孩子静下心学习?
  9. 使用YAML创建一个 Kubernetes Depolyment
  10. 拓端tecdat|在UBUNTU虚拟机上安装R软件包
  11. Python pip 命令详解
  12. 配置高并发jdbc连接池
  13. RFCOMM简单介绍
  14. ubuntu18.04+cuda9.0+lenovo y430p(GTX850M)亲测可用
  15. 9 Greenplum高级使用
  16. 医疗卫生信息化领域的一些术语和标准
  17. IC数字芯片学习各类公众号汇总
  18. [唐诗]秋夜喜遇王处士-王绩
  19. 面试题总结 —— JAVA高级工程师
  20. 使用jquery ajax调用后台方法 有时候不调用回调函数

热门文章

  1. codeforces 50A-C语言解题报告
  2. 水滴石穿C语言之指针、数组和函数
  3. vector 、map 、iterator 之学习笔记
  4. 多线程编程指南 part 2
  5. 程序员成长最快的环境
  6. 解决 : Apache Tomcat/8.0.0-RC1 - Error report ... HTTP Status 404
  7. 7.11牛客题(指针)
  8. 基于BISS0001构成的热释电红外延时照明控制器电路图
  9. 怎么让织梦文章按照权重排序
  10. bind简单转发实验