写点什么

APM(应用性能监控) 行业认知系列 - 一

用户头像
东风微鸣
关注
发布于: 2021 年 02 月 20 日
APM(应用性能监控) 行业认知系列 - 一

背景



我在 2017 年学习 APM 行业相关知识并获取相关认证时总结的笔记(知识是 16-17 年的知识)。今天偶然翻到了,看了一下仍然有一定意义,所以重新整理发出。总共会有 十七 部分。


从 APM 到 DPM ( 一 -> 四)

APM/DPM 市场 (五 -> 六)

监控, DevOps 和性能 (七 -> 十一)

用户体验 (十二 -> 十三)


一《影响应用性能的主要因素》


影响应用性能的因素有两大类:environmentapp itself


应用程序性能中的问题最常见于应用程序代码基础架构服务。对于新的微服务应用架构(横跨本地和云端), 通过 APIs 连接后端, 影响应用性能的首要因素很明显就是 the end to end picture of your application - 从用户体验, 应用性能, 甚至 mainframe 直到云服务.  有能力简化和精简端到端的应用视图, 让你在用户受影响之前直接看到你需要看的 pinpoint 瓶颈.


1.1 应用必须面临的复杂环境

1.1.1 基础设施的复杂性

影响应用程序性能的最重要因素是支持应用程序的基础架构和服务的复杂性。这些组件和服务现在可以跨越多个位置 - 云,本地数据中心,混合。


在代码错误之外,性能问题始终源自应用程序与外部系统接口这一点。容器,虚拟机,存储或网络.


数字服务现在必须在非常复杂的基础设施中进行大规模和高速度的转变,这些基础设施可以包括混合云和软件定义的网络。因此,应用程序服务交付可能会在从前台到后台服务器路径上的任何地方遇到问题.


1.1.2 云

影响应用程序性能的最大因素之一是决定在中托管应用程序。

  • 第一个,也是经常被忽视的中断问题是, IT 是否首先意识到服务已经迁移到云端

  • 第二个挑战是性能管理. 90%的人认为云的资源缺乏可视性和控制权是他们面临的最大挑战。

IT 部门需要更广泛地关注, 无缝地确保用户体验和管理通过内部部署资源与公共云的应用程序性能.


影响现代数字时代应用性能的主要因素云中的应用和基础设施。这产生了大量的依赖.

现代应用和基础设施栈,由弹性架构,微服务和面向服务架构组成, 挑战我们认为我们所知道的保证应用程序性能的一切。


1.1.3 第三方服务

第三方元素的影响会影响应用程序的性能. 对于企业网站来说,这个问题特别繁重,每个页面都可能有几十个标签,小部件,广告,插件和其他第三方组件. 其中任何一个都可以减缓整个网站

除了网站之外,第三方元素可能会影响移动应用,SaaS 应用和任何其他现代应用。


应用程序越来越多地依赖于通常对应用程序所有者几乎无法控制第三方服务。由于基于微服务的应用架构变得更加常见, 应用程序的依赖性变得更加分散和动态。如果车轮上的单个齿轮失效,整个系统可能停止工作,导致减速(性能下降),用户体验受挫和收入损失


影响这些应用程序性能的主要因素之一是他们必须连接的大量第三方。事实上,第三方组件占应用程序体验的 2/3. 随着第三方增加, 复杂性和错误风险增加,可用性差响应时间慢


例子包括越来越多的专业工具 - 营销分析,社交媒体插件和电子商务店铺等等。在实施之前和期间,组织必须能够辨别第三方服务整体性能影响.

您可以重新思考最新所谓的“必须”的消费者功能,是否它最终会减慢您的网站的速度,并驱使用户离开.

此外,必须制定应急计划,以消除并可能取代任何可能行为不端的服务。


1.1.4 移动端

最近的 Google 研究报告中的数据讲述了这样一个故事:互联网上的所有网页浏览量的一半以上都是在移动设备上进行的,但是通过 3G 的页面平均加载时间是 19 秒。所有服务器请求中几乎有一半来自第三方呼叫,例如广告,衡量和管理这些调用的性能至关重要。

比较更快的网站(5s 内加载)与较慢的网站(19s),更快的网站的平均会话长度长了 70%,跳出率降低了 35%,前者几乎是后者收入的两倍。


1.1.5 相互依赖

