Spring Cloud(五)《Turbine 監控信息聚合展示 Hystrix》
前言介紹
Hystrix Dashboard 可以定時收集接口調用信息;時長、次數、性能、熔斷等各項指標來進行監控展示,但是我們每次監控都需要輸入一個Hystrix 的鏈接例如:http://localhost:9001/actuator/hystrix.stream,但是這樣并不利于我們去做整體服務的監控,并且在實際使用的過程中如果是幾十到幾百個接口那么這樣的監控幾乎達不到監控效果,就累死在監控路上了。因此我們需要使用到 Turbine 來進行監控信息聚合,可以按業務組定義配置方便監控。
案例說明
環境準備
jdk 1.8、idea2018、Maven3
spring Boot 2.0.6.RELEASE
spring Cloud Finchley.SR2
代碼示例
itstack-demo-springcloud-05 ├── itstack-demo-springcloud-eureka-client │ └── src │ └── main │ ├── java │ │ └── org.itstack.demo │ │ ├── web │ │ │ └── EurekaClientController.java │ │ └── EurekaClientApplication.java │ └── resources │ └── application.yml ├── itstack-demo-springcloud-eureka-server │ └── src │ └── main │ ├── java │ │ └── org.itstack.demo │ │ └── EurekaServerApplication.java │ └── resources │ └── application.yml ├── itstack-demo-springcloud-hystrix-dashboard │ └── src │ └── main │ ├── java │ │ └── org.itstack.demo │ │ └── DashboardApplication.java │ └── resources │ └── application.yml ├── itstack-demo-springcloud-hystrix-feign │ └── src │ └── main │ ├── java │ │ └── org.itstack.demo │ │ ├── service │ │ │ ├── hystrix │ │ │ │ └── FeignServiceHystrix.java │ │ │ └── FeignService.java │ │ ├── web │ │ │ └── FeignController.java │ │ └── FeignApplication.java │ └── resources │ └── application.yml ├── itstack-demo-springcloud-hystrix-ribbon │ └── src │ └── main │ ├── java │ │ └── org.itstack.demo │ │ ├── service │ │ │ └── RibbonService.java │ │ ├── web │ │ │ └── RibbonController.java │ │ └── RibbonApplication.java │ └── resources │ └── application.yml └── itstack-demo-springcloud-turbine └── src └── main ├── java │ └── org.itstack.demo │ └── TurbineApplication.java └── resources └── application.yml
itstack-demo-springcloud-eureka-client | 服務提供方
提供一個查詢用戶信息的簡單方法,在配置文件中通過修改端口啟動2次,模擬雙實例應用,為調用方負載做準備。
web/EurekaClientController.java | 注意@EnableEurekaClient用于向注冊中心提供服務
EurekaClientApplication.java | 服務啟動類
application.yml | 配置文件鏈接服務注冊中心,8001\8002分別配置啟動
server: port: 8001 / 8002 spring: application: name: itstack-demo-springcloud-eureka-client eureka: client: serviceUrl: defaultZone: http://localhost:7397/eureka/
itstack-demo-springcloud-eureka-server | 單個服務注冊中心
服務注冊中心用于承載接口提供方向上注冊,同時正在調用方鏈接后可以獲取指定應用的服務實例。
EurekaServerApplication.java | 通過注解@EnableEurekaServer啟動服務注冊與發現中心
application.yml | 服務注冊中心配置文件,端口7397和我們之前寫netty的服務的端口一致
server: port: 7397 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ spring: application: name: itstack-demo-springcloud-eureka-server
itstack-demo-springcloud-hystrix-dashboard | 服務監控像儀表盤一樣透視系統健康度
Spring Cloud Hystrix Dashboard只是spring cloud基于Hystrix Dashboard,將實時監控數據通過頁面呈現出來。Spring Cloud Hystrix Dashboard的底層原理是間隔一定時間去“Ping”目標服務,返回的結果是最新的監控數據,最后將數據顯示出來。
Cluster via Turbine (default cluster): http://turbine-hostname:port/turbine.stream Cluster via Turbine (custom cluster): http://turbine-hostname:port/turbine.stream?cluster=[clusterName] Single Hystrix App: http://hystrix-app:port/actuator/hystrix.stream
DashboardApplication.java | 配置@EnableHystrixDashboard啟動服務
application.yml | 通用配置信息
server: port: 8989 spring: application: name: itstack-demo-springcloud-hystrix-dashboard
itstack-demo-springcloud-feign | Feign服務調用方,添加熔斷Hystrix
Feign 是一個聲明式的 Web Service 客戶端,它的目的就是讓 Web Service 調用更加簡單。它整合了 Ribbon 和 Hystrix,從而讓我們不再需要顯式地使用這兩個組件。Feign 還提供了 HTTP 請求的模板,通過編寫簡單的接口和插入注解,我們就可以定義好 HTTP 請求的參數、格式、地址等信息。接下來,Feign 會完全代理 HTTP 的請求,我們只需要像調用方法一樣調用它就可以完成服務請求。
Feign 具有如下特性:
可插拔的注解支持,包括 Feign 注解和 JAX-RS 注解
支持可插拔的 HTTP 編碼器和解碼器
支持 Hystrix 和它的 Fallback
支持 Ribbon 的負載均衡
支持 HTTP 請求和響應的壓縮
service/FeignService.java | 注解方式調用,方便易用。@FeignClient會在調用時進行解析服務到具體的http://ip:port/
service/hystrix/FeignServiceHystrix.java | 提供熔斷服務,當發生異常時主動返回預定結果
web/FeignController.java | 使用接口提供服務 From Feign
FeignApplication.java | 注解@EnableEurekaClient、@EnableFeignClients、@EnableDiscoveryClient獲取調用注冊中心服務
application.yml | eureka服務配置,從注冊中心獲取可用服務。開啟hystrix=true,并設置hystrix.stream
server: port: 9001 spring: application: name: itstack-demo-springcloud-feign eureka: client: serviceUrl: defaultZone: http://localhost:7397/eureka/ feign.hystrix.enabled: true management: endpoints: web: exposure: include: hystrix.stream
itstack-demo-springcloud-ribbon | Ribbon服務調用方
Ribbon是一個基于 HTTP 和 TCP 的客戶端負載均衡器。它可以通過在客戶端中配置 ribbonServerList 來設置服務端列表去輪詢訪問以達到均衡負載的作用。
當 Ribbon 與 Eureka 聯合使用時,ribbonServerList 會被 DiscoveryEnabledNIWSServerList 重寫,擴展成從 Eureka 注冊中心中獲取服務實例列表。同時它也會用 NIWSDiscoveryPing 來取代 IPing,它將職責委托給 Eureka 來確定服務端是否已經啟動。
service/RibbonService.java | 接口式硬編碼調用不太易于維護,因此也是比較少用的方式。hystrix實際通過getFallback()返回熔斷結果
web/RibbonController.java | 使用接口提供服務 From Ribbon
RibbonApplication.java | 通過注解@LoadBalanced注冊rest模版,用于Ribbon接口調用。并啟動@EnableHystrix
application.yml | eureka服務配置,從注冊中心獲取可用服務
server: port: 9002 spring: application: name: itstack-demo-springcloud-ribbon eureka: client: serviceUrl: defaultZone: http://localhost:7397/eureka/
itstack-demo-springcloud-turbine | 監控信息聚合服務
通過配置匯總,將應用itstack-demo-springcloud-feign,itstack-demo-springcloud-ribbon,匯總監控。
TurbineApplication.java | 通過注解@EnableTurbine配置啟動Ribbon
application.yml | eureka服務配置,從注冊中心獲取可用服務
spring: application: name: itstack-demo-springcloud-turbine server: port: 8080 management: port: 8081 ## 服務注冊中心 eureka: client: service-url: defaultZone: http://localhost:7397/eureka ## 監控匯總配置,這里配置2個應用逗號隔開 turbine: app-config: itstack-demo-springcloud-feign,itstack-demo-springcloud-ribbon cluster-name-expression: new String("default") combine-host-port: true
測試驗證
啟動itstack-demo-springcloud-hystrix-dashboard,訪問;http://localhost:8989/hystrix
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-50OCxN8P-1573692168889)(https://fuzhengwei.github.io/assets/images/pic-content/2019/11/springcloud-4-3.png)]
分別啟動如下系統模擬;
itstack-demo-springcloud-eureka-server 服務注冊發現中心
itstack-demo-springcloud-eureka-client 測試接口提供方
itstack-demo-springcloud-hystrix-feign 接口調用方Feign
itstack-demo-springcloud-hystrix-ribbon 接口調用方Ribbon
itstack-demo-springcloud-turbine 監控信息匯總
測試監控
在hystrix-dashboard監控頁面{http://localhost:8989/hystrix},輸入;http://localhost:8080/turbine.stream
刷新訪問兩個調用方接口;http://localhost:9001/api/queryUserInfo?userId=111、http://localhost:9002/api/queryUserInfo?userId=111
綜上總結
通過Turbine服務我們可以將監控信息匯總到一起進行查看,這樣更加方便實際應用。
SpringCloud 到現在的案例已經使用到了很多服務模塊,它確實是一套有序集合框架,將各家優秀功能服務集成,方便使用。
SpringBoot 、 SpringCloud,在開發一些中小型獨立服務非常邊界,對于一些超大型以外的公司非常合適。當然并不是一線互聯網就不使用,因為這里面還牽扯到很多對應的替代產品,比如Dubbo、網關、全鏈路監控、路由等等,所以需要根據不同業務進行技術選型,不要被技術限制。
Spring Spring Cloud
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。