怎么实现微服务的实时性能分析?

当开发者从微服务架构获得敏捷时,观测整个系统的运行情况成为最大的痛点。在本文,IBM Research 展示了如何用 Spark 对微服务性能进行分析和统计,由 Cloudinsight 工程师编译整理。

引言

作为一种灵活性极强的构架风格,时下微服务在各种开发项目中日益普及。在这种架构中,应用程序被按照功能分解成一组松耦合的服务,它们通过 REST APIs 相互协作。

通过这个设计原则,开发团队可以快速地不断迭代各个独立的微服务。同时,基于这些特性,很多机构可以数倍地提升自己的部署能力。

然而凡事都有两面性,当开发者从微服务架构获得敏捷时,观测整个系统的运行情况成为最大的痛点。

内容概要

多个服务工作联合对用户请求产生响应。在生产环境中,应用程序执行过程中端到端的视图对快速诊断并解决性能退化问题至关重要的,而应用中多达数十的微服务(每个还对应数百个实例)使得理解这点变得非常困难。

信息是如何在服务中穿梭流动的?

哪里是瓶颈点?

如何确定用户体验的延迟是由网络还是调用链中的微服务引起?



与此同时,在云环境下,企业对基于微服务应用的性能分析工具的需求与日俱增,因此我们正在尝试构建基于平台的实时的性能分析工具,它的性质类似于自动缩放和负载平衡等服务。

通过捕获和分析应用中微服务的网络通信,服务按非侵入式的方式进行。

在云环境中,服务分析需要处理海量来自实时租户应用的通信追踪,进一步发现应用程序拓扑结构,跟踪当服务通过网络微服务时的单个请求等。由于需要运行批处理和实时分析应用,所以 Spark 被采用。

Spark 操作分析



图2所示,这里设置了一个简单实验来描述如何利用 Spark 进行操作分析。

整体的环境是一个 OpenStack 云,一组基于微服务的应用程序运行在不同租户的网络中,还有一个小型Spark集群。

在每个 Nova 计算主机上安装的软件网络 tap 来捕获通过租户网络内的网络数据包。从租户网络中捕获的 Wire-data 被投入 Kafka bus。

同时,在 Spark 应用中编写连接器,获取 Kafka 的包并对其进行实时分析。

因此,Spark 应用被编写试图来回答下列问题:

  • 对终端用户的请求响应时,信息流是如何通过服务的?在 IT Operational Analytics领域,这种分析操作通常被称为“事务跟踪”。
  • 在给定时间窗中,应用中各种微服务之间的调用/被调用关系是什么?
  • 在给定时间口中,应用中各种微服务的响应时间是多少?

根据以上问题,这里开发了2个 Spark应用程序:

  • 实时事务跟踪的应用程序
  • 批量分析应用来生成应用的通信图和延迟统计
  • 前者基于 Spark 流抽象,后者则是一组由 Spark 作业服务器管理的批处理作业。

实时事务跟踪的应用程序

跟踪不同微服务之间的事务(或请求流)需要根据应用程序中不同微服务之间的请求-响应对创建因果关系。为了完全不受限应用程序,这里将该应用当作一个黑盒。

因此不妨认为应用程序中没有利用任何全局唯一请求标识符来跟踪跨微服务的用户请求。

为了追踪上文所提的因果关系,这里采用了 Aguilera 等人在 2003 SOSP 论文中提出的一种对黑盒分布式系统进行性能分析的方法,并做细微的修改。

对于同步的网络服务,论文提出了一种 nesting algorithm,将分布式应用程序表示为一个图,各条边代表节点之间的相互作用。

这个 nesting algorithm 会检查服务之间的调用时间戳,进一步推断其因果关系。

简单地说,如果服务 A 调用服务 B,而 A 在返回响应之前会和服务 C 通信,那么服务 B 呼叫 C 被认为是由 A 调用 B 引起的。

