【转载请注明出处】:http://www.javashuo.com/article/p-cyotkxxd-nq.htmljava
随着企业经营规模的扩大,以及对内快速诊断效率和对外SLA(服务品质协议,service-level agreement)的追求,对于业务系统的掌控度的要求愈来愈高,主要体如今:mysql
同时,对于企业来讲,可以更精确的了解资源的使用状况,对于成本核算和控制也有很是大的裨益。git
在这种状况下,通常都会引入APM(Application Performance Management & Monitoring)系统,经过各类探针采集数据,收集关键指标,同时搭配数据呈现和监控告警,可以解决上述的大部分问题。github
然而随着RPC框架、微服务、云计算、大数据的发展,同时业务的规模和深度相比过往也都增长了不少,一次业务可能横跨多个模块/服务/容器,依赖的中间件也愈来愈多,其中任何一个节点出现异常,均可能致使业务出现波动或者异常,这就致使服务质量监控和异常诊断/定位变得异常复杂,因而催生了新的业务监控模式:调用链跟踪--可以分布式的抓取多个节点的业务记录,而且经过统一的业务id(traceId,messageId,requestId等)将一次业务在各个节点的记录串联起来,方便排查业务的瓶颈或者异常点web
APM和调用链跟踪均不是新诞生事务,不少公司已经有了大量的实践,不过开源的而且可以开箱即用的产品并很少,这里主要选取了Pinpoint,Skywalking,CAT来进行对比(固然也有其余的例如Zipkin,Jaeger等产品,不过整体来讲不如前面选取的3个完成度高),了解一下APM和调用链跟踪在开源方面的发展状态。sql
Pinpoint是一个比较早而且成熟度也很是高的APM+调用链监控的项目,在全世界范围内均有用户使用,支持Java和PHP的探针,数据容器为HBase,其界面参考:apache
Skywalking是一个新晋的项目,最近一两年发展很是迅猛,自己支持OpenTracing规范,优秀的设计提供了良好的扩展性,支持Java、PHP、.Net、NodeJs探针,数据容器为ElasticSearch,其界面参考:编程
CAT是由美团开源的一个APM项目,也历经了多年的迭代升级,拥有大量的企业级用户,对于监控和报警整合比较紧密,支持Java、C/C++、.Net、Python、Go、NodeJs,不过CAT目前主要经过侵入性的方式接入,数据容器包括HDFS(存储原始数据)和mysql(二次统计),其界面参考:segmentfault
上面只是作了一个简介,那这三个项目各自有什么特点或者优点/劣势呢(三者的主要产品均针对Java,这里也主要针对Java的特性)网络
优点:
劣势:
优点:
劣势:
优点:
劣势:
若是分别去看Pinpoint/Skywalking/CAT的总体设计,咱们会发现三者更像是一个规范的三种实现,虽然各自有不一样的机制和特性,可是从模块划分和功能基本是一致的:
固然也有一些微小的区别:
【转载请注明出处】:http://www.javashuo.com/article/p-cyotkxxd-nq.html