• 0
  • 0
分享
  • 基于SkyWalking全链路监控的微服务系统性能调优探索实践
  • 曼倩诙谐 2023-09-22 10:51:34 字数 3042 阅读 1652 收藏 0

  1 背景

  随着开源社区和云计算的快速推进,云原生微服务作为新型应用系统的核心架构,得到了越来越广泛的应用。根据 Gartner 对微服务的定义:“微服务是范围狭窄、封装紧密、松散耦合、可独立部署且可独立伸缩的应用程序组件。”微服务之父,马丁.福勒,对微服务概述如下:就目前而言,对于微服务业界并没有一个统一的、标准的定义。但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在自己独立的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API )。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等,这种方法能够提高应用系统的响应速度、灵活性和部署弹性,能够按照业务发展与时俱进快速迭代和优化。目前行内越来越多的应用服务系统已升级改造为微服务架构,对现有应用监控体系提出了新的挑战。

  为推动微服务应用监控体系的建设和发展,探索微服务全链路监控技术在行内的实践路径,我们重点引入了SkyWalking开源可观测平台,通过非代码侵入的方式,采集微服务全链路监控信息,以可视化的方式展现微服务系统的拓扑关系、追踪交易链路、精准识别性能瓶颈,弥补现有测试工具和方法对微服务全链路应用监控的缺失。

  2  SkyWalking简介

  SkyWalking是开源的可观测平台的APM系统,专为微服务,云原生架构和基于容器(Docker,k8s,Mesos等)的架构设计的应用程序性能监控工具,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。SkyWalking主要由以下四大部分构成:

  Agent代理程序

  探针收集数据并根据SkyWalking的要求对数据进行重新格式化(不同的探测器支持不同的来源);Agent 运行在各个服务实例中,负责采集服务实例的 Trace 、Metrics 等数据,然后通过 gRPC 方式上报给 SkyWalking 后端,供OAP服务器进行分析,本文将在第3章详细介绍Agent代理程序。

  OAP服务器

  SkyWalking的OAP(Observability Analysis Platform,观测分析平台)是一个用于分析链路采样数据的分析计算系统。

  在OAP服务主要需要计算以下三类数据:

  (1)Record数据

  记录的链路数据,如Trace、访问日志等数据,由RecordStreamProcessor进行处理。

  (2)Metrics数据

  记录的指标数据,绝大部分的OAL(Observability Analysis Language)指标都将生成这类数据,由MetricsStreamProcessor进行处理。

  (3)TopN数据

  记录的周期性的采样数据,如慢SQL的周期性采集,由TopNStreamProcessor进行处理。

  Trace、访问日志等这类的明细数据,数据量比较大,但不需要归并处理,所以在OAP节点内部即可处理完成,这些明细数据采用缓存、异步批量处理和流式写入的方式将它们写入到外部存储器( Storage )中。

  绝大部分由OAL(Observability Analysis Language)定义的指标数据是需要微服务聚合计算的,所以在OAP集群计算流中将其分为了两个步骤。

  步骤一,接收和解析Agent代理程序发送的数据,并执行当前OAP服务节点内的数据聚合,使用OAL或其他聚合模式。对于不需要聚合的数据,直接将其写入到外部存储器( Storage )中;如果是需要微服务聚合的数据,根据一定的路由规则发送给指定的OAP服务节点。

  步骤二,接收和解析经步骤一处理的数据,之后进行二次聚合计算,并将结果数据写入到外部存储器( Storage )中。

  针对以上两个步骤,OAP服务节点被分为Receiver(处理步骤一)和Aggregator(处理步骤二)两种角色。

  默认情况下,所有OAP服务节点均为Mixed混合角色,其既可以执行步骤一的操作,也可以执行步骤二的操作。在大规模系统部署SkyWalking的场景下,可根据网络流量进行角色分离的两级部署。

  OAP服务器还服务响应 SkyWalking UI 界面发送来的查询请求,将前面持久化的数据查询出来,组成正确的响应结果返回给 UI 界面进行展示。

  Storage数据库存储

  作为OAP服务的外部存储设备,负责数据的存储,支持多种存储类型,可以使用既有的存储系统,如ElasticSearch,Mysql等,也可以自定义实现存储系统。SkyWalking数据可以选择存储在已实现的ElasticSearch, Mysql, TiDB, InfluxDB,H2的持久化系统,其中H2是内存数据库,存储的数据在内存里,不落到磁盘上,重启SkyWalking服务会导致数据丢失,是默认的存储方式,一般线上使用ElasticSearch 集群作为其后端存储。

  UI界面

  负责可视化和管理SkyWalking 数据,前后端分离,该 UI 界面负责将用户的查询操作封装为 GraphQL 请求提交给 OAP 后端触发后续的查询操作,待拿到查询结果之后会在前端负责展示并可以查看链路调用关系,查看各种监控指标,性能指标等等。

  由以上对构成SkyWalking的各分系统的介绍可知,Agent代理程序负责收集各种链路采样数据,通过GRPC的?式传递给OAP进行分析并且存储到数据库中,最终通过UI界面将分析的统计报表、服务依赖、拓扑关系图展示出来。

  3  SkyWalking应用扩展及性能调优

  自定义插件开发示例,基于某系统开发自定义插件,将其部署至SkyWalking部署包的plugins目录内。

  对某查询接口执行调用操作,多个线程都可以在SkyWalking中查看方法的采样信息,如图1所示:

