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