hystrix文档翻译之metrics
为什么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相关推荐
- hystrix文档翻译之Dashboard
Dashboard Hystrix Dashboard可以让你实时监控hystrix的metrics信息. 当netflix开始使用dashboard后,运维效率得到了极大的提升,并且极大降低了大多数 ...
- hystrix thread pool Metrics
为什么80%的码农都做不了架构师?>>> com.netflix.hystrix.HystrixThreadPoolMetrics 转载于:https://my.oschina ...
- 服务容错保护断路器Hystrix之二:Hystrix工作流程解析
一.总运行流程 当你发出请求后,hystrix是这么运行的 详细解释个步骤 1.创建 HystrixCommand or HystrixObservableCommand Object Hys ...
- 微服务(二)hystrix
特性 1.延迟和失败容忍 防止级联错误,错误回退,优雅降级.快速失败和恢复 线程和信号量隔离 2.实时监控和配置更改 3.并发 并行执行,请求缓存,自动批处理失败请求 总运行流程 当你发出请求后,hy ...
- hystrix相关配置
Execution相关的属性的配置 hystrix.command.default.execution.isolation.strategy 隔离策略,默认是Thread, 可选Thread| Sem ...
- Java熔断框架有哪些_降级熔断框架 Hystrix 源码解析:滑动窗口统计
降级熔断框架 Hystrix 源码解析:滑动窗口统计 概述 Hystrix 是一个开源的降级熔断框架,用于提高服务可靠性,适用于依赖大量外部服务的业务系统.什么是降级熔断呢? 降级 业务降级,是指牺牲 ...
- hystrix熔断 简介_Hystrix简介– Hello World
hystrix熔断 简介 在以前的博客文章中,我介绍了需要像Netflix Hystrix这样的库的动机. 在这里,我将跳入一些非常基本的方法来开始使用Hystrix,并在更复杂的用例中进行跟进. 你 ...
- hystrix熔断 简介_Hystrix简介–总结
hystrix熔断 简介 这是其他两篇文章的后续文章– 动机 ,说明为什么在分布式系统中需要类似Hystrix的内容以及Hystrix的基本介绍 . 这将是我的Hystrix旅程的总结,其中包含各种属 ...
- Spring Cloud对Hystrix的支持
Spring Cloud项目为Netflix OSS Hystrix库提供了全面的支持. 之前我已经写过有关如何使用原始Hystrix库包装远程调用的文章. 在这里,我将探讨如何将Hystrix与Sp ...
最新文章
- 1008: [HNOI2008]越狱(计数问题)
- VC++ 用ADO连接数据库的简单方法
- 亡命逃窜(nyoj523广搜)
- Asp.Net Mvc3.0(MEF依赖注入理论)
- Webpack 实现 Tree shaking 的前世今生
- linux 多窗口查看多命令的操作结果
- 使用 Python 开发 QGIS 插件
- 计算机word的关闭怎么办,电脑无法打开Word提示已停止工作并自动退出怎么办
- 最美证件照工作室需要买什么东西
- Android 12刷机教程
- 【C语言小游戏】答题系统
- maven更换阿里云仓库
- 不断的学习,不断的思考
- 新生宝宝为何天生过敏体质 婴儿过敏体质的症状
- 哈夫曼编码器和译码器(完整代码)
- 【01】从零开始跟我一起制作一个鸿蒙的应用-★注册开发者和准备工具★---优雅草科技伊凡
- 搭建Android+QT+OpenCV环境,实现“单色图片着色”效果
- linux版本beyond compare 4 的30天试用期已过-解决方法
- [剑指Offer]:数值的整数次方(循环解答,快速幂---递归、循环)
- IDA 和 IDA-Python 学习笔记
热门文章
- java多态是怎样产生的,java 多态产生的疑问
- python字典包含指定键_python-字典中所有值的总和,其中包含键中的项
- Python查找列表中相加等于s的n个数字(combinations的使用)
- oracle排序字符,Oracle数据字符集和排序的用法
- linux进入uvc目录,Linux uvc驱动分析
- 数组占位符_Java基础 方法和数组
- 计算机系要考英语口语吗,2015年高考英语口语由计算机“打分”,这些细节要注意!...
- WORD批量更改所有图片大小
- 英语总结系列(六):激情燃烧的岁月
- 洗车房,无人车的噩梦