通过分析一大组消息,这里可以得到服务间有统计性置信度的调用链,并消除可能性较小的选项。论文发表的原始算法旨在离线方式下操作大型的跟踪集。

这个用例会修改该算法来操作数据包流的移动窗口,并慢慢逐步完善的拓扑结构推断。

图3显示了事务跟踪应用中作业的部分工作流程。图4显示了在一个租户应用中的事务跟踪,由 Spark 应用推导。

  • Packet 流到达块中,以 PCAP 格式封装。
  • 个体流从Packet流中提取并按滑动窗口分组,即 dstreams。
  • 在给定的时间窗口内,HTTP请求和请求响应通过对比标准的5个 tuple 提取

srcip

srcport

destip

destport

protocol组成下一个 DStream,然后到nesting algorithm中实现的其余处理管道(未在图中显示)。

事务跟踪应用输出结果会存储到时间序列数据存储区中(InfluxDB)。



标准批量分析应用程序

第二个 Spark 应用是一个标准批量分析应用程序,在给定的时间窗口产生服务调用图以及调用延迟统计。应用作为标准批处理作业被提交到 Spark 作业服务器。

如图5所示,批量分析应用从 InfluxDB 分离出独立事务跟踪,并将每个独立事务跟踪转换为对的列表。

列表被聚集成两个 RDDS:

一个包含顶点列表

另一个为边列表

顶点列表根据顶点名称进一步解析。最后,应用程序的调用图在有向图中计算,以及图中每条边延迟时间的统计数据。

该图是应用程序时间演变图的一个实例,表示给定时间内的状态。图6和7显示调用图和租户应用延迟时间的统计数据,作为该批次的分析作业输出。



结束语

通过 Spark 平台,各种不同类型的分析应用可以同时操作,如利用一个统一的大数据平台进行批量处理、流和图形处理。

下一步则是研究系统的可扩展性方面,如通过增加主机线性提升数据提取速度,并同时处理成千上万租户的应用踪迹。后续会继续汇报这方面的进展情况。

作者:数控小V

来源:51CTO

时间: 2024-10-22 09:44:18

怎么实现微服务的实时性能分析?的相关文章

12年互联网产品开发人眼中的微服务架构云端应用

