上一篇我們介紹了使用Hystrix Dashboard來展示Hystrix用於熔斷的各項度量指標。通過Hystrix Dashboard,我們可以方便的查看服務實例的綜合情況,比如:服務調用次數、服務調用延遲等。但是僅通過Hystrix Dashboard我們只能實現對服務當個實例的數據展現,在生產環境我們的服務是肯定需要做高可用的,那麼對於多實例的情況,我們就需要將這些度量指標數據進行聚合。下面,在本篇中,我們就來介紹一下另外一個工具:Turbine。
準備工作
在開始使用Turbine之前,我們先回顧一下上一篇中實現的架構,如下圖所示:
其中,我們構建的內容包括:
- eureka-server:服務註冊中心
- eureka-client:服務提供者
- eureka-consumer-ribbon-hystrix:使用ribbon和hystrix實現的服務消費者
- hystrix-dashboard:用於展示
eureka-consumer-ribbon-hystrix
服務的Hystrix數據
動手試一試
下面,我們將在上述架構基礎上,引入Turbine來對服務的Hystrix數據進行聚合展示。這裏我們將分別介紹兩種聚合方式。
通過HTTP收集聚合
具體實現步驟如下:
- 創建一個標準的Spring Boot工程,命名爲:turbine。
- 編輯pom.xml,具體依賴內容如下:
|
- 創建應用主類
TurbineApplication
,並使用@EnableTurbine
註解開啓Turbine。
|
- 在
application.properties
加入eureka和turbine的相關配置,具體如下:
|
參數說明
turbine.app-config
參數指定了需要收集監控信息的服務名;turbine.cluster-name-expression
參數指定了集羣名稱爲default,當我們服務數量非常多的時候,可以啓動多個Turbine服務來構建不同的聚合集羣,而該參數可以用來區分這些不同的聚合集羣,同時該參數值可以在Hystrix儀表盤中用來定位不同的聚合集羣,只需要在Hystrix Stream的URL中通過cluster
參數來指定;turbine.combine-host-port
參數設置爲true
,可以讓同一主機上的服務通過主機名與端口號的組合來進行區分,默認情況下會以host來區分不同的服務,這會使得在本地調試的時候,本機上的不同服務聚合成一個服務來統計。
在完成了上面的內容構建之後,我們來體驗一下Turbine對集羣的監控能力。分別啓動eureka-server
、eureka-client
、eureka-consumer-ribbon-hystrix
、turbine
以及hystrix-dashboard。訪問Hystrix Dashboard,並開啓對
http://localhost:8989/turbine.stream`的監控,這時候,我們將看到針對服務`eureka-consumer-ribbon-hystrix`的聚合監控數據。
而此時的架構如下圖所示:
通過消息代理收集聚合
Spring Cloud在封裝Turbine的時候,還實現了基於消息代理的收集實現。所以,我們可以將所有需要收集的監控信息都輸出到消息代理中,然後Turbine服務再從消息代理中異步的獲取這些監控信息,最後將這些監控信息聚合並輸出到Hystrix Dashboard中。通過引入消息代理,我們的Turbine和Hystrix Dashoard實現的監控架構可以改成如下圖所示的結構:
從圖中我們可以看到,這裏多了一個重要元素:RabbitMQ。對於RabbitMQ的安裝與基本時候我們可以查看之前的《Spring Boot中使用RabbitMQ》一文,這裏不做過多的說明。下面,我們可以來構建一個新的應用來實現基於消息代理的Turbine聚合服務,具體步驟如下:
- 創建一個標準的Spring Boot工程,命名爲:
turbine-amqp
。 - 編輯
pom.xml
,具體依賴內容如下:
|
可以看到這裏主要引入了spring-cloud-starter-turbine-amqp
依賴,它實際上就是包裝了spring-cloud-starter-turbine-stream
和pring-cloud-starter-stream-rabbit
。
注意:這裏我們需要使用Java 8來運行
- 在應用主類中使用
@EnableTurbineStream
註解來啓用Turbine Stream的配置。
|
- 配置
application.properties
文件:
|
對於Turbine的配置已經完成了,下面我們需要對服務消費者eureka-consumer-ribbon-hystrix
做一些修改,使其監控信息能夠輸出到RabbitMQ上。這個修改也非常簡單,只需要在pom.xml
中增加對spring-cloud-netflix-hystrix-amqp
依賴,具體如下:
|
在完成了上面的配置之後,我們可以繼續之前的所有項目(除turbine以外),並通過Hystrix Dashboard開啓對http://localhost:8989/turbine.stream
的監控,我們可以獲得如之前實現的同樣效果,只是這裏我們的監控信息收集時是通過了消息代理異步實現的。