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)什麼是服務熔斷?

當失敗率(如因網絡故障/超時造成的失敗率高)達到閥值自動觸發降級,熔斷器觸發的快
速失敗會進行快速恢復。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章