为什么80%的码农都做不了架构师?>>>

 metrics和监控

动机

  HystrixCommands和HystrixObservableCommands执行过程中会产生相关运行情况的metrics。这些metrics对于监控系统表现有很大的帮助。 hystrix为每个命令提供了metrics。

  单独的hystrix metrics信息可以用来帮助debugging,聚合的metrcis信息可以帮助理解系统的表现。下面是命令执行和写metrics的流程图。

Hystrix事件类型

  下表列出了Hystrix执行过程中所有的事件类型。这些事件类型定义在枚举类com.netflix.hystrix.HystrixEventType中。HystrixCommand和HystrixObservableCommand都会使用到整个枚举。

  HystrixCommand只返回一个数据,当返回值时发生SUCCESS事件,执行失败时,发生FAILURE事件。。

  HystrixObservableCommand可以返回多个值,当返回值时发生EMIT事件,当命令完成时,发生SUCCESS事件,执行失败时,发生FAILURE事件。

名称 描述 是否fallback
EMIT value返回,只在HystrixObservableCommand NO
SUCCESS 执行成功 NO
FAILURE 执行抛出异常 YES
TIMEOUT 超时 YES
BAD_REQUEST 抛出HystrixBadRequestException NO
SHORT_CIRCUITED 熔断 YES
THREAD_POOL_REJECTED 线程池拒绝 YES
SEMAPHORE_REJECTED 信号量拒绝 YES

Fallback事件类型

名称 描述 是否抛出异常
FALLBACK_EMIT fallback 返回值,只在HystrixObservableCommand NO
FALLBACK_SUCCESS fallback 执行完成 NO
FALLBACK_FAILURE fallback执行失败 YES
FALLBACK_REJECTION fallback拒绝执行 YES
FALLBACK_MISSING 没有fallback实现 YES

其他命令类型

名称 描述
EXCEPTION_THROWN 执行命令值抛出异常
RESPONSE_FROM_CACHE 从缓存中获取值
CALLAPSED 命令聚合执行

线程池类型

名称 描述
EXECUTED 线程池执行一个命令
REJECTED 线程池拒绝执行命令

聚合事件类型

名称 描述
BATCH_EXECUTED 执行一个batch批量执行
ADDED_TO_BATCH 参数添加到batch中
RESPONSE_FROM_CACHE 从缓存中获取值

Metrics存储

  我们选择便于聚合的数据结构来存储metrics,你可能会使用HystrixRollingNumber来存储滚动计数;可能会使用HystrixRollingPercentile来存储百分比计数。例如,hystrix熔断器根据滚动的失败率来判断是否需要熔断;hystrix-contrib中的publisher和stream会读取滚动数据然后聚合并发送。但实际情况比这个更加复杂,单单根据聚合值,我们还不能满足所有需求。例如,我们知道FooCommand的失败率是50%,但是我们依然想知道在墨西哥和巴西失败率为0%,在美国的失败率为98%,在聚合过程中很多细节会被丢失掉。netflix通过HystrixRequestLog来跟踪所有的请求,这不是最好的方式但可以让我们以请求路径的维度来统计hystrix执行的情况,在实际应用中会非常有价值。

1.5.x(及以上)

  因为这些原因,我们使用更加灵活的方式来重新设计了metrics架构。如果将metrics设计成一个数据流,那么它可以以各种方式被消费。我们为HystrixCommandKey,HystrixThreadPoolKey,HystrixCollapserKey的metrics设计了一个流。每个HystrixCommandKey和HystrixThreadPoolKey对应的流会接收开始事件,结束事件。每个HystrixCollapserKey对应的流会接收聚合相关的事件。为了保持向后兼容,hystrix-core实现了所有HystrixRollingNumber/HystrixRollingPercentile的统计计算。并且hystrix-core使用了rxjava来实现这些聚合操作。例如,使用Observable.window来实现一段时间内的聚合数据,它自己会在后台实现,不需要我们自己实现它。

  通过这种实现,每一个命令不再需要维护一个HystrixRollingNumber,而是针对每个命令,每个线程池,每个聚合命令,维护一个rx.Subject,通过异步方式写入metrics事件。这些Subject通过一下hystrix api 暴露给调用方使用。

