当前位置: 首页 > 科技观察

如何实现微服务的实时性能分析?

时间:2023-03-17 20:34:55 科技观察

当开发者从微服务架构中获得敏捷的时候,观察整个系统的运行就成为了最大的痛点。在这篇文章中,IBMResearch展示了如何使用Spark来分析和统计微服务性能,由Cloudinsight工程师整理整理。简介作为一种高度灵活的架构风格,微服务在当今各种开发项目中越来越流行。在此架构中,应用程序在功能上被分解为一组松散耦合的服务,这些服务通过RESTAPI相互协作。通过这种设计原则,开发团队可以快速、持续地迭代每一个独立的微服务。同时,基于这些特点,许多组织可以将其部署能力提高数倍。然而,任何事情都有两个方面。当开发者从微服务架构中获得敏捷后,观察整个系统的运行情况就成为了最大的痛点。内容摘要多个服务协同工作以响应用户请求。在生产环境中,应用程序执行的端到端视图对于快速诊断和解决性能下降问题至关重要,而应用程序的数十个微服务(每个微服务对应数百个实例)使得理解这一点变得非常困难。信息如何在服务中穿梭流动?瓶颈点在哪里?如何判断用户体验到的延迟是网络造成的还是调用链中的微服务造成的?同时,在云环境下,企业基于微服务应用的性能分析工具的需求与日俱增,因此我们在尝试构建基于平台的实时性能分析工具,类似在自动缩放和负载平衡等服务的性质。通过捕获和分析应用程序中微服务的网络通信,以非侵入方式执行服务。在云环境中,服务分析需要处理来自实时租户应用程序的海量通信痕迹,进一步发现应用程序拓扑,跟踪服务通过网络微服务时的单个请求等。由于需要运行批处理和实时,因此采用了Spark-时间分析应用程序。Spark运行分析如图2所示,通过一个简单的实验来说明如何使用Spark进行运行分析。整体环境是一个OpenStack云,一组运行在不同租户网络中的基于微服务的应用程序,以及一个小型的Spark集群。每个Nova计算主机上都安装了一个软件网络分流器,用于捕获在租户网络内传递的网络数据包。从租户网络捕获的有线数据被放入Kafka总线。同时在Spark应用中写一个connector,获取Kafka包并实时分析。因此,编写Spark应用程序是为了尝试回答以下问题:响应最终用户请求,信息如何通过服务流动?在IT运营分析领域,这种类型的分析通常被称为“事务跟踪”。在给定的时间窗口内,应用中各个微服务之间的调用/被调用关系是怎样的?在给定的时间窗口内,应用程序中各种微服务的响应时间是多少?基于以上问题,2一个Spark应用:实时事务跟踪的应用Batch分析应用,生成应用的通信图和延迟统计前者是基于Spark流式抽象,后者是一组批处理作业由Spark作业服务器管理。实时事务跟踪的应用跟踪不同微服务之间的事务(或请求流)需要根据应用程序中不同微服务之间的请求-响应对创建因果关系。为了完全解除对应用程序的限制,这里将应用程序作为黑框处理。因此可以认为应用程序中没有使用全局唯一的请求标识符来跨微服务跟踪用户请求。为了追溯上述因果关系,Aguilera等人提出了一种黑盒分布式系统性能分析方法。此处采用2003年SOSP论文,稍作修改。针对同步网络服务,论文提出嵌套算法,将分布式应用表示为图,每条边代表节点间的交互。嵌套算法检查服务之间调用的时间戳以进一步推断因果关系。简单的说,如果服务A调用服务B,A在返回响应之前与服务C通信,那么服务B调用C被认为是A调用B引起的。通过分析一大组消息,可以得到call具有统计置信度的服务之间的链接,并消除不太可能的选项。论文中发表的原始算法旨在以离线方式对大型跟踪集进行操作。此用例修改算法以对数据包流的移动窗口进行操作,并逐渐完善拓扑推理。图3显示了事务跟踪应用程序中作业的部分工作流程。图4显示了由Spark应用程序派生的租户应用程序中的事务跟踪。数据包流以块的形式到达,以PCAP格式封装。单个流从数据包流中提取出来,并通过滑动窗口分组,即dstreams。在给定的时间窗口内,将HTTP请求和请求响应与标准的5元组进行比较,提取出srcipsrcportdestipdestportprotocol形成下一个DStream,再到嵌套算法中实现的其余处理管道(图中未显示).事务跟踪应用程序的输出将存储在时间序列数据存储(InfluxDB)中。标准批处理分析应用程序第二个Spark应用程序是一个标准批处理分析应用程序,它在给定的时间窗口内生成服务调用图和调用延迟统计信息。应用程序作为标准批处理作业提交到Spark作业服务器。如图5所示,批处理分析应用程序将单个事务跟踪从InfluxDB中分离出来,并将每个单独的事务跟踪转换为成对列表。这些列表聚合成两个RDDS:一个包含顶点列表,另一个包含边列表。根据顶点名称进一步解析顶点列表。***,应用程序的调用图是在有向图中计算的,以及图中每条边的延迟统计信息。该图是应用程序时间演化图的一个实例,表示给定时间的状态。图6和图7显示了租户应用程序延迟的调用图和统计信息,作为此批次分析作业的输出。结论通过Spark平台,批处理、流处理、图处理等多种类型的分析应用可以在统一的大数据平台上同时运行。下一步是研究系统的可扩展性方面,比如通过增加主机来线性提高数据提取速度,同时处理数千个租户的应用痕迹。后续会继续报道这方面的进展。