今天的应用和服务包括来自多个供应商(Web 和应用程序服务器,多层中间件,数据库,大型数据存储,缓存层,云端和其他服务)的各种组件,这些组建需要以预期的方式运行,以提供很好的终端用户体验。这种应用程序及其支持组件的复杂性的增加也增加了应用程序失败的机会。IT 运营团队和开发人员需要专注于对应用程序的性能进行全面的了解,而不仅仅是单个组件的性能。他们还需要了解动态环境中应用程序组件之间的相互依赖关系,以确保应用程序的高可用性和最佳性能。


分布式应用程序架构的复杂性使得确定性能问题成为挑战。应用程序依赖于大量与基础设施资源的不希望的依赖关系和交互。微服务,容器,云基础设施...甚至是次要的防火墙更新可以降低整个应用程序。今天许多应用程序都是其他应用程序的混搭,所有这些应用程序必须彼此交互才能使服务正常执行。我曾说过一个零售网站由 80 个不同的应用程序组成, 为客户提供单一体验!如果混搭的任何部分失败,集体在线体验失败。这就是为什么应用程序发现和依赖关系映射(特别是异构环境), 以及对 fulll-stack 基础设施监控的需求是至关重要的。IT 基础设施变得越来越脆弱,每次都不会有同样的失败.


1.2 环境的更多挑战, 包括容器, 微服务和网络问题

1.2.1 虚拟化和容器化

今天的应用程序分解成可以部署在高度虚拟化或容器化上的多个组件。因此,不同组件之间交互的流程的可视化,对于 IT 运维为应用程序提供最佳的用户体验是至关重要的。


在过去十年中,我们已经看到了云的商品化,并且在虚拟化硬件上运行应用程序的趋势继续发展到更高级别的模块化和分区化:容器,微服务,软件定义的网络,虚拟存储,和更多。小的,容器化的,独立的组件,并且可作为可回收的多用途构建块是趋势。所有这些都可能使复杂系统的开发和操作更快更便宜,但在 APM,调优,监控,日志记录,调试等方面,复杂性会增加。相应的工具需要能够查看和分析所有物理和虚拟组件以及它们的交互方式,并允许开发人员和操作团队了解所有这些数据点


1.2.2 微服务

在具有成千上万的相互依赖的服务的应用环境中隔离任何应用程序性能问题,如果没有实时监测和监控,可能是具有挑战性的。手动检测这些微服务器并设置静态阈值不是不可能, 但是一项非常困难的任务。企业需要自动发现这些大量的微服务,并在性能偏离正常基线时,动态地对其性能进行基准,收集深度诊断和警报。

Anand Akela AppDynamics 产品营销总监


现代应用越来越依赖于无状态微服务,通常与有状态数据服务(如 NoSQL,Kafka,Hadoop 等)配合使用,并且部署在容器上或利用 serverless 架构。随着应用基质的变化,影响这些应用性能的因素也在变化。这些因素包括各种微服务如何相互交互,其可用性以及这些服务之间的错误,延迟和吞吐量等相关问题。单个服务本身表现并不重要。另外,像 Mesos,Kubernetes 和 Docker Swarm 这样的编排系统也变得越来越重要,应用程序性能将越来越依赖于这些业务流程系统如何有效地管理资源,无论是应用还是基础设施。


1.2.3 服务设计

我所看到的最大的影响就是忽略了以用户为中心的设计原则。经验告诉我们,传统的客户端/服务器应用程序将无法与当今的现代应用程序一起使用。来自用户位置/体验的服务设计不当是灾难的源头。


1.2.4 SERVER SIDE CODE 服务端代码

虽然用户对低应用程序的容忍程度较低,但性能不佳的主要原因仍然是服务器端代码效率低下。随着组件越来越互联,确定缓慢或故障的原因继续需要更长时间,从而形成对端到端 APM 的需求。


1.2.5 网络延迟

延迟是影响应用程序性能的首要因素。如果用户和服务器之间的延迟较高,最成熟的应用程序都将非常慢。最烂的应用程序都可以在一切都是本地的时候获得各种赞誉。我认为低延迟是 IT 经理在其网络上可以拥有的最重要的资产。您应该专注于减少端到端延迟的任何方式。这包括减少对于延迟的各种贡献,例如处理延迟,队列延迟,序列化延迟,以及最后但绝对不是最不重要的, 传播延迟


应用程序页面加载时间的百分之七十五来自网络的延迟


1.2.6 加载

基于业务环境的变化,应用程序可能会变得过载。更多的工作,负载或用户可能会对性能产生负面影响。


1.2.7 资源可用性

应用程序性能受资源可用性的影响最大


1.2.8 缓存瓶颈

