分布式系统调用链监控
- 应用架构由集中式向分布式演进后,整个调用关系变得复杂。
- 分布式架构由复杂且较大规模集群构成,各个应用之间至关独立,可能由不一样团队、不一样语言实现。
- 系统一个完整的调用过程可能横跨多个服务及数据中心。
- 复杂的调用致使系统出问题后难以定位问题。
- 没法准确知道总体系统性能及运行状况。
全链路性能监控
一个请求完整的调用链可能以下图,通过多个系统服务,调用关系复杂。javascript
期间咱们会关注各个调用的各项性能指标,好比吞吐量(TPS)、响应时间及错误记录等。html
- 吞吐量,根据拓扑可相应计算组件、平台、物理设备的实时吞吐量。
- 响应时间,包括总体调用的响应时间和各个服务的响应时间等。
- 错误记录,根据服务返回统计单位时间异常次数。
全链路性能监控从总体维度到局部维度展现各项指标,将跨应用的全部调用链性能信息集中展示,可方便度量总体和局部性能,而且方便找到故障产生的源头,生产上可极大缩短故障排除时间。前端
Google Dapper
系统整个调用链java
- 当用户发起一个请求时,首先到达前端A服务,而后分别对B服务和C服务进行RPC调用;
- B服务处理完给A作出响应,可是C服务还须要和后端的D服务和E服务交互以后再返还给A服务,最后由A服务来响应用户的请求;
对整个调用过程的追踪后端
- 请求到来生成一个全局TraceID,经过TraceID能够串联起整个调用链,一个TraceID表明一次请求。
- 除了TraceID外,还须要SpanID用于记录调用父子关系。每一个服务会记录下parent id和span id,经过他们能够组织一次完整调用链的父子关系。
- 一个没有parent id的span成为root span,能够当作调用链入口。
- 全部这些ID可用全局惟一的64位整数表示;
- 整个调用过程当中每一个请求都要透传TraceID和SpanID。
- 每一个服务将该次请求附带的TraceID和附带的SpanID做为parent id记录下,而且将本身生成的SpanID也记录下。
- 要查看某次完整的调用则只要根据TraceID查出全部调用记录,而后经过parent id和span id组织起整个调用父子关系。
调用链监控核心工做
- 调用链数据的生成,对整个调用过程的全部应用进行埋点并输出日志。
- 调用链数据采集,对各个应用中的日志数据进行采集。
- 调用链数据存储及查询,对采集到的数据进行存储,因为日志数据量通常都很大,不只要能对其存储,还须要能提供快速查询。
- 指标运算、存储及查询,对采集到的日志数据进行各类指标运算,将运算结果保存起来。
- 告警功能,提供各类阀值警告功能。
总体架构
- 经过AGENT生成调用链日志。
- 经过logstash采集日志到kafka。
- kafka负责提供数据给下游消费。
- storm计算汇聚指标结果并落到es。
- storm抽取trace数据并落到es,这是为了提供比较复杂的查询。好比经过时间维度查询调用链,能够很快查询出全部符合的traceID,根据这些traceID再去hbase查数据就快了。
- logstash将kafka原始数据拉取到hbase中。hbase的rowkey为traceID,根据traceID查询是很快的。
AGENT无侵入部署
经过AGENT代理的无侵入式部署,将性能测量与业务逻辑彻底分离,能够测量任意类的任意方法的执行时间,这种方式大大提升了采集效率,而且减小运维成本。根据服务跨度主要分为两大类AGENT:架构
- Dubbo支持
- Rest支持
- 自定义RPC支持
好比生成的数据格式以下:运维
{
"hostIp": "192.168.4.1",
"instanceName": "TracingDemo",
"isEntry": true,
"errCode": 0,
"spanId": "3cbfe7f0-141c-4597-8b15-38d2fb145e01",
"parentId": "16a52a9f-e697-45ce-92fb-7395339eae4b",
"traceId": "e5549498-60f3-4870-8483-fe26f6d0367b",
"className": "dao.impl.ProductDaoImpl",
"methodName": "queryProduct",
"inParam": "",
"createTime": 1448442004537,
"returnTime": 1448442004537,
"callTime": 5
}复制代码
调用链监控好处
- 准确掌握生产一线应用部署状况;
- 从调用链全流程性能角度,识别对关键调用链,并进行优化。
- 提供可追溯的性能数据,量化 IT 运维部门业务价值。
- 快速定位代码性能问题,协助开发人员持续性的优化代码;
- 协助开发人员进行白盒测试,缩短系统上线稳按期。
一些效果图
====广告时间,可直接跳过====分布式
鄙人的新书《Tomcat内核设计剖析》已经在京东预售了,有须要的朋友能够到 item.jd.com/12185360.ht… 进行预约。感谢各位朋友。
=========================
欢迎关注: