阅读更多

1顶
0踩

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

以下为译文

作为一种灵活性极强的构架风格,时下微服务在各种开发项目中日益普及。在这种架构中,应用程序被按照功能分解成一组松耦合的服务,它们通过REST APIs相互协作。通过这个设计原则,开发团队可以快速地不断迭代各个独立的微服务。同时,基于这些特性,很多机构可以数倍地提升自己的部署能力。

然而凡事都有两面性,当开发者从微服务架构获得敏捷时,观测整个系统的运行情况成为最大的痛点。如图1所示,多个服务工作联合对用户请求产生响应;在生产环境中,应用程序执行过程中端到端的视图对快速诊断并解决性能退化问题至关重要的,而应用中多达数十的微服务(每个还对应数百个实例)使得理解这点变得非常困难。信息是如何在服务中穿梭流动的?哪里是瓶颈点?如何确定用户体验的延迟是由网络还是调用链中的微服务引起?



与此同时,在云环境下,企业对基于微服务应用的性能分析工具的需求与日俱增,因此IBM Research正在尝试构建基于平台的实时的性能分析工具,它的性质类似于自动缩放和负载平衡等服务。通过捕获和分析应用中微服务的网络通信,服务按非侵入式的方式进行。在云环境中,服务分析需要处理海量来自实时租户应用的通信追踪,进一步发现应用程序拓扑结构,跟踪当服务通过网络微服务时的单个请求等。由于需要运行批处理和实时分析应用,所以Spark被采用。



图2所示,这里设置了一个简单实验来描述如何利用Spark进行操作分析。整体的环境是一个OpenStack云,一组基于微服务的应用程序运行在不同租户的网络中,还有一个小型Spark集群。在每个Nova计算主机上安装的软件网络tap来捕获通过租户网络内的网络数据包。从租户网络中捕获的Wire-data被投入Kafka bus。同时,在Spark应用中编写连接器,获取Kafka的包并对其进行实时分析。

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

1. 对终端用户的请求响应时,信息流是如何通过服务的?在IT Operational Analytics领域,这种分析操作通常被称为“事务跟踪”。

2. 在给定时间窗中,应用中各种微服务之间的调用/被调用关系是什么?

3. 在给定时间口中,应用中各种微服务的响应时间是多少?

根据以上问题,这里开发了2个Spark应用程序:1个实时事务跟踪的应用程序和1个批量分析应用来生成应用的通信图和延迟统计。前者基于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 提取(src_ip、src_port、dest_ip、dest_port, protocol),组成下一个DStream,然后到nesting algorithm中实现的其余处理管道(未在图中显示)。事务跟踪应用输出结果会存储到时间序列数据存储区中(InfluxDB)。



第二个Spark应用是一个标准批量分析应用程序,在给定的时间窗口产生服务调用图以及调用延迟统计。应用作为标准批处理作业被提交到Spark作业服务器。如图5所示,批量分析应用从InfluxDB分离出独立事务跟踪,并将每个独立事务跟踪转换为<vertex,edge>对的列表。列表被聚集成两个RDDS,一个包含顶点列表,而另一个为边列表。顶点列表根据顶点名称进一步解析。最后,应用程序的调用图在有向图中计算,以及图中每条边延迟时间的统计数据。该图是应用程序时间演变图的一个实例,表示给定时间内的状态。图6和7显示调用图和租户应用延迟时间的统计数据,作为该批次的分析作业输出。









通过Spark平台,各种不同类型的分析应用可以同时操作,如利用一个统一的大数据平台进行批量处理、流和图形处理。下一步则是研究系统的可扩展性方面,如通过增加主机线性提升数据提取速度,并同时处理成千上万租户的应用踪迹。后续会继续汇报这方面的进展情况。

原文链接:Real-time Performance Profiling & Analytics for Microservices using Spark(责编/仲浩)
  • 大小: 9.1 KB
  • 大小: 25.6 KB
  • 大小: 22.4 KB
  • 大小: 19.7 KB
  • 大小: 12.7 KB
  • 大小: 14 KB
