Spring Cloud架構教程 (二)Hystrix監控數據聚合

上一篇咱們介紹了使用Hystrix Dashboard來展現Hystrix用於熔斷的各項度量指標。經過Hystrix Dashboard,咱們能夠方便的查看服務實例的綜合狀況,好比:服務調用次數、服務調用延遲等。可是僅經過Hystrix Dashboard咱們只能實現對服務當個實例的數據展示,在生產環境咱們的服務是確定須要作高可用的,那麼對於多實例的狀況,咱們就須要將這些度量指標數據進行聚合。下面,在本篇中,咱們就來介紹一下另一個工具:Turbine。html

準備工做

在開始使用Turbine以前,咱們先回顧一下上一篇中實現的架構,以下圖所示:spring

其中,咱們構建的內容包括:express

  • eureka-server:服務註冊中心
  • eureka-client:服務提供者
  • eureka-consumer-ribbon-hystrix:使用ribbon和hystrix實現的服務消費者
  • hystrix-dashboard:用於展現eureka-consumer-ribbon-hystrix服務的Hystrix數據

動手試一試

下面,咱們將在上述架構基礎上,引入Turbine來對服務的Hystrix數據進行聚合展現。這裏咱們將分別介紹兩種聚合方式。架構

經過HTTP收集聚合

具體實現步驟以下:app

  • 建立一個標準的Spring Boot工程,命名爲:turbine。
  • 編輯pom.xml,具體依賴內容以下:
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Dalston.SR1</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
  • 建立應用主類TurbineApplication,並使用@EnableTurbine註解開啓Turbine。
@Configuration
@EnableAutoConfiguration
@EnableTurbine
@EnableDiscoveryClient
public class TurbineApplication {

public static void main(String[] args) {
SpringApplication.run(TurbineApplication.class, args);
}

}
  • application.properties加入eureka和turbine的相關配置,具體以下:
spring.application.name=turbine

server.port=8989
management.port=8990

eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/

turbine.app-config=eureka-consumer-ribbon-hystrix
turbine.cluster-name-expression="default"
turbine.combine-host-port=true

參數說明異步

  • turbine.app-config參數指定了須要收集監控信息的服務名;
  • turbine.cluster-name-expression 參數指定了集羣名稱爲default,當咱們服務數量很是多的時候,能夠啓動多個Turbine服務來構建不一樣的聚合集羣,而該參數能夠用來區分這些不一樣的聚合集羣,同時該參數值能夠在Hystrix儀表盤中用來定位不一樣的聚合集羣,只須要在Hystrix Stream的URL中經過cluster參數來指定;
  • turbine.combine-host-port參數設置爲true,可讓同一主機上的服務經過主機名與端口號的組合來進行區分,默認狀況下會以host來區分不一樣的服務,這會使得在本地調試的時候,本機上的不一樣服務聚合成一個服務來統計。

在完成了上面的內容構建以後,咱們來體驗一下Turbine對集羣的監控能力。分別啓動eureka-servereureka-clienteureka-consumer-ribbon-hystrixturbine以及hystrix-dashboard。訪問Hystrix Dashboard,並開啓對http://localhost:8989/turbine.stream`的監控,這時候,咱們將看到針對服務`eureka-consumer-ribbon-hystrix`的聚合監控數據。spring-boot

而此時的架構以下圖所示:工具

經過消息代理收集聚合

Spring Cloud在封裝Turbine的時候,還實現了基於消息代理的收集實現。因此,咱們能夠將全部須要收集的監控信息都輸出到消息代理中,而後Turbine服務再從消息代理中異步的獲取這些監控信息,最後將這些監控信息聚合並輸出到Hystrix Dashboard中。經過引入消息代理,咱們的Turbine和Hystrix Dashoard實現的監控架構能夠改爲以下圖所示的結構:post

從圖中咱們能夠看到,這裏多了一個重要元素:RabbitMQ。對於RabbitMQ的安裝與基本時候咱們能夠查看以前的《Spring Boot中使用RabbitMQ》一文,這裏不作過多的說明。下面,咱們能夠來構建一個新的應用來實現基於消息代理的Turbine聚合服務,具體步驟以下:url

  • 建立一個標準的Spring Boot工程,命名爲:turbine-amqp
  • 編輯pom.xml,具體依賴內容以下:
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Dalston.SR1</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>

能夠看到這裏主要引入了spring-cloud-starter-turbine-amqp依賴,它實際上就是包裝了spring-cloud-starter-turbine-streampring-cloud-starter-stream-rabbit

注意:這裏咱們須要使用Java 8來運行

  • 在應用主類中使用@EnableTurbineStream註解來啓用Turbine Stream的配置。
@Configuration
@EnableAutoConfiguration
@EnableTurbineStream
@EnableDiscoveryClient
public class TurbineApplication {

public static void main(String[] args) {
SpringApplication.run(TurbineApplication.class, args);
}

}
  • 配置application.properties文件:
spring.application.name=turbine-amqp

server.port=8989
management.port=8990

eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/

對於Turbine的配置已經完成了,下面咱們須要對服務消費者eureka-consumer-ribbon-hystrix作一些修改,使其監控信息可以輸出到RabbitMQ上。這個修改也很是簡單,只須要在pom.xml中增長對spring-cloud-netflix-hystrix-amqp依賴,具體以下:

<dependencies>
...
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-hystrix-amqp</artifactId>
</dependency>
</dependencies>

在完成了上面的配置以後,咱們能夠繼續以前的全部項目(除turbine之外),並經過Hystrix Dashboard開啓對http://localhost:8989/turbine.stream的監控,咱們能夠得到如以前實現的一樣效果,只是這裏咱們的監控信息收集時是經過了消息代理異步實現的。源碼來源

相關文章
相關標籤/搜索