Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用Apache Spark的微服务的实时性能分析和分析

使用Apache Spark的微服务的实时性能分析和分析

作者头像
花落花飞去
发布于 2018-06-27 07:47:12
发布于 2018-06-27 07:47:12
1.9K0
举报
文章被收录于专栏:人工智能人工智能

使用Apache Spark的微服务的实时性能分析和分析

作为一种架构风格,微服务因其极高的灵活性,越来越受欢迎。应用程序在功能上分解为一组松散耦合的协作服务,通过定义良好的(REST)API进行交互。通过采用这些设计原则,开发团队可以以极其快节奏的方式独立开发独立的微服务。已知使用这种开发模式的组织将其部署从每天 50到300次更新......。

采用微服务的最大挑战之一是,虽然我们获得了单个微服务的敏捷性,但获得对系统整个运行(包括数十个交互微服务)的洞察变得更加困难。如图1所示,多个联网服务联合工作以生成对用户请求的响应; 应用程序执行的端到端视图对于快速诊断和解决生产部署中的性能下降问题至关重要。在具有数十个微服务(每个数百个实例)的应用程序中,越来越难以理解信息如何流经各种服务,其中阻塞点是什么以及用户所经历的延迟是网络的人工产物还是呼叫链中的微服务。

图1.应用程序是一个松散耦合的微服务集合,它独立于其他服务而发展。
图1.应用程序是一个松散耦合的微服务集合,它独立于其他服务而发展。

鉴于对在云环境中运行的基于微服务的应用程序的性能分析工具的需求不断增加,我们正在尝试将实时性能分析器烘焙到平台基板本身的想法,类似于自动缩放,负载平衡等等。该服务通过捕获和分析应用程序中的微服务之间的网络通信以非侵入性方式工作。在云规模运营中,服务的分析方面需要实时处理来自租户应用程序的大量通信跟踪,发现应用拓扑,跟踪在网络上的微服务流动中的各个请求等等。由于我们需要运行批处理和实时分析应用程序,因此我们决定使用Apache Spark作为我们的大数据分析平台。

图2.使用Spark的简化性能分析系统
图2.使用Spark的简化性能分析系统

图2展示了一个简单的实验,我们通过这个实验来了解如何利用Spark进行运营分析。我们的设置包括一个Openstack云,一组基于微服务的应用程序,在不同的租户网络中运行,以及一个小的Spark群集。在每台Nova计算主机上安装软件网络抽头以捕获在租户网络内传输的网络数据包。从租户网络捕获的有线数据被压入Kafka总线。我们在Spark应用程序中编写连接器,将数据包从Kafka中提取出来并实时分析。

我们编写了Spark应用程序来尝试回答以下问题:

  1. 在生成针对特定最终用户请求的响应时,信息如何跨服务流动?在IT运营分析领域,这种特定类型的分析操作通常被称为“事务跟踪”。
  2. 给定一个时间窗口,应用程序中各种微服务之间的调用者/被调用者关系是什么?
  3. 给定一个时间窗口,应用程序中各种微服务的响应时间是多少?

我们开发了两个Spark应用程序来回答这些问题:近乎实时的事务跟踪应用程序和批量分析应用程序,以生成应用程序的通信图和延迟统计数据。前者是在Spark的流式抽象之上构建的,而后者是由Spark作业服务器管理的一组批处理作业

跟踪跨微服务的事务(或请求流)需要在应用程序中的微服务之间建立请求 - 响应对之间的因果关系。为了完全不知道应用程序,我们决定将该应用程序视为黑盒子。我们假设应用程序没有使用任何全球唯一的请求标识符来跟踪跨各种微服务的用户请求,我们设计了我们的系统。

为了追踪因果关系,我们对Aguilera等人在他们的2003年SOSP论文中对一个分布式黑匣子系统进行性能分析所采取的方法稍作了修改。对于同步Web服务,本文提出了一种嵌套算法,它将分布式应用程序表示为节点(服务)的图形,边表示节点之间的交互。嵌套算法检查服务之间的调用时间戳以推断因果关系。简而言之,如果服务A呼叫服务B,并且服务B在向A返回响应之前与服务C对话,则称对C的呼叫B _由_A到B的呼叫。通过分析一大组消息,我们可以通过统计置信度量度来导出跨服务的呼叫链,并消除不太可能的替代方案。本文中发布的原始算法旨在在大型跟踪集上以离线方式运行。我们修改算法以在分组流的移动窗口上进行操作,随着时间的推移渐进式地改进拓扑推断。