来自: OneAPM
1
0
评论 共 2 条 请登录后发表评论
2 楼 田梦桦 2015-11-21 14:48
小弟学士不够,看的好累,看不懂
1 楼 mangguo 2015-11-20 15:10
推荐大家一本书,机械工业出版社出版的经典《spark大数据处理》:http://www.hubwiz.com/books

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 使用 Spark 进行微服务的实时性能分析

    在本文,IBM Research 展示了如何用 Spark 对微服务性能进行分析和统计,由 OneAPM 工程师编译整理。作为一种灵活性极强的构架风格,时下微服务在各种开发项目中日益普及。在这种架构中,应用程序被按照功能分解成一...

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

    在本文,IBM Research 展示了如何用 Spark 对微服务性能进行分析和统计,由 Cloudinsight 工程师编译整理。引言作为一种灵活性极强的构架风格,时下微服务在各种开发项目中日益普及。在这种架构中,应用程序被按照...

  • [Spark]二Spark性能调优|Spark任务监控|程序调优|资源调优

    SparkUI使用在运行Spark应用程序时,默认会在Driver节点的4040端口启动WebUI服务,通过此WebUI可对Spark的应用程序的Job划分、Stage划分、Task执行缓存的使用等各个方面进行了监控。在执行Shuffle操作时,Map端使用...

  • 使用 OpenCV、Kafka 和 Spark 技术进行视频流分析

    本文中的示例应用使用开源的技术来构建这样的系统,这些技术包括 OpenCV、Kafka 和 Spark。另外,还可以使用 Amazon S3 或 HDFS 进行存储; 该系统包含了三个主要的组件:视频流收集器(Video Stream...

  • 【微服务】springboot整合kafka-stream使用详解

    kafka stream使用详解

  • 微服务架构下服务注册与发现与治理机制

    实时收集服务调用日志,分析、汇总、存储和展示,方便开发和运维人员进行实时诊断; 执行服务运行时治理方案,包括限流降级、路由、统一配置等在线调整。 参考书籍、文献和资料: 【1】郑天民. 微服务设计原理与...

  • 微服务架构组件分析

    微服务架构组件 1、 如何发布和引用服务 服务描述:服务调用首先解决的问题就是服务如何对外描述。 常用的服务描述方式包括 RESTful API、XML 配置以及 IDL 文件三种。 RESTful API 主要被用作 HTTP 或者 HTTPS 协议...

  • Spark on Kubernetes 与 Spark on Yarn 不完全对比分析

    它擅长于批处理和实时流处理,并支持机器学习、人工智能、自然语言处理和数据分析应用。随着 Spark 越来越受欢迎,使用量越来越大,狭义上的 Hadoop (MR) 技术栈正在收缩。另外,普遍的观点和实践经验证明,除了...

  • 重新定义分析 - EventBridge 实时事件分析平台发布

    EventBridge 实时事件分析平台依托基于事件的实时处理引擎,提供数值检索、可视化分析、多组态分析、事件轨迹、事件溯源和 Schema 管理等能力。EventBridge 实时事件分析平台具有无入侵、无需数据上报,低成本,操作...

  • 流式数据处理中的微服务架构:使用Kubernetes和ApacheFlink

    作者:禅与计算机程序设计艺术 随着业务数据的海量增长、各种新型设备、软件和互联网应用...如何在大数据平台上部署分布式、弹性的微服务架构,成为关键。本文将介绍基于Kubernetes和Apache Flink的微服务架构。 Apa

  • 微服务必备的调用链分析,2w字长文解析技术细节!

    很多同学表示,对于微服务中常用的调用链功能的原理,感觉很模糊。本文将真正的从零开始,介绍调用链客户端开发的一些要点。让你瞬间拥有APM开发经验。随着微服务架构的流行,一次请求往往需要涉及...

  • Netflix云原生微服务设计分析

    为了控制它的级联故障,每个微服务都使用Hystrix进行熔断,由Hystrix将其与调用进程隔离。调用结果可以缓存在本地内存中,以保证那些关键的低延迟请求。 微服务可以保存获取的数据。 微服务可以将用于跟踪用户活动或...

  • 微服务划分及部分解读

    与传统的单体式架构不同,微服务架构提倡将一个单一的应用程序拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间使用轻量级通信机制通常是 HTTP RESTFUL API)进行通讯。通常情况下,这些小型...

  • 远程debug流程,方便debug

    远程debug流程,方便debug

  • 基于麻雀生物特性的搜索算法(SSA)的Matlab实现:原理、代码与实战应用,基于圈养麻雀特性的搜索算法(SSA)matlab实现:原理、代码与警觉机制解析,麻雀搜索算法(SSA)的matlab实现

    基于麻雀生物特性的搜索算法(SSA)的Matlab实现:原理、代码与实战应用,基于圈养麻雀特性的搜索算法(SSA)matlab实现:原理、代码与警觉机制解析,麻雀搜索算法(SSA)的matlab实现 原创代码,注释清晰,可直接运行 研究表明,圈养的麻雀存在两种不同类型:发现者和加入者。 发现者在种群中负责寻找食物并为整个麻雀种群提供觅食区域和方向,而加入者则是利用发现者来获取食物。 在生活中我们仔细观察会发现,当群体中有麻雀发现周围有捕食者时,此时群体中一个或多个个体会发出啁啾声,一旦发出这样的声音整个种群就会立即躲避危险,进而飞到其它的安全区域进行觅食。 这样的麻雀被称为警觉者。 麻雀搜索算法就是利用麻雀的这种生物特性进行迭代寻优的优化算法。 本资源包含以下三部分内容: 1.麻雀搜索算法的基本原理(两篇参考文献),非常适合用来学习。 2.麻雀搜索算法的matlab代码,注释详细,结构清晰。 3.五个群智能优化算法常用的测试函数。 ,麻雀搜索算法(SSA); MATLAB实现; 原创代码; 注释清晰; 可直接运行; 生物特性迭代寻优; 发现者与加入者; 警觉者; 参考两篇文献。

  • 基于java的五子棋游戏设计源码+论文

    基于java的五子棋游戏设计源码+论文

  • deepseek-r1使用指南

    deepseek-r1使用指南

  • DeepSeek+DeepResearch-让科研像聊天一样简单

    DeepSeek+DeepResearch——让科研像聊天一样简单 (1)DeepSeek如何做数据分析? (2)DeepSeek如何分析文件内容? (3)DeepSeek如何进行数据挖掘? (4)DeepSeek如何进行科学研究? (5)DeepSeek如何写综述? (6)DeepSeek如何进行数据可视化? (7)DeepSeek如何写作润色? (8)DeepSeek如何中英文互译? (9)DeepSeek如何做降重? (10)DeepSeek论文参考文献指令 (11)DeepSeek基础知识。

  • 基于dlib及opencv的人脸识别.zip

    项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用

Global site tag (gtag.js) - Google Analytics