方法 返回类型
HystrixCommandStartStream observe() Observable<HystrixCommandExecutionStarted>
HystrixCommandCompletionStream observe() Observable<HystrixCommandCompletion>
HystrixThreadPoolStartStream observe() Observable<HystrixCommandExecutionStarted>
HystrixThreadPoolCompletionStream observe() Observable<HystrixCommandCompletion>
HystrixCollapserEventStream observe() Observable<HystrixCollapserEvent>
HystrixRequestEventsStream observe() Observable<HystrixRequestEvents>

  我们可以自定义metrics的消费策略,hystrix也提供了一些默认的实现。例如RollingCommandEventCounterStream,任何线程通过这个流可以读取到窗口期内某一command 事件的聚合值。以下是hystrix提供的metrics消费统计流:

  

Metrics事件流

  可以使用hystrix-metrics-event-stream来实现实时监控,报警,报表等。通过实现HystrixMetricsPublisher可以自定义发布Metrics。使用HystrixPlugins.registerMetricsPublisher(HystrixMetricsPublisher impl)来注册自定义HystrixMetricsPublisher。

  Hystrix的hystrix-contrib模块有下面的默认实现:

  • Netflix Servo: hystrix-servo-metrics-publisher
  • Yammer Metrics: hystrix-yammer-metrics-publisher

  上面的两个publisher具体发布以下信息:

命令Metrics

  每一个命令以下面的格式发布metrics:

  • servo tag:instance 值:HystrixCommandKey.name()
  • servo tag:type 值:HystrixCommand

状态

  • Boolean isCircuitBreakerOpen 熔断器是否开启
  • Number errorPercentage 异常比率
  • Number executionSemaphorePermitsInUse
  • String commandGroup 命令组
  • Number currentTime 当前时间

窗口期和持续值

事件 持续值 窗口值 说明
BAD_REQUEST countBadRequests rollingCountBadRequests bad request个数
COLLAPSED countCollapsedRequests rollingCountCollapsedRequests  
EMIT countEmit rollingCountEmit  
EXCEPTION_THROWN countExceptionsThrown rollingCountExceptionsThrown  
       
       
       
       
       
       
       
       
       
       
       

线程池Metrics

  每一个线程池以下面的格式发布metrics:

  • servo tag:instance 值:HystrixThreadPoolKey.name()
  • servo tag:type 值:HystrixThreadPool

状态

  • string name
  • Number currentTime

窗口值(Gauge)

  • Number rollingMaxActiveThreads
  • Number rollingCountThreadsExecuted

持续值

  • countThreadsExecuted

线程池状态

  • Number threadActiveCount
  • Number completedTaskCount
  • Number largestPoolSize
  • Number totalTaskCount
  • Number queueSize

属性值

  • Number propertyValue_corePoolSize
  • Number propertyValue_keepAliveTimeInMinutes
  • Number propertyValue_queueSizeRejectionThreshold
  • Number propertyValue_maxQueueSize

转载于:https://my.oschina.net/xiaominmin/blog/1789084

