hystrix詳述(2)- 配置
阿新 • • 發佈:2018-11-09
一、hystrix在生產中的建議
1、保持timeout的預設值(1000ms),除非需要修改(其實通常會修改)
2、保持threadpool的的執行緒數為10個,除非需要更多
3、依賴標準的報警和監控系統來捕獲問題
4、通過dashboards的實時監控來動態修改配置,直到滿意為止
二、配置資訊(default或HystrixCommandKey)最常用的幾項
- 超時時間(預設1000ms,單位:ms)
- hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
- 在呼叫方配置,被該呼叫方的所有方法的超時時間都是該值,優先順序低於下邊的指定配置
- hystrix.command.HystrixCommandKey.execution.isolation.thread.timeoutInMilliseconds
- 在呼叫方配置,被該呼叫方的指定方法(HystrixCommandKey方法名)的超時時間是該值
- hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds
- 執行緒池核心執行緒數
- hystrix.threadpool.default.coreSize(預設為10)
- Queue
- hystrix.threadpool.default.maxQueueSize(最大排隊長度。預設-1,使用SynchronousQueue。其他值則使用 LinkedBlockingQueue。如果要從-1換成其他值則需重啟,即該值不能動態調整,若要動態調整,需要使用到下邊這個配置)
- hystrix.threadpool.default.queueSizeRejectionThreshold(排隊執行緒數量閾值,預設為5,達到時拒絕,如果配置了該選項,佇列的大小是該佇列)
- 注意:如果maxQueueSize=-1的話,則該選項不起作用
- 斷路器
- hystrix.command.default.circuitBreaker.requestVolumeThreshold(當在配置時間視窗內達到此數量的失敗後,進行短路。預設20個)
- For example, if the value is 20, then if only 19 requests are received in the rolling window (say a window of 10 seconds
- For example, if the value is 20, then if only 19 requests are received in the rolling window (say a window of 10 seconds
- hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds(短路多久以後開始嘗試是否恢復,預設5s)
- hystrix.command.default.circuitBreaker.errorThresholdPercentage(出錯百分比閾值,當達到此閾值後,開始短路。預設50%)
- hystrix.command.default.circuitBreaker.requestVolumeThreshold(當在配置時間視窗內達到此數量的失敗後,進行短路。預設20個)
- fallback
- hystrix.command.default.fallback.isolation.semaphore.maxConcurrentRequests(呼叫執行緒允許請求HystrixCommand.GetFallback()的最大數量,預設10。超出時將會有異常丟擲,注意:該項配置對於THREAD隔離模式也起作用)
三、監控hystrix
說明:hystrix為每一個commandKey提供了計數器。原理:
附:清晰大圖
四、常見的hystrix事件型別
- run()
- SUCCESS:run()成功,不觸發getFallback()
- FAILURE:run()拋異常,觸發getFallback()
- TIMEOUT:run()超時,觸發getFallback()
- BAD_REQUEST:run()丟擲HystrixBadRequestException,不觸發getFallback()
- SHORT_CIRCUITED:斷路器開路,觸發getFallback()
- THREAD_POOL_REJECTED:執行緒池耗盡,觸發getFallback()
- FALLBACK_MISSING:沒有實現getFallback(),丟擲異常
- getFallback()
- FALLBACK_SUCCESS:getFallback()成功,不拋異常
- FALLBACK_FAILURE:getFallback()失敗,拋異常
- FALLBACK_REJECTION:呼叫getFallback()的執行緒數超量,拋異常
五、Metrics storage and Dashboard
僅僅記錄hystrix1.5.0及其後續版本,之前的版本的資料結構不一樣。
http://www.ahlinux.com/java/18235.html