图3显示了事务跟踪应用程序中部分作业的工作流程。图4显示了由Spark应用程序推导出的租户应用程序中的事务跟踪。分组流以块的形式到达,以PCAP格式封装。从数据包流中提取各个流并将其分组为滑动窗口,即DStream。在给定的时间窗口内,通过比较标准五元组(src ip,src port,dest ip,dest port,协议),提取HTTP请求和相应的响应,形成下一个DStream,然后将其发送到其余的处理链实现嵌套算法(未在图中显示)。我们将事务跟踪应用程序的输出存储到时间序列数据存储(InfluxDB)中。

图3.实时事务跟踪应用程序中的处理阶段子集
图3.实时事务跟踪应用程序中的处理阶段子集
图4.事务跟踪应用程序发现的跨微服务的事务跟踪的单个实例
图4.事务跟踪应用程序发现的跨微服务的事务跟踪的单个实例

第二个Spark应用程序是一个标准批量分析应用程序,用于在给定时间窗口内生成服务调用图以及调用延迟统计信息。该应用程序作为标准批处理作业提交给Spark作业服务器。如图5所示,批量分析应用程序将单个事务跟踪从InfluxDB中提取出来,并将它们转换为每个事务跟踪的成对列表。然后将这些列表聚合以形成两个RDD,一个包含顶点列表,另一个包含边缘列表。顶点列表根据顶点名称进一步去重。最后,应用程序的调用图以有向图的形式计算,以及有关图中每个边上的延迟的统计信息。此图是应用程序的时间演变图的一个实例,代表特定时间段的状态。图6和图7显示了批量分析作业输出的租户应用程序的调用图和延迟统计信息。

图5.批量分析应用程序中的处理阶段
图5.批量分析应用程序中的处理阶段
图6.批量分析应用程序发现的调用图
图6.批量分析应用程序发现的调用图
图7.由批量分析应用程序计算的平均服务间调用延迟
图7.由批量分析应用程序计算的平均服务间调用延迟

