1. 为何要使用分布式调用链技术?java
随着公司业务的高速发展,公司服务之间的调用关系越发复杂,如何理清并跟踪它们之间的调用关系就显的比较关键。线上每个请求会通过多个业务系统,并产生对各类缓存或者 DB 的访问,可是这些分散的数据对于问题排查,或者流程优化提供的帮助有限。在这样复杂的业务场景下,业务流会通过不少个微服务的处理和传递,咱们不免会遇到这些问题:node
- 一次请求的流量从哪一个服务而来? 最终落到了哪一个服务中去?
- 为何这个请求这么慢? 到底哪一个环节出了问题?
- 这个操做须要依赖哪些东西? 是数据库仍是消息队列?
- Redis挂了,哪些业务受影响?


2. 开源产品从多,能够从以下几个方面去选型。mysql
咱们须要达到的目标:git
- 低消耗性:跟踪系统对业务系统的影响应该作到足够小。在一些高度优化过的服务,即便一点点损耗也容易察觉到,并且有可能迫使在线负责的部署团队不得不将跟踪系统关停
- 低侵入性:做为非业务组件,应当尽量少侵入或者无侵入业务系统,对于使用方透明,减小开发人员的负担
- 时效性:从数据的收集产生,到数据计算处理,再到最终展示,都要求尽量快
- 决策支持:这些数据是否能在决策支持层面发挥做用,特别是从 DevOps 的角度
- 数据可视化:作到不用看日志经过可视化进行筛选
实现的功能:web
- 故障定位:调用链路跟踪,一次请求的逻辑轨迹能够完整清晰的展现出来。
- 性能分析:调用链的各个环节分别添加调用耗时,能够分析出系统的性能瓶颈,并针对性的优化。
- 数据分析:调用链是一条完整的业务日志,能够获得请求的行为路径,汇总分析应用在不少业务场景。
开源产品:sql
- Twitter 公司开源的分布式追踪系统 Zipkin
- 韩国人开源的分布式跟踪组件 Pinpoint
- 国产的优秀APM组件 Skywalking,
- 其余相似的组件还有美团点评的 CAT。
分布式调用链和传统的新能监控有什么区别?数据库
APM工具与传统的性能监控工具的区别在于,不单单提供一些零散的资源监控点和指标,其主要关注在系统内部执行、系统间调用的性能瓶颈分析,这样更有利于定位到问题的具体缘由。apache
社区活跃度:windows
类别缓存 |
Zipkin |
Pinpoint |
SkyWalking |
CAT |
start小星星数 |
9.7k |
7.5k |
4.7k |
6.7k |
性能分析:

3. 综上多个方面最终选择Skywalking,下面主要围绕Skywalking进行展开。
搭建Skywalking须要安装的组件(windows为例):
- elasticsearch-5.6.2(ES/data目录为ES数据存放目录,能够经过删除该目录清空数据,ES/config/elasticsearch.yml配置cluster name、node.name)
- ES和head插件(须要安装Node.js),安装参考博客:windows下ES和head插件的安装(一个界面化的集群操做和管理工具)
- 下载apache-skywalking-apm-incubating-5.0.0-GA,详细介绍能够参考博客:skywalking学习笔记
- agent:探针,用来收集和发送数据到归集器(在/apm/agent/config/agent.config主要配置collector地址和应用名称,通常都是一个项目对应一个agent目录)。
- collector:链路数据归集器,数据能够落地ElasticSearch,单机也能够落地H2,不推荐,H2仅做为临时演示用(在/apm/config/application.yml主要配置ES)。
- web:web可视化平台,用来展现落地的数据。
- ui:单独的开源ui项目,更美观易用。
搭建过程当中须要注意的事:
- 须要在/apm/collector-libs下放入mysql-connector-java-5.1.47.jar包。
- 全部软件的目录尽可能不要放在带有空格的目录下(如:Program Files),ES除外。
- 多服务器搭建须要考虑时区不一致问题。
多组件启动顺序:
ES、ES head、/apm/bin/startup.bat、使用java命令指定-javaagent:skywalking-agent.jar去启动应用(war、jar)去运行应用、访问web查看agent注册状况。
相关软件请移步到码云或网盘上下载(相关软件都亲测成功,请放心使用):
https://gitee.com/qrmc/oschina_software_package
连接:https://pan.baidu.com/s/1nCa0Xipj-5tD3nc-3g-QdQ 提取码:wdxu
4. 总结:待应用实战后总结优缺点...