当前位置:网站首页>APM(应用性能监控) 行业认知系列 - 一
APM(应用性能监控) 行业认知系列 - 一
2022-04-21 20:37:00 【东风微鸣】
背景
我在 2017 年学习 APM 行业相关知识并获取相关认证时总结的笔记(知识是16-17年的知识)。今天偶然翻到了,看了一下仍然有一定意义,所以重新整理发出。总共会有 十七 部分。
大纲如下:
- 从 APM 到 DPM ( 一 -> 四)
- APM/DPM 市场 (五 -> 六)
- 监控, DevOps和性能 (七 -> 十一)
- 用户体验 (十二 -> 十三)
- APM/DPM 的需求(十四 -> 十七)
一《影响应用性能的主要因素》
影响应用性能的因素有两大类:environment 和 app 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设计: 安全
版权声明
本文为[东风微鸣]所创,转载请带上原文链接,感谢
https://cloud.tencent.com/developer/article/1985579
边栏推荐
- Go语言自学系列 | golang init函数
- 神经网络 || 注意力机制的Pytorch代码实现
- warning: LF will be replaced by CRLF in composer.json.
- 《动手学机器人学》7.3.2动手学坐标变换 齐次矩阵生成(四元数+欧拉角)齐次坐标运算
- 上午面了个腾讯拿 38K 出来的,让我见识到了基础的天花板
- La différence et la relation entre glew, Glee et GL Glu glut glx glext
- < 2021SC@SDUSC > Application and practice of software engineering in Shandong University jpress code analysis (I)
- [daily leetcoding challenge14] a group of K flip linked lists
- Debugging MS source code
- Employment of college students in the "most difficult employment season": more than half of the graduates have landed, and higher vocational colleges produce sweet pastries
猜你喜欢

外包干了五年,差不多是个废人了

<2021SC@SDUSC>山东大学软件工程应用与实践JPress小组课题介绍

《动手学机器人学》7.3.2动手学坐标变换 齐次矩阵生成(四元数+欧拉角)齐次坐标运算
Practice of spark SQL in snowball

After three years of graduation, he achieved nothing and was forced to go back to his hometown. He made a decision to change his life.

分布式秒杀系统构建

Jmeter如何设置参数化

Tracup|使用项目管理独一无二的六大好处

《ROS2机器人建模URDF》8.2RVIZ2可视化移动机器人模型

实战 | JMeter 典型电商场景(下单/支付)的性能压测
随机推荐
MySQL集群解决方案
Mysql刷题题解_多表联查_浙江大学的用户在不同难度题目下答题的正确率情况,请取出相应数据,并按照准确率升序输出。
Android Development Internship interview questions, Android development interview basis
Pytorch中的nn.AdaptiveAvgPool2d(output_size)简单介绍
【合泰ht32与stm32进行串口通信点灯】
RHCSA(第五天)
Circular linked list of single and double linked lists (XV)
Oracle data import notes
分布式秒杀系统构建
谷歌手机Nexus和Pixel系列研发代号
In depth analysis of TCP three handshakes, the interviewer applauded
他98年的,我玩不过他...
Man machine verification reCAPTCHA V3 complete instructions
CUDA02 - 访存优化和Unified Memory
实战 | 基于JMeter 完成典型电商场景(首页浏览)的性能压测
C语言:简单的利润与奖金
shell:变量
Map&Set
微信服务端配置
glew, glee與 gl glu glut glx glext的區別和關系