[29] APM(Application Performance Management)是一种应用性能监控工具,通过汇聚业务系统的各个处理环节的实时数据,分析业务系统各个事务处理的交易路径和处理时间,实现对应用的全链路性能监测。目前主流的APM工具,基本都是参考了Google的Dapper(大规模分布式系统的跟踪系统)体系,通过跟踪业务请求的处理过程,完成对应用系统在前后端处理、服务端调用的性能消耗跟踪,提供可视化的界面来展示对跟踪数据的分析。
常见的APM包括。
网址为:https://github.com/naver/pinpoint,是一款Java编写的大规模分布式系统的APM工具,由韩国人开发的开源的分布式跟踪组件,其特点是。
Ø分布式事务跟踪,跟踪跨分布式应用的消息。
Ø自动检测应用拓扑,帮助搞清楚应用的架构。
Ø水平扩展以便支持大规模服务器的集群。
Ø提供代码级别的可见性以便轻松定位失败点和瓶颈。
Ø使用字节码增强技术,添加新功能而无需修改代码。
网址为:https://github.com/apache/incubator-skywalking。2015年由个人吴晟,一名华为的开发者开源产品,2017年加入Apache孵化器。它针对分布式系统的应用性能监控系统,特别针对微服务、cloudnative和容器化(Docker, Kubernetes, Mesos)架构,其核心是个分布式追踪系统。SkyWalking使用Java探针字节码增加技术,实现对整个应用的监控。而对应用是零侵入的。
网址为:https://github.com/openzipkin/zipkin。是由Twitter团队开源的一个分布式的跟踪系统。它有助于收集数据需要解决潜在的问题。它管理数据的收集和查找。Zipkin结合spring-cloud-sleuth使用较为简单,集成也很方便。但是功能比较简单。
CAT(Central Application Tracking)是美团和大众点评开发的一款APM工具。它是基于Java开发的实时应用监控平台,包括实时应用监控,业务监控。
软件的性能调优的方法分为自顶向下和自底向上两种方法。
自顶向下分析法是从顶部开始发现问题,然后逐步向底部深入挖掘。比如通过发现系统响应时间变慢,吞吐率减少,定位系统化存在性能问题,然后逐步查看底层去查看是什么原因导致的。
自底向上分析法是通过发现CPU占有率高、内存消耗大、磁盘I/O变慢或网络延迟从而定位系统化存在性能问题,然后逐步查看顶层的表现来查找性能的问题。
自顶向下和自底向上是分析性能问题的两种方法,这两种方法没有优劣,在性能分析的时候应该很好地结合使用这两种方法,从而快速地发现问题。
现在前端技术层出不穷,前端性能测试也越来被受到重视。目前关于前端性能测试调优,Yahoo提出的“Web前端性能测试35条规则”是最得到大家认可的,读者可以访问
https://developer.yahoo.com/performance/rules.html去查看“Best Practices for Speeding Up Your Web Site”这篇文章。
程序优化包括:表单压缩、局部压缩、逻辑清晰、谨慎继承、算法优化、批处理、延迟加载、防止内存泄露、减少对大对象的引用、防止死锁、索引、存储过程、内存分配、并行、异步、好的模式设计、合适的I/O等诸多方面。性能测试工程师要配合开发工程师做好程序优化工作。
配置优化包括:JVM优化、连接池优化、线程池优化、缓存机制优化、CDN等几种方式。在这里简单介绍CDN。
以前中国的小朋友在线观看美国迪士尼的节目需要通过访问迪士尼总部的服务器来实现。虽然现在互联网速度非常快,但是在中国访问迪士尼在美国的官方服务器必定要通过中美海底光缆(CUCN),系统响应时间,可靠性等肯定是比较差的。在中国大陆建立了迪士尼的镜像服务器,每隔数小时把迪士尼在美国总部的节目同步到中国的镜像服务器中,中国的小朋友就可以通过镜像服务器观看迪士尼的节目了,虽然有数小时的延迟,比如在格林威治时间0:00美国主服务器上推出的节目,在中国可能要到格林威治时间6:00才可以看到,但是播放节目的速度,黄面的流畅性肯定要比在线观看在美国迪士尼总部服务器上的节目要好得多。请参看图3-39所示。
图3-39 CDN
数据库优化包括:架构结构优化、共享SQL、查询器优化、SQL语句优化、单条/并行SQL、优化内存(SGA、PGA、AMM)以及优化I\O。