|
导读在微服务大行其道的环境下,分布式架构和微服务框架给系统性能分析和问题定位带来了非常大的挑战。如何通过汇聚业务系统各处理环节的实时数据,实现对应用的全链路性能监测成为服务治理的一大难题。本文主要基于智慧零售腾讯有数产品的业务背景分享基于SkyWalking的腾讯云微服务观测实践,希望给有这方面需求的同学一些启发。作者介绍陈俊洪腾讯智慧零售部 运营开发工程师擅长数据资产管理、微服务治理等背景众多的微服务缺乏统一的管理规范(监控、调用链追踪)多账号公有云,自研云,内网k8s多个部署平台TAF,TKE,TKEX在线服务异常无法快速定位NFS 日志挂载方式缺乏统一的web管理界面缺少服务性能诊断无法及时发现某些不合理的调用,如频繁进行数据库操作、循环依赖等。目标基于上述背景,希望能构建一个组件平台具备如下核心功能经过调研,我们发现SkyWalking这一款用于微服务(Docker,Kubernetes,Mesos)框架下的分布式应用行为监控工具刚好能满足我们的需求。核心原理skywalking_architectureSkyWalking的架构主要含3部分:上报端Client,数据接收端Collector和web展示UI。核心原理有以下几点:使用JavaAgent探针技术进行jvm与行为数据采集内部使用HTTP和gRPC协议进行通信使用GrapHQL和HTTP进行UI展示支持的存储有H2(仅使用于小数据量的调试,一般不建议使用)和Elasticseach服务上报实践腾讯有数的后台服务目前主要使用的是SpringBoot技术栈,为了降低后台同学的额外开发成本,我们考虑整体的服务治理时尽量避免代码入侵。常规的服务启动命令为:$java-Dspring.profiles.active=dev-jartarget/youshu-app.jar引入SkyWalking的Agent进行数据上报后的启动命令只需要添加“-javaagent”参数指定Agent的绝对路径即可,如:$java-javaagent:/e/apache-skywalking-apm-bin/agent/skywalking-agent.jar-Dspring.profiles.active=dev-jartarget/youshu-app.jar可视化的UI提供调用关系拓扑图和调用链路Trace,实例图如下:skywallking-topology skywalking-trace腾讯微服务观测平台:TSW确定了组件之后,如何能让开发同学更专注于业务功能开发,而不需要关注SkyWalking底层服务的日常运维?一方面为了响应集团统一上云的大趋势,另一方面为了降低团队内的运营成本,我们最后决定借助腾讯云的能力,由专业的团队负责服务的SkyWalking日常运营。对比开源的SkyWalking,通过腾讯云TSW的架构图,我们可以发现以下几点:数据采集(Client):上报方式更为灵活,可选择使用TSW探针,或选择使用开源采集端用于采集数据。若您希望由开源迁移上云,您可保留Client端的大部分配置,仅更改上报地址即可。数据处理(Server):数据上报到Server端时,首先会由PulsarFunction(消息队列)削峰填谷。对不同开源客户端上报的数据,Adapter适配器会将数据转换为统一的Opentracing兼容格式,以供后续使用。统一数据格式后,链路数据会被直接存储,同时会根据数据的使用场景,分配给实时计算算子与离线计算算子。实时计算算子为您提供实时监控、统计数据展示,并对接告警平台快速响应。离线计算算子处理长时段大量数据的统计汇聚,利用大数据分析能力提供业务价值。存储(Storage):存储层的设计可满足不同数据类型的使用场景,适配Server层的写入与DataUsage层的查询与读取请求,同时存储层增加了HBase和HDFS的存储方式。数据使用(DataUsage):提供腾讯云统一的控制台操作、数据展示、告警提供底层支持。TSW系统架构图TSW基于开源Agent进行数据上报由于我们的后台服务基于腾讯云TKE部署,因此需通过挂载nfs云硬盘的方式进行Agent的配置管理。step1:修改docker服务的启动命令$ java -javaagent:/nfs_data/XXX/XXX/agent/skywalking-agent.jar -Dspring.profiles.active=dev -jar target/youshu-app.jarstep2: 将开源agent下载后上传到nfs挂载点对应的目录,如“/nfs_data/XXX/agent/”step3: 修改对应的配置信息 config/agent.conf#腾讯云TSW默认上报地址collectorXXXXXX#基于腾讯云账号分配的唯一tokenagent.XXXX@#上报的服务名称可自定义agent.service_name=XXX-apistep4:重启服务待有流量进来之后可验证界面是否有对应的拓扑图(也可通过查看logs/xxx查看是否上报异常)TSW分布式依赖拓扑图TSW接口请求的耗时详情主流APM组件对比业界存在众多应用性能管理组件为什么选择SkyWalking呢?具体可参考如下对照表:Agent探针的性能分析关于Agent的引入,我们跟很多同学一样也非常关心其对服务性能方面的影响到底有多大?这里基于官方的测试统计,我们发现针对一个web的应用,只提高了10%左右的CPU负荷。Agent性能分析图总结应用性能管理只是服务治理中的一部分,本文以腾讯有数业务的后台服务现状为背景,为了解决当前遇到的服务调用监控、服务链路追踪和服务性能诊断的3大问题,先后介绍了开源SkyWalking和腾讯云TSW的系统架构及相关实践。参考资料1.详解JavaAgent探针:https://zhuanlan.zhihu.com/p/1358727942.腾讯微服务观测平台产品概述:https://cloud.tencent.com/document/product/1311/507543.Agent探针性能揭秘:https://github.com/SkyAPMTest/Agent-Benchmarks/blob/master/README_zh.md4.Skywalking:http://skywalking.apache.org/恭喜以下同学在活动中获得定制充电宝1个请在2021年3月30日前联系小Q妹获得奖品链接 往期推荐《拥抱Agent,“0”代码玩转Trace之OpenTelemetry系列第二弹!》《今天我们聊聊Trace之OpenTelemetryAndTSW|概览》《独家分享:Kafka集群间信息复制攻略来了!》扫描下方二维码关注本公众号,了解更多微服务、消息队列的相关信息!解锁超多鹅厂周边!
|
|