无法尽可能地使用缓存, 直接导致需要更多的主机实例, 意味着要在云上花更多的钱. 坚实的 APM 技术可以快速,自动地识别任何层级的应用程序基准性能的偏离,从根本上保护用户体验品牌声誉和数字信任。在没有 APM 工具查看瓶颈的情况下,在云端托管应用程序是扔钱


1.3 应用程序 前后端交互

1.3.1 数据库

根据 Gleanster Research 的数据,近 90%的应用性能问题数据库层有关。这是由于许多情况下 - 数据库是大多数应用程序的核心; 他们很复杂 他们很难水平地缩放; 最后但并非最不重要的是,大多数操作团队对其中的内容几乎没有可见性。


虽然应用程序的前端和后端通过应用程序类型差别很大,但几乎所有的共同点都是它们对事务数据库的依赖.最强大的应用团队使用一个 APM 工具,可以在一个统一的视图中提供此上下文信息。


1.3.2 数据

要密切关注层之间移动的数据量。


1.3.3 后端调用

根据我的经验,影响应用程序性能的第一个因素是应用程序所做的后端调用. 无论是数据库调用还是 HTTP 调用(例如 SOAP,REST)或任何其他许多类型的后端调用,性能差的后端都可能在很大程度上降低应用程序性能. 适当的监测对于诊断这种类型的问题至关重要,因为它可能不是很明显的。


Plumbr 最近发布了其影响应用性能的顶级因素的定量研究结果。这项研究是基于在 Java 虚拟机上运行的一千多个真实生产应用程序的用户体验数据。我们发现外部 Web 服务的调用阻塞,锁争用问题和缓慢的数据库调用是前三大罪魁祸首。


1.3.4 后端修改(BACKEND MODIFICATIONS)

根据最近的 EMA 调查,IT 专业人士将“交易的快速增长加大了后端容量的负担”作为首要的应用程序支持挑战。由于受到用户数量的影响,轻微的后端修改可能对最终用户的交易应用经验产生重大的积极或同等的负面影响。组织需要统一的 DevOps,以确保潜在的变更不会产生意想不到的后果。


1.3.5 社会媒体和市场营销

你有没有想过为什么当你想检查你最喜欢的网站上的当地天气,它需要超过 6-8 秒的阈值来完全渲染,但在你看来, 这更像是 30-50 秒?


1.3.6 设备健康

广泛的终端用户设备的性能和健康. 因此,影响应用程序性能的主要因素之一是用于访问的广泛的最终用户设备的性能和运行状况


1.4 应用程序本身

1.4.1 复杂性

影响应用性能的首要因素是应用程序的复杂性。现代应用程序是 spidery,有千个可能的优化点。处理的复杂程度很大。提前预测性能, 并且了解软件更改的含义变得非常困难。公司需要从实际测试场景中获得真实数据,并需要测量影响用户体验的真正的端到端关键性能指标(KPI)。


1.4.2 APP 设计

影响应用程序性能的最重要因素是应用程序本身的体系结构。通常,当应用程序被移动或迁移到另一个环境时,您会看到这一点。例如,“聊天”应用程序的影响可以在高速本地 LAN 上被隐藏或减轻,但一旦移动到云端,较慢的电信速度会以高延迟的形式暴露出这种设计缺陷。


应用程序设计/架构/复杂性是影响应用程序性能的首要因素。即使做大量额外的工作,减轻设计带来的后果也可能相当困难。设计不善的应用程序即使在相对较低的流量也导致性能不佳。


1.4.3 APP 设计: 新功能

表现良好的应用程序必须有效地建立和仔细测试。因此,对应用程序性能的最大影响是新功能。随着开发人员引入新的代码,整体性能受到影响。由于计划压力,通常没有时间来优化性能。平衡上市时间和应用程序绩效的要求是开发,运营和执行团队的所有成员的要求。


1.4.4 APP 设计: 延迟

忽略应用程序设计中的延迟:需要通过网络与其他组件进行重要通信或同步的 Chatty 应用程序需要考虑 WAN 延迟


1.4.5 APP 设计: IO PATH

影响分布式/集群应用程序性能的主要因素是无法确保整个应用程序从计算到存储 d IO 路径 - 从而导致不可预测的性能,并且无法保证 SLA。


1.4.6 APP 设计: BUGS

有许多不同类型的软件错误,所有这些都可能影响软件性能。


1.4.7 APP 设计: 安全


用户头像

东风微鸣

关注

资源共享, 天下为公! 2018.11.08 加入

APM行业认证专家, 容器技术认证专家. 现任中国大地保险PAAS平台架构师. 公众号:东风微鸣技术博客

评论

发布
暂无评论
APM(应用性能监控) 行业认知系列 - 一