一年一度的“双11”购物狂欢节即将来临,要确保用户享受“快、稳、炫”的抢购体验,技术工程师们需要解决瞬间高并发的诸多问题,如海量数据处理、网络传输产生的延迟和负载均衡,等等。
那么,如何在第一时间了解出现的问题并及时解决问题呢?一套完整的应用性能管理解决方案在电商峰值架构中将发挥无比重要的作用,有了性能管理的保护伞,就可将“宕机”永远留在襁褓中。
本文分享了应用性能管理提供商听云,多年积累的电商峰值架构监控经验,希望能对大家有帮助。
最底层是对服务器资源的监控,包括硬盘可用空间、CPU使用率、内存占用、I/O、网络流量等指标。
第二层是对网络链路层面的监控,其中包括内部网络状况的监控,例如集群之间的网络连通性、路由情况,还包括外部用户的网络状态监控,例如DNS、CDN服务质量等指标。
第三层是应用层面的监控,包括Web应用容器、数据库、NoSQL、手机App的指标,例如Cache命中率、JVM状态是否正常、每秒的请求量(QPS)、请求响应时间、请求状态、请求队列长度、数据库响应时间、慢SQL性能、Memcache、Redis服务状态、App打开率、App交互性能、App崩溃等指标。
最顶层是业务层面的监控,包括关键业务的处理能力和业务逻辑的流畅程度等指标,例如单位时间的订单数量、新客户注册数量、客户投诉数量、关键业务的队列排队数量、用户查询购买某一商品的流畅度等。对不同电商来说,监控指标内容和数据来源完全不同。图1中是需要监控的所有内容。监控内容存在短板效应,某一内容层面的监控缺失,均会引起电商的重大经济损失。
图1 监控内容
构建监控平台通常有以下3种方式。
无论采取哪种方式搭建的监控平台,通常都采用分布式架构。如果集中运算的话,通信和运算的成本会很高。因此,电商会采取在监测点分析监控数据的方法,先产生一个比较小的结果数据,然后汇总到一个集中的监控平台上进行二次运算。
由于监控内容涉及面广泛,电商通常会根据不同的监控内容采用不同的监控途径。
除了使用操作系统自带的基础命令(如top、 free)采集数据以外,阿里、京东等资金雄厚且技术能力强的知名电商公司,开发并开源了一系列监控工具,例如Tsar是阿里巴巴开源的采集工具,主要用来收集服务器的系统信息(如CPU、I/O、Mem和TCP等)和应用层面的数据(如Squid、HAProxy、Nginx等),用户也可以根据需求编写自己的采集模块,集成到Tsar中即可使用,产生的数据输出到远程数据库或者集成到Nagios或Cacti中即可显示。
监控内部网络的状态采取与监控服务器资源类似的方式,使用脚本调用操作系统自带的命令(Ping和Tracert等)或其他开源工具进行数据采集,数据集成到Nagios或Cacti中展示。
有两种监控外部网络状态的方法可以得到用户使用网站的体验数据。一种方法是自行开发并运营监控网络,此类方法适用于资金雄厚的公司,例如阿里开发了Alibench,并在全国征集志愿者安装这个工具,探测网站访问是否正常并将探测到的数据上传到服务器进行汇总分析。另一种方法是购买第三方服务,例如听云Network服务,以付费的方式招募会员,并在全球安装监测节点。这两种方法的技术原理相似,都是通过在全国或全球的终端用户电脑上部署探测工具,探测工具内嵌IE、Chrome、Firefox这些主流浏览器内核,获取访问网站过程中的DNS解析、TCP建立连接、页面DOM解析和页面渲染等过程的详细数据。通过查看分类汇总的数据分析哪些用户访问网站时出现了错误或性能瓶颈,哪些CDN提供的加速效果更优秀,从哪些角度可以进一步优化网站。
常规针对应用层面的监控方法是,利用脚本对应用服务器产生的日志进行统计分析,或利用应用服务器自带的统计分析命令和接口进行数据汇总。
在Web应用容器层面通过HTTP请求访问日志可以统计请求量(QPS)、请求响应时间、错误等信息,通过JVM命令查询JVM状态;在数据库层面,开启慢SQL查询日志,使用数据库相关命令统计慢SQL语句。
第三方APM服务厂商的应用性能管理服务,例如听云Server服务,采取自动跟踪Web应用容器内HTTP请求的出入口和应用代码函数方式,不仅可以采集应用运行时的QPS、请求响应时间、错误信息、SQL调用等信息,还可以采集到常规方法无法获取的代码级别的性能信息,进而分析应用的瓶颈所在。
对于近几年兴起的移动App而言,监控App应用需要研发人员嵌入第三方的SDK代码。SDK代码在App运行时统计用户的交互行为、打开情况和崩溃信息,在一定时间段内汇总信息,提交到监控平台。
对关键业务处理能力的监控,通常采取研发人员预留API接口,使用脚本调用API接口获取关键业务处理数据,并将数据集成到Nagios或Cacti中展示的方法。
业务逻辑流畅程度的监控需要购买第三方的业务流程监控功能,此类工具需要熟悉业务的人员录制业务流程的脚本,并上传到第三方监控平台。平台将流程脚本部署到第三方监控节点上,并自动回放流程脚本模拟用户对流程的操作,最终平台会采集到每一步骤的性能和错误信息。
图2为某电商购物流程的监控曲线图,监控流程为打开电商首页,录入商品名称搜索,点击搜索结果中一款商品打开商品页,将商品加入购物车,点击付款。
图2 购物流程监控图
3月3日购物流程可用性突然下降至65%左右,说明此时35%左右的用户无法正常完成购物体验。由于监控平台设置的报警阈值为90%,所以监控平台在监控到发生异常后5分钟内发出了报警短信和报警邮件。电商运维人员接收到短信报警后通过查看详细的监控数据定位问题并及时通知研发人员解决,问题于购物高峰期来临之前被修复。
通过监控的浏览器拷屏数据发现,电商IT部门3月3日凌晨上线新改版的系统,由于兼容性测试不够全面导致部分浏览器出现JavaScript错误,引起界面错乱,造成购物流程无法正常完成(图3)。
图3 JavaScript错误,导致购物流程出问题
经过排查,程序员可以及时纠正这些问题,使电商网站尤其在关键业务上避免不必要的损失。
通过前面的讲述,我们可以看到,利用有效的监控手段,可以及时了解用户访问电商时出现的问题,极大地有助于电商企业的技术工程师快速定位出现问题的区域,并尽快给出解决方案。这样可以极大提升电商网站的购物体验,对于大促、秒杀等峰值场景更为重要。简单一句话,“在电商峰值架构中,监控无所不在”。
作者Wood,听云CTO,拥有超过15年互联网及软件行业服务经验,专注于应用性能监测及优化研究,具有丰富的互联网应用性能诊断和优化经验。
更多精彩详见《程序员》11月刊,欢迎订阅《程序员》杂志iPad/Android版。
本文为《程序员》原创文章,未经允许不得转载,如需转载请联系market#csdn.net(#换成@)
阅读和此文章类似的: 程序员专区