wget 地址 连接超时_HttoPool连接池 和Hystrix 服务容错机制
學(xué)習(xí)主題:httpPool&Hystrix
學(xué)習(xí)目標(biāo):
對應(yīng)視頻:
http://www.itbaizhan.cn/course/id/85.html
對應(yīng)文檔:
無
對應(yīng)作業(yè)
1. 編寫支持Gzip壓縮案例
(1) 修改Consumer的全局配置文件,添加Gzip相關(guān)配置。
spring.application.name=eureka-consumer-httpclientserver.port=9002#-----------------------------feign gzip#配置請求 GZIP 壓縮feign.compression.request.enabled=true#配置響應(yīng) GZIP 壓縮feign.compression.response.enabled=true#配置壓縮支持的 MIME TYPEfeign.compression.request.mime-types=text/xml,application/xml,application/json#配置壓縮數(shù)據(jù)大小的最小閥值,默認(rèn) 2048feign.compression.request.min-request-size=512#2.2.2對客戶端瀏覽器的請求以及 Consumer 對 provider 的請#求與響應(yīng)做 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#設(shè)置服務(wù)注冊中心地址,指向另一個注冊中心eureka.client.service-url.defaultZone=http://user:123@eureka2:8761/eureka/,http://user:123@eureka1:8761/eureka/
2. 為什么http連接池能提升性能
(1) Http的背景原理是什么?
1. 兩臺服務(wù)器建立http連接的過程是很復(fù)雜的一個過程,涉及到多個數(shù)據(jù)包的交喚1,并且也很耗時
2. Http連接需要的3次握手4次分手開銷很大.這一開銷對于大量的比較小的http消息來說更大
(2) Http優(yōu)化解決方案有哪些?
a. 如果我們直接采用 http 連接池,節(jié)約了大量的 3 次握手 4 次分手;這樣能大大提升吞
吐率。
b. feign 的 http 客戶端支持 3 種框架;HttpURLConnection、httpclient、okhttp;默認(rèn)是
HttpURLConnection。
c. 傳統(tǒng)的 HttpURLConnection 是 JDK 自帶的,并不支持連接池,如果要實(shí)現(xiàn)連接池的
機(jī)制,還需要自己來管理連接對象。對于網(wǎng)絡(luò)請求這種底層相對復(fù)雜的操作,如果有可用的
其他方案,也沒有必要自己去管理連接對象。
d. HttpClient 相比傳統(tǒng) JDK 自帶的 HttpURLConnection,它封裝了訪問 http 的請求頭,
參數(shù),內(nèi)容體,響應(yīng)等等;它不僅使客戶端發(fā)送 HTTP 請求變得容易,而且也方便了開發(fā)人
員測試接口(基于 Http 協(xié)議的),即提高了開發(fā)的效率,也方便提高代碼的健壯性;另外
高并發(fā)大量的請求網(wǎng)絡(luò)的時候,還是用“連接池”提升吞吐量。
3. 編寫支持Http連接案例
(1) 使用Gzip壓縮Http連接的原理是什么?
實(shí)際是將json格式的文本信息壓縮進(jìn)行傳輸 增加傳遞效率
(2) 使用Gzip壓縮Http連接在處理參數(shù)時需要注意什么?
需要添加json格式的注解 @RequestBody
4. 在微服務(wù)的日志中記錄每個接口URL,狀態(tài)碼和耗時信息
(1) Logger.Level中NONE表示什么含義?
不記錄任何信息 ,默認(rèn)
(2) Logger.Level中BASIC表示什么含義?
記錄請求方法,請求url,狀態(tài)碼,和用時
(3) Logger.Level中HEADERS表示什么含義?
在BASIC基礎(chǔ)上再記錄一些常用信息
(4) Logger.Level中FULL表示什么含義?
記錄請求和響應(yīng)的所有信息
5. 配置Feign負(fù)載均衡請求超時時間
(1) 配置Feign負(fù)載均衡請求超時時間的作用是什么?
可能由于服務(wù)處理的請求較長就中斷了該連接是不對的
(2) 配置Feign負(fù)載均衡請求超時時間分為幾種方式?
全局配置 或者 局部配置
#全局配置/指定配置#對所有操作請求都進(jìn)行重試eureka-provider.ribbon.OkToRetryOnAllOperations=true#對當(dāng)前實(shí)例的重試次數(shù)eureka-provider.ribbon.MaxAutoRetries=2#切換實(shí)例的重試次數(shù)eureka-provider.ribbon.MaxAutoRetriesNextServer=0#設(shè)置eureka-provider生產(chǎn)者的ribbon鏈接超時時間eureka-provider.ribbon.ReadTimeout=3000# 請求連接的超時時間默認(rèn)的時間為1秒eureka-provider.ribbon.ConnectTimeout=3000
分享/講解/擴(kuò)展思考
點(diǎn)名提問從第一節(jié)課到最后一節(jié)課分別學(xué)到了什么,直到同學(xué)們把所有的知識點(diǎn)都說出來并且保證無誤。
第242次(httpPool&Hystrix)
學(xué)習(xí)主題:httpPool&Hystrix
學(xué)習(xí)目標(biāo):
對應(yīng)視頻:
http://www.itbaizhan.cn/course/id/85.html
對應(yīng)文檔:
無
對應(yīng)作業(yè)
6. 什么是服務(wù)災(zāi)難性雪崩效應(yīng)
(1) 什么是災(zāi)難性雪崩效應(yīng)?
在微服務(wù)架構(gòu)中,一個請求需要調(diào)用多個服務(wù)是非常常見的。如客戶端訪問A服務(wù),而A服務(wù)需要調(diào)用B服務(wù),B服務(wù)需要調(diào)用C服務(wù),由于網(wǎng)絡(luò)原因或者自身的原因,如果B服務(wù)或者C服務(wù)不能及時響應(yīng),A服務(wù)將處于阻塞狀態(tài),直到B服務(wù)C服務(wù)響應(yīng)。此時若有大量的請求涌入,容器的線程資源會被消耗完畢,導(dǎo)致服務(wù)癱瘓。服務(wù)與服務(wù)之間的依賴性,故障會傳播,造成連鎖反應(yīng),會對整個微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果,這就是服務(wù)故障的“雪崩”效應(yīng)。
(2) 造成雪崩原因是什么?
7. 如何解決災(zāi)難性雪崩效應(yīng)
(1) 解決災(zāi)難性雪崩效應(yīng)有哪些方式?
降級:
超時降級 , 資源不足時(線程或信號量)降級,降級后可以配置降級接口返回托底數(shù)據(jù),實(shí)現(xiàn)一個fallback方法,當(dāng)請求后端服務(wù)出現(xiàn)異常的時候,可以使用fallback方法返回的值
隔離(線程池隔離和信號量隔離)
限制調(diào)用分布式服務(wù)的資源使用,某一個調(diào)用的服務(wù)出現(xiàn)問題不會影響其他服務(wù)調(diào)用
熔斷
當(dāng)失敗率(如因網(wǎng)絡(luò)故障/超時造成的失敗率高)到達(dá)閾值自動觸發(fā)降級,熔斷器觸發(fā)的快速失敗會進(jìn)行快速恢復(fù)
緩存
提供了請求緩存
請求合并
提供了請求合并
(2) 每種方式的特點(diǎn)是什么?
8. 解決災(zāi)難性雪崩效應(yīng)-降級-創(chuàng)建項(xiàng)目
(1) 什么是服務(wù)降級?
超時,資源不足時 ,線程降級 ,降級后可以配合降級接口返回托底數(shù)據(jù) 實(shí)現(xiàn)一個fallback方法,當(dāng)請求后端服務(wù)出現(xiàn)異常的時候, 可以使用fallback方法返回的值
(2) 查實(shí)@EnableCircuitBreaker注解的作用是什么?
開啟熔斷器 當(dāng)某服務(wù)出現(xiàn)異常時,可以跳至其他方法處理
(3) @HystrixCommand注解的作用是什么?
此注解表示此方法是hystrix方法
9. 解決災(zāi)難性雪崩效應(yīng)-降級-服務(wù)降級處理
(1) 在幾種情況下會觸發(fā)getFallback的調(diào)用?
雪崩效應(yīng)的服務(wù)的降級處理
當(dāng)服務(wù)出現(xiàn)異常時觸發(fā)
方法拋出非HystrixBadRequestException異常
方法調(diào)用超時
熔斷器開啟攔截調(diào)用
線程池/隊(duì)列/信號量是否跑滿
10. 解決災(zāi)難性雪崩效應(yīng)-請求緩存-創(chuàng)建項(xiàng)目
(1) 什么是請求緩存?
將相同請求的返回值和URL 存入redis數(shù)據(jù)庫 ,下次再有相同的請求時就可以直接響應(yīng)結(jié)果
Hystrix為了降低訪問服務(wù)的概率,支持將一個請求與返回結(jié)果做緩存處理,如果再次請求的URL沒有變化,那么Hystrix不會請求服務(wù),而是直接從緩存中將結(jié)果返回,這樣可以大大降低訪問服務(wù)的壓力
Hystrix自帶緩存,有兩個缺點(diǎn)
1. 是一個本地緩存,再集群情況下緩存是不能同步的
2. 不支持第三方緩存容器,Redis,memcache不支持的可以使用spring的cache
(2) @EnableCaching注解的作用是什么?
開啟緩存
11. 解決災(zāi)難性雪崩效應(yīng)-請求緩存-請求緩存處理
(1) @CacheConfig注解的作用是什么?
這個用于配置該類會用到的一些共用的緩存配置 ,
例如:
@CacheConfig(cacheNames=”users”) : 配置了該數(shù)據(jù)訪問對象中返回的內(nèi)容將存儲于名為users的對象中,我們也可以不用該注解,直接通過@Cacheable自己配置緩存集的名字來定義
(2) @CacheEvict注解的作用是什么?
刪除數(shù)據(jù)時自動去redis數(shù)據(jù)庫中刪除緩存
(3).@Cacheable :配置了此注解的返回值將被加入緩存,同時在查詢時,會從緩存中獲取,如果不存在緩存才發(fā)起對數(shù)據(jù)庫的訪問
12. 解決災(zāi)難性雪崩效應(yīng)-請求合并-創(chuàng)建項(xiàng)目
(1) 什么是請求合并?
將多個類似的請求合并成一個請求 再去請求數(shù)據(jù)
(2) 什么情況下使用請求合并?
在高并發(fā)情況下,通信次數(shù)的增加會導(dǎo)致總的通信時間增加,同時,線程池的資源也是有限的,高并發(fā)環(huán)境會導(dǎo)致大量的線程處于等待狀態(tài),進(jìn)而導(dǎo)致響應(yīng)延遲
進(jìn)而需要Hystrix的請求合并
(3) 請求合并有哪些缺點(diǎn)?
設(shè)置請求合并之后,本來一個請求可能 5ms 就搞定了,但是現(xiàn)在必須再等 10ms 看看還 有沒有其他的請求一起的,這樣一個請求的耗時就從 5ms 增加到 15ms 了,不過,如果我們 要發(fā)起的命令本身就是一個高延遲的命令,那么這個時候就可以使用請求合并了,因?yàn)檫@個時候時間窗的時間消耗就顯得微不足道了,另外高并發(fā)也是請求合并的一個非常重要的場 景。
13. 解決災(zāi)難性雪崩效應(yīng)-請求合并-請求合并處理
(1) @HystrixCollapser注解的作用是什么?
使用hystrix的合并請求
被@HystrixCollapser標(biāo)注的方法,返回類型必須為Future,使用異步方法,否則無法進(jìn)行請求并行
(2) @HystrixProperty注解的作用是什么?
設(shè)置請求并行參數(shù)
(3) @HystrixCommand注解的作用是什么?
配置屬性
(4) @HystrixCollapser注解中的batchMethod屬性的作用是什么?
合并請求的方法
方法只能接受一個參數(shù),如果你需要傳遞多個參數(shù),那么請將他們封裝成一個類參數(shù)
(5) @HystrixCollapser注解中的scope屬性的作用是什么?
請求方式 默認(rèn)REQUEST
請求方式: 分為 REQUEST,GLOBAL
REQUEST范圍只對一個request請求內(nèi)的多次服務(wù)請求進(jìn)行合并
GlOBAL 是多單個應(yīng)用中的所有線程的請求中的多次服務(wù)請求進(jìn)行合并
(6) @HystrixCollapser注解中的timerDelayInMiliseconds屬性的作用是什么?
請求時間間隔在10ms(默認(rèn))之內(nèi)的請求會被合并為一個請求
(7) @HystrixCollapser注解中的maxRequestsInBatch屬性的作用是什么?
設(shè)置觸發(fā)批處理執(zhí)行之前, 在批處理中允許的最大請求數(shù) 默認(rèn)Integer.MAX_VALUE
14. 解決災(zāi)難性雪崩效應(yīng)-服務(wù)熔斷-創(chuàng)建項(xiàng)目
(1) 什么是服務(wù)熔斷?
當(dāng)電壓過大時,保險絲自動熔斷的意思
分享/講解/擴(kuò)展思考
點(diǎn)名提問從第一節(jié)課到最后一節(jié)課分別學(xué)到了什么,直到同學(xué)們把所有的知識點(diǎn)都說出來并且保證無誤。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的wget 地址 连接超时_HttoPool连接池 和Hystrix 服务容错机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《锋利的JQuery》读书笔记
- 下一篇: 计算机没有地址栏,“我的电脑”地址栏不见