一、基本方式
- hystrix為每一個commandKey提供了計數器
二、實現流程
- https://raw.githubusercontent.com/wiki/Netflix/Hystrix/images/metrics-generation.png
三、Hystrix event types
1、什么情況下會觸發fallback方法?
2、fallback方法在什么情況下會拋出異常
四、metrics storage
1、實現原理
- 當計數結果(metrics)產生之后,這些結果會在被推到其他系統中前存儲一段時間。
2、存儲結構
- hystrix會將計數結果存儲在內存數據結構里(in-memory data structures)。這個數據結構在1.5.0之后進行了改變。
2.1、高於1.4.x版本
- HystrixRollingNumber記錄events("三"中)的counts(HystrixCommandMetrics的父類HystrixMetrics的屬性)
- HystrixRollingPercentile記錄感興趣的分布的數量。例如:記錄command的延遲,collapser的批量size。(HystrixCommandMetrics的屬性)
注意:
- 當command執行時,計數結果會被同步寫到如上的兩個數據結構中。
- 如果該command是多個線程在執行,HystrixRollingNumber和HystrixRollingPercentile內部會有一個同步邏輯來達到線程安全(我們不需要再外部去做線程安全處理)
- 以上這兩個數據結構支持滾動模型,即只保存最新的值(而metrics會根據配置保存多個值,比如保存每一秒的值)
2.2、HystrixRollingNumber
當執行一個command的時候,HystrixRollingNumber會被初始化
五、metrics reads
1、所有hystrix-contrib中的metrics publishers and streams可以從上述的數據結構中讀取信息。
2、數據結構只存儲了最新的值,我們想看之前的值,只能通過分析HystrixRequestLog
3、The HystrixRequestLog
tracks all events in a request, and makes them available as a string。
六、metrics event stream
1、原理
- 只要客戶端連接還連着,hystrix-metrics-event-stream就會不斷的向客戶端以text/event-stream的形式推送計數結果(metrics)
2、
七、metrics publisher