hystrix文档翻译之metrics相关推荐

  1. hystrix文档翻译之Dashboard

    Dashboard Hystrix Dashboard可以让你实时监控hystrix的metrics信息. 当netflix开始使用dashboard后,运维效率得到了极大的提升,并且极大降低了大多数 ...

  2. hystrix thread pool Metrics

    为什么80%的码农都做不了架构师?>>>    com.netflix.hystrix.HystrixThreadPoolMetrics 转载于:https://my.oschina ...

  3. 服务容错保护断路器Hystrix之二:Hystrix工作流程解析

    一.总运行流程 当你发出请求后,hystrix是这么运行的  详细解释个步骤 1.创建  HystrixCommand or HystrixObservableCommand Object   Hys ...

  4. 微服务(二)hystrix

    特性 1.延迟和失败容忍 防止级联错误,错误回退,优雅降级.快速失败和恢复 线程和信号量隔离 2.实时监控和配置更改 3.并发 并行执行,请求缓存,自动批处理失败请求 总运行流程 当你发出请求后,hy ...

  5. hystrix相关配置

    Execution相关的属性的配置 hystrix.command.default.execution.isolation.strategy 隔离策略,默认是Thread, 可选Thread| Sem ...

  6. Java熔断框架有哪些_降级熔断框架 Hystrix 源码解析:滑动窗口统计

    降级熔断框架 Hystrix 源码解析:滑动窗口统计 概述 Hystrix 是一个开源的降级熔断框架,用于提高服务可靠性,适用于依赖大量外部服务的业务系统.什么是降级熔断呢? 降级 业务降级,是指牺牲 ...

  7. hystrix熔断 简介_Hystrix简介– Hello World

    hystrix熔断 简介 在以前的博客文章中,我介绍了需要像Netflix Hystrix这样的库的动机. 在这里,我将跳入一些非常基本的方法来开始使用Hystrix,并在更复杂的用例中进行跟进. 你 ...

  8. hystrix熔断 简介_Hystrix简介–总结

    hystrix熔断 简介 这是其他两篇文章的后续文章– 动机 ,说明为什么在分布式系统中需要类似Hystrix的内容以及Hystrix的基本介绍 . 这将是我的Hystrix旅程的总结,其中包含各种属 ...

  9. Spring Cloud对Hystrix的支持

    Spring Cloud项目为Netflix OSS Hystrix库提供了全面的支持. 之前我已经写过有关如何使用原始Hystrix库包装远程调用的文章. 在这里,我将探讨如何将Hystrix与Sp ...

最新文章

  1. 1008: [HNOI2008]越狱(计数问题)
  2. VC++ 用ADO连接数据库的简单方法
  3. 亡命逃窜(nyoj523广搜)
  4. Asp.Net Mvc3.0(MEF依赖注入理论)
  5. Webpack 实现 Tree shaking 的前世今生
  6. linux 多窗口查看多命令的操作结果
  7. 使用 Python 开发 QGIS 插件
  8. 计算机word的关闭怎么办,电脑无法打开Word提示已停止工作并自动退出怎么办
  9. 最美证件照工作室需要买什么东西
  10. Android 12刷机教程
  11. 【C语言小游戏】答题系统
  12. maven更换阿里云仓库
  13. 不断的学习,不断的思考
  14. 新生宝宝为何天生过敏体质 婴儿过敏体质的症状
  15. 哈夫曼编码器和译码器(完整代码)
  16. 【01】从零开始跟我一起制作一个鸿蒙的应用-★注册开发者和准备工具★---优雅草科技伊凡
  17. 搭建Android+QT+OpenCV环境,实现“单色图片着色”效果
  18. linux版本beyond compare 4 的30天试用期已过-解决方法
  19. [剑指Offer]:数值的整数次方(循环解答,快速幂---递归、循环)
  20. IDA 和 IDA-Python 学习笔记

热门文章

  1. java多态是怎样产生的,java 多态产生的疑问
  2. python字典包含指定键_python-字典中所有值的总和,其中包含键中的项
  3. Python查找列表中相加等于s的n个数字(combinations的使用)
  4. oracle排序字符,Oracle数据字符集和排序的用法
  5. linux进入uvc目录,Linux uvc驱动分析
  6. 数组占位符_Java基础 方法和数组
  7. 计算机系要考英语口语吗,2015年高考英语口语由计算机“打分”,这些细节要注意!...
  8. WORD批量更改所有图片大小
  9. 英语总结系列(六):激情燃烧的岁月
  10. 洗车房,无人车的噩梦