1-1.png

图1 某查询方法的采样信息

  点击图1中的某查询方法链接,可以查看详细的跨度信息,如图2所示。

1-2.png

图2 跨度信息

  由以上信息可知,可以清晰看到我们添加的三个tag标签分别为:invoke开始时间,invoke结束时间,系统间查询方法执行时长(ms)。

  系统重构,架构特点为多微服务、多链路系统。可应用参数配置检查、可观测性技术、数据移植、同步验证4个课题的成果。

  性能调优示例,为了尽可能减少SkyWaling Agent对业务性能测试的影响,真实监控出业务系统性能瓶颈,我们对SkywalkingAgent进行了一些性能调优,通过调整采样频率和采样数量等相关参数,减少部署SkyWalking Agent后产生的额外的性能损耗。图3是通过对同一只交易在未部署SkyWaling Agent情况下、已部署SkyWaling Agent标准化(未性能调优)情况下、已部署SkyWaling Agent已性能调优情况下,在相同并发下的性能测试结果对比,调优之后,我们发现性能表现相对于标准化部署场景下有提升,相较未部署agent情况,将性能损耗降到最小。

1-3.png


作者:陈明坤    

来源:http://www.51testing.com/html/60/n-7797660.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   一、软件下载  1、JDK1.7  2、Apachetomcat7.0  3、JMeter-2.9  二、软件安装及设置环境变量  1、JDK安装目录在C:\ProgramFiles\Java,其环境变量设置为:  (1)JAVA_HOME值为:C:\ProgramFiles\Java\jdk1.7.0_21  (2)CLASSPATH值为:.;%JAVA_HOME%\lib;  (3)Path值为:%JAVA_HOME%\bin;  2、Apachetomcat安装目录在C:\ProgramFiles\ApacheSoftwareFoundation\Tomcat7.0  3、JMete...
            0 0 1034
            分享
          •   两个熟悉的场景:  ·生产环境出现问题,解决问题,原因复盘、责任分配到人;  · 无休止的测试-回归-再测试-再回归测试,已经投入了很大精力,但仍对项目质量不信心;  如果自己所负责或参与的项目经常遇到上面的两种情况,不妨从项目测试流程角度,去思考原因以及破开瓶颈的方法。  测试流程拆解  需求评审  通过参与技术设计评审,可以为测试方案提供依据。例如:核心业务是否需要接口测试、新老数据兼容问题、测试场景的数据构造以及测试所需的工具等,都可以在这个阶段进行思考和产出。  另外,可以有效的评估需求影响范围和风险点,避免遗漏。  此阶段是质量的基石,通过测试左移,尽早发现需求设计缺陷...
            0 0 1199
            分享
          •   叮,周五一上班,工作群里领导就开始催:‘各位小伙伴别忘记交周报了’  这种场景熟不熟悉~  你有没有一种好难的感觉?  心里顿时在纠结周报要写点什么呢?  为什么有这种想法呢?  当工作内容并不饱和时,编写周报可能会显得有些尴尬,因为需要在有限的工作内容中挖掘亮点,展示自己的工作价值。  所以即使工作内容不多,但周报还是得写得满满当当?体现我们的价值  当我们在工作中遇到了工作很闲的情况时,编写周报可能会变得很困难。我们可能会觉得没有足够的内容可以写,周报显得很空洞。然而,即使工作很闲,我们仍然可以通过一些技巧和方法来编写一份饱和且有意义的周报。  本文将分享一些如何进行条目化编写周报、如...
            0 0 732
            分享
          • 1、双击jmeter.bat文件,进入jmter界面,如下图;2、右击测试计划--添加--线程(用户)--线程组,添加一个线程组,如下图所示;3、右击线程组--添加--取样器--HTTP请求,添加一个HTTP请求,如下图所示4、根据给定的接口文档或者自己抓包获取的URL相关信息,填写以下信息:5、示例URL:https://baidu.gh.cn/baidu.service/LoginService/Login(此网址为错误网址,仅作举例使用)Request Method(请求方式): POSTjmeter内填写以下信息(如下图):协议:https服务器名称或IP:baidu.gh.cn路径:...
            0 0 5839
            分享
      • 51testing软件测试圈微信