微服务架构很热,讨论的文章非常多.但如果提到微服务架构的云端应用,可以深入分析的还比较少.本篇来自中生代技术群(FreshmanTechnology)第二期,好雨云创始人兼CEO刘凡的分享.其曾任澳客网 CTO和CEO职位.拥有超过12年互联网产品开发和管理经验,专注于互联网技术架构设计,对产品设计.敏捷开发.安全.OKRs.大数据等领域有深入研究.现推崇反应式编程(http://www.reactivemanifesto.org/),并在多个产品中成功应用. 下为正文: 微服务架构(Micro

微服务架构设计(四):提升微服务分布式远程调用的可靠性与性能

在分布式微服务的架构下, 架构师往往面临著可靠性与性能间的抉择. 当来自某个微服务外部 Client 的远程调用, 要求微服务处理一购买 100 张股票的订单时.假如: A.  架构师所设计的微服务外部 Client 远程调用的 Time Out 时间是 2000 ms. 但, 此次微服务外部 Client 远程调用.微服务成功处理这 100 张股票的订单并送回一确认成功的信息到微服务外部 Client 时, 共花费了 3000 ms.所以, 微服务外部 Client 会误认为, 先前所发送的请

微服务和容器所引发的数据中心变革

软件定义基础架构.微服务和容器正在逐渐改变数据中心的构建和运行方式,未来的数据中心将会更加高效并且易于使用. 软件定义基础架构.微服务和容器是当前IT领域最为热门的话题,这些技术对数据中心的构建和运行方式产生了颠覆式影响,并且能够提升系统性能.弹性以及易用性.数据中心正在从传统的死板架构转换为更加灵活和快速响应的全新架构,甚至成为快速资源分配的发起者. 软件定义基础架构的概念并不复杂.比如,通过软件定义数据位于存储中的哪个部分,之后创建一个全新VLAN,将代码移动到虚拟机中形成一系列微服务.这些

微服务、SOA和API对比与分析

本文讲的是微服务.SOA和API对比与分析[编者的话]对比微服务架构和面向服务的架构(SOA)是一个敏感的话题,常常引起激烈的争论.本文将介绍这些争论的起源,并分析如何以最佳方式解决它们.然后进一步查看这些概念如何与 API 管理概念结合使用,实现更敏捷.更分散化.更具弹性的企业架构. 1 简介 在对比微服务架构和面向服务的架构(SOA)时,几乎不可能在它们彼此的关系上达成一致意见.如果应用程序编程接口(API) 再加入混战,就会让理解它们的差异变得更加困难.一些人可能会说这些概念完全不同,它们

SoundCloud:我们最终是如何使用微服务的?

本文讲的是SoundCloud:我们最终是如何使用微服务的,[编者的话]很多的技术文章着重介绍的都是项目后总结出的最佳实践,本文从另外的角度,介绍项目中解决问题的整个探索过程,详细讲述了在最终使用微服务架构之前所做的种种分析和尝试,这对于正在尝试解决问题的技术人员来说有很大的启示作用. 微服务是近期的热点. 当我在SoundCloud工作时,负责从一个巨大的Ruby on Rails应用程序里迁移到众多的微服务上.我已经多次讲述这个过程的技术问题了,在演讲里,也在SoundCloud的工程师博客

微服务框架和工具大全

在<Java微服务>一书中,我们使用 Spring Cloud,它提供使微服务非常容易地开发所需的所有工具和平台.Spring Cloud使用 Netflix开放源码软件( OSS).让我们探讨 Netflix OSS--一个完整的软件包. Netflix开放源码软件(OSS) Netflix开放源码软件中心是基于 Java的微服务开放源码项目最流行和最广泛使用的开放源码软件.世界上最成功的视频租赁服务依赖于它.Netflix已经有超过 4000万用户,他们在全球各地使用其服务.Netflix

学霸君基于Docker的微服务架构设计

以下内容根据演讲PPT以及现场分享整理而成. 今天主要分享的是我们在实践微服务架构或者容器架构过程中踩过的坑,对于致力在容器技术方面进行探索的同学会有很大帮助.本次将站在整体的角度,分享如何去运维整个线上系统,如何看待整个微服务的架构.微服务能带来什么帮助以及微服务又有哪些缺点,还有重要的一点就是微服务架构如何去落地实施.虽然阿里云这样的服务商为我们做了大量的工作,但是将微服务架构真正地落地实施还需要做很多的工作.而对于任何技术而言,都是存在优缺点的,微服务架构也不是救世的良药. 一.学霸君的发

微服务与SOA架构

本文讲的是微服务与SOA架构[编者的话]本文是Mark Richards写的微服务与面向服务架构完整报告. 基于服务架构的世界 微服务和SOA都被认为是基于服务的架构,这意味着这两种架构模式都非常强调将"服务"作为其架构中的首要组件,用于实现各种功能(包括业务层面和非业务层面).微服务和SOA是两种差异很大的架构模式,但是他们仍有一些相同的特征. 所有基于服务的架构的一个共性是他们一般都是分布式架构,也就是服务组件都是通过远程访问协议来实现的,例如REST.SOAP.AMQP.JMS.

从 Spring Cloud 开始,聊聊微服务架构实践之路

本文讲的是从 Spring Cloud 开始,聊聊微服务架构实践之路[编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架构的演进过程 单一应用架构(第一代架构) 这是平台最开始的情况,当时流量小,为了节约成本,并将所有应用都打包放到一个应用里面,采用的架构为 .NET SQL Server: 表示层:位于最外层(最上层),最接近用户.用于显示数