Hystrix
在2018年11月20日之后已经停止维护,最后一个提交记录是:Latest commit 3cb2158 on 20 Nov 2018
,最后一个正式版本为1.5.18
。鉴于目前所在公司的技术栈是Spring Cloud
,熔断和降级组件主要用的还是Hystrix
,这里就Hystrix
的完整列表做一个分析记录,方便以后可以随时查询。本文主要参考:Hystrix Configuration。其中,命令配置是针对HystrixCommand
,主要包括命令执行(execution)配置、命令降级(fallback)配置、熔断器(circuit breaker)配置、度量统计(metrics)配置和请求上下文配置。
最近的一个项目中涉及到文件上传和下载,使用到JUC的线程池ThreadPoolExecutor
,在生产环境中出现了某些时刻线程池满负载运作,由于使用了CallerRunsPolicy
拒绝策略,导致满负载情况下,应用接口调用无法响应,处于假死状态。考虑到之前用micrometer + prometheus + grafana搭建过监控体系,于是考虑使用micrometer做一次主动的线程池度量数据采集,最终可以相对实时地展示在grafana的面板中。
最近在项目中使用了SpringCloud,基于Zuul搭建了一个提供加解密、鉴权等功能的网关服务。鉴于之前没怎么使用过Zuul,于是顺便仔细阅读了它的源码。实际上,Zuul原来提供的功能是很单一的:通过一个统一的Servlet入口(ZuulServlet
,或者Filter
入口,使用ZuulServletFilter
)拦截所有的请求,然后通过内建的com.netflix.zuul.IZuulFilter
链对请求做拦截和过滤处理。ZuulFilter
和javax.servlet.Filter
的原理相似,但是它们本质并不相同。javax.servlet.Filter
在Web应用中是独立的组件,ZuulFilter
是ZuulServlet
处理请求时候调用的,后面会详细分析。
最近在做一个新项目的时候引入了一个架构方面的需求,就是需要检查项目的编码规范、模块分类规范、类依赖规范等,刚好接触到,正好做个调研。
很多时候,我们会制定项目的规范,例如:
还有很多其他可能需要定制的规范,最终可能会输出一个文档。但是,谁能保证所有参数开发的人员都会按照文档的规范进行开发?为了保证规范的实行,Archunit以单元测试的形式通过扫描类路径(甚至Jar)包下的所有类,通过单元测试的形式对各个规范进行代码编写,如果项目代码中有违背对应的单测规范,那么单元测试将会不通过,这样就可以从CI/CD层面彻底把控项项目架构和编码规范。
最近线上的项目使用了spring-actuator
做度量统计收集,使用Prometheus进行数据收集,Grafana进行数据展示,用于监控生成环境机器的性能指标和业务数据指标。一般,我们叫这样的操作为"埋点"。SpringBoot中的依赖spring-actuator
中集成的度量统计API使用的框架是Micrometer,官网是Micrometer.io。在实践中发现了业务开发者滥用了Micrometer的度量类型Counter
,导致无论什么情况下都只使用计数统计的功能。这篇文章就是基于Micrometer分析其他的度量类型API的作用和适用场景。