Spark平台使我们能够使用统一的大数据平台构建不同类型的分析应用程序,如批处理,流式处理和图形处理。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微服务概念快速了解
近几年来,“微服务体系结构”这个术语出现了,它描述了将软件应用程序设计为可独立部署的服务套件的特定方式。尽管这种架构风格没有确切的定义,但围绕业务能力,自动化部署,智能终端以及数据的分散控制等方面存在着某些共同特征。
jack.yang
2025/04/05
970
微服务概念快速了解
使用Spark进行微服务的实时性能分析
作为一种灵活性极强的构架风格,时下微服务在各种开发项目中日益普及。在这种架构中,应用程序被按照功能分解成一组松耦合的服务,它们通过REST APIs相互协作。通过这个设计原则,开发团队可以快速地不断迭代各个独立的微服务。同时,基于这些特性,很多机构可以数倍地提升自己的部署能力。 然而凡事都有两面性,当开发者从微服务架构获得敏捷时,观测整个系统的运行情况成为最大的痛点。如图1所示,多个服务工作联合对用户请求产生响应;在生产环境中,应用程序执行过程中端到端的视图对快速诊断并解决性能退化问题至关重要的,而应用中多
CSDN技术头条
2018/02/11
1.2K0
使用Spark进行微服务的实时性能分析
Uber 大规模运行 Apache Pinot实践
Pinot 是一个实时分布式的 OLAP 数据存储和分析系统。使用它实现低延迟可伸缩的实时分析。Pinot 从脱机数据源(包括 Hadoop 和各类文件)和在线数据源(如 Kafka)中获取数据进行分析。Pinot 被设计成可进行水平扩展。Pinot 特别适合这样的数据分析场景:查询具有大量维度和指标的时间序列数据、分析模型固定、数据只追加以及低延迟,以及分析结果可查询。本文介绍了 Pinot 在 Uber 的应用情况。
深度学习与Python
2020/11/06
9810
Uber 大规模运行 Apache Pinot实践
ACM SIGCOMM 2023 | 使用 DeepFlow 以网络为中心的分布式跟踪:以零代码排除微服务故障
本文提出了 DeepFlow,一种以网络为中心的分布式跟踪框架,用于排除微服务故障。DeepFlow 通过以网络为中心的跟踪平面和隐式上下文传播提供开箱即用的跟踪。此外,它消除了网络基础设施中的盲点,以低成本的方式捕获网络指标,并增强了不同组件和层之间的关联性。DeepFlow 能够节省用户数小时的仪器工作,并将故障排除时间从几个小时缩短到几分钟。
用户1324186
2023/12/12
7430
ACM SIGCOMM 2023 | 使用 DeepFlow 以网络为中心的分布式跟踪:以零代码排除微服务故障
从单体迁移到微服务的几种模式
正确实现的微服务较单体应用有很多优势。许多组织都希望将他们的单体应用程序代码换成微服务代码。但事实证明,迁移到微服务并非易事。你应该问的第一个问题是,你真的需要微服务吗?单体存在的许多问题都可以使用模块化的单体架构轻松解决。一旦你确定自己真的需要微服务,就必须制定一套将单体应用转换为微服务的计划。本文介绍了一些模式,可以帮助你创建所需的计划。
用户2781897
2021/08/06
6900
从单体迁移到微服务的几种模式
适合小白入门Spark的全面教程
1.实时分析 在我们开始之前,让我们来看看美国社交媒体比较有名的企业每分钟产生的数据量。
用户1410343
2018/08/16
6.6K0
适合小白入门Spark的全面教程
【译】怎样监控与可视化微服务架构
构建和部署分布式应用程序后,监视和可视化它至关重要,以确保软件的可靠性,可用性和预期的性能。这并不容易。
极客人
2018/08/30
2.1K0
【译】怎样监控与可视化微服务架构
48 张图 | 手摸手教你微服务的性能监控、压测和调优
打开批处理文件:\apache-jmeter-5.3\bin\jmeter.bat
悟空聊架构
2021/03/17
2.9K0
48 张图 | 手摸手教你微服务的性能监控、压测和调优
Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN
片刻
2018/01/05
2.3K0
Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN
深度好文:Netflix奈飞微服务架构设计解析
数年来,Netflix 一直是全球体验最好的在线订阅制视频流媒体服务,其流量占全球互联网带宽容量的 15%以上。 在过去的2019 年,Netflix 已经有 1.67 亿名订阅用户,平均每个季度新增 500 万订户,服务覆盖全球 200 多个国家 / 地区。
架构师修炼
2020/08/27
2K0
深度好文:Netflix奈飞微服务架构设计解析
Istio如何同时实现Hytrix|Ribbon|Zuul|微服务安全的功能?:为微服务引入Istio服务网格(下)
版权说明:本文由高晓雪参照如下文档翻译。魏新宇根据高晓雪的翻译文档,做了适当的注解和文字矫正。 https://developers.redhat.com/download-manager/file/istio_mesh_for_microservices_r1.pdf 本文适合对istio的读者提供泛读参考,对istio理解较深的读者,建议直接阅读英文原文。本系列分上下两篇:上篇为1-3章内容,下篇为4-7章内容。 目录 为微服务引入Istio服务网格 1.介绍 1.1.更快的挑战 1.2.认识I
魏新宇
2018/06/25
2.3K0
跟着小程来学微服务--微服务思想
一直对微服务非常感兴趣,因为公司的架构改造正好有机会能够接触微服务,买来一些书,请教了很多微服务大牛同时自己也做了很多总结,写成了80页ppt,算是我对微服务的一个认识吧,微服务本身不同的人有不同的理解,而我就从我自己的角度来谈谈微服务是什么。
小程故事多
2018/08/22
4400
跟着小程来学微服务--微服务思想
微服务性能分析|Pyroscope 在 Rainbond 上的实践分享
随着微服务体系在生产环境落地,也会伴随着一些问题出现,比如流量过大造成某个微服务应用程序的性能瓶颈、CPU利用率高、或内存泄漏等问题。要找到问题的根本原因,我们通常都会通过日志、进程再结合代码去判断根本原因。对于微服务庞大的业务,这必定会很耗时,而且也很难及时找到关键问题点。
Rainbond开源
2022/08/16
7430
微服务性能分析|Pyroscope 在 Rainbond 上的实践分享
大数据入门:Spark Streaming实际应用
作为Spark负责流计算的核心组件,Spark Streaming是整个Spark学习流程当中非常重要的一块。对于Spark Streaming,作为Spark流计算的实际承载组件,我们也需要更全面的掌握。今天的大数据入门分享,我们就来讲讲Spark Streaming实际应用。
成都加米谷大数据
2020/11/30
7010
大数据入门:Spark Streaming实际应用
Spark UI 之 Streaming 标签页
这篇博文将重点介绍为理解 Spark Streaming 应用程序而引入的新的可视化功能。我们已经更新了 Spark UI 中的 Streaming 标签页来显示以下信息:
smartsi
2019/08/07
9630
BigData |述说Apache Spark
Spark是一个Apache项目,被标榜为"Lightning-Fast"的大数据处理工具,它的开源社区也是非常活跃,与Hadoop相比,其在内存中运行的速度可以提升100倍。Apache Spark在Java、Scale、Python和R语言中提供了高级API,还支持一组丰富的高级工具,如Spark SQL(结构化数据处理)、MLlib(机器学习)、GraphX(图计算)、SparkR(统计分析)以及Spark Streaming(处理实时数据)。
Sam Gor
2019/08/21
7550
微服务和分布式的区别
​分布式架构是​分布式计算技术的应用和工具,目前成熟的技术包括J2EE, CORBA和.NET(DCOM),这些技术牵扯的内容非常广,相关的书籍也非常多,也没有涉及这些技术的细节,只是从各种分布式系统平台产生的背景和在软件开发中应用的情况来探讨它们的主要异同。
张哥编程
2024/12/19
2340
微服务和分布式的区别
Structured Streaming | Apache Spark中处理实时数据的声明式API
随着实时数据的日渐普及,企业需要流式计算系统满足可扩展、易用以及易整合进业务系统。Structured Streaming是一个高度抽象的API基于Spark Streaming的经验。Structured Streaming在两点上不同于其他的Streaming API比如Google DataFlow。 第一,不同于要求用户构造物理执行计划的API,Structured Streaming是一个基于静态关系查询(使用SQL或DataFrames表示)的完全自动递增的声明性API。 第二,Structured Streaming旨在支持端到端实时的应用,将流处理与批处理以及交互式分析结合起来。 我们发现,在实践中这种结合通常是关键的挑战。Structured Streaming的性能是Apache Flink的2倍,是Apacha Kafka 的90倍,这源于它使用的是Spark SQL的代码生成引擎。它也提供了丰富的操作特性,如回滚、代码更新、混合流\批处理执行。 我们通过实际数据库上百个生产部署的案例来描述系统的设计和使用,其中最大的每个月处理超过1PB的数据。
王知无-import_bigdata
2020/01/14
2.1K0
Structured Streaming | Apache Spark中处理实时数据的声明式API
微服务架构云端应用
微服务架构(Microservices Architecture)是一种架构风格和设计模式,提供将应用分割成一系列细小的服务,每个服务专注于单一业务功能,运行于独立的进程中,服务之间边界清晰,采用轻量级通信机制相互沟通、配合来实现完整的应用,满足业务和用户的需求。(引用自http://www.csdn.net/article/2015-07-20/2825258) 微服务的优点: 可独立部署、升级、替换、伸缩 自由选择开发语言 高效利用资源 故障隔离 总结下来就是:灵活、稳定、省资源。 微服务的缺点: 服
Rainbond开源
2018/05/31
1.5K0
用Spark进行实时流计算
Spark Streaming是Spark最初的流处理框架,使用了微批的形式来进行流处理。
用户6070864
2020/08/05
2.6K0
用Spark进行实时流计算
推荐阅读
相关推荐
微服务概念快速了解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档