5 个快速的 Node.js 应用性能提示-深圳SEO优化公司
公众号矩阵
移动端
开发 前端
本系列文章涵盖许多基础性内容:它给出了应用程序性能管理(APM)的总体概述;指明了实现一个 APM 策略的主要挑战;提出了衡量,评估一个企业级 Node.js 应用程序运行状况的最重要的 5 条指标;并提出了通过 AppDynamics 方式构建一个 APM 解决方案。

本系列文章涵盖许多基础性内容:它给出了应用程序性能管理(APM)的总体概述;指明了实现一个 APM 策略的主要挑战;提出了衡量,评估一个企业级 Node.js 应用程序运行状况的最重要的 5 条指标;并提出了通过 AppDynamics 方式构建一个 APM 解决方案。在文章的***部分,还提出了一些提示和技巧类以帮助您实现***的 APM 策略。具体地说,本文讨论了以下主题:

  • 业务交易优化

  • 快照调优

  • 阈值调优

  • 层级管理

  • 上下文信息捕获

1.业务交易优化

本文章系列里,我会不断重复强调的就是监控方案里的业务交易优化一环。要最有效地利用业务交易监控,您需要做到以下几项:

  • 恰当地命名业务交易以配合您的业务功能

  • 正确识别您的业务交易

  • 通过排除您并不关心的业务交易来降低噪音

AppDynamics 可以为您自动识别业务交易,并且尽可能给出***的命名。不过这样取决于您的应用是如何编写的,应用名可能可以如实反映业务交易,也可能不可以。例如,您可 能有一个业务交易叫做“POST/payment”,对应着检验流程。那么如果将其命名为“Checkout”的话,就更能如实反映业务功能,这将更利于 操作人员操作,也便与生成报表与执行人员查看。

下面,如果您有多个业务交易,却只有一个入口的话,你需要花一些时间将其分割为独立的业务单元。以下几个可能发生的例子,包含如下特点:

  •  多个 URL 都路由到相同的 MVC 控制器和动作

  • 根据有效负载的制定业务交易功能

  •  根据 GET 参数制定业务交易功能

  •  复杂的 URL 路径

如果一个入口却对应着多个业务功能,那么就需要根据不同的指标配置业务交易。例如,如果 body 里有一个”operation“元素对应着”operation“操作的话,那么就需要根据”operaiton“对交易进行分割。又如果有一 个”execute“动作接受一个”command“URL 参数,那么就需要根据”command“字段对交易进行分割。***,URL 模式可能会因应用不同而不同,所以您需要与您的应用最匹配的形式。例如,AppDynamics 会根据两段式自动为您的 URL 定义业务交易,例如 one/two。大多数 Node.js MVC 框架都会自动路由到对应的应用控制器和动作。如果您的应用使用的是一段式,或者四段式,那么您需要根据命名规则来定义业务交易。

命名和识别业务交易单元可以确保您捕捉到了正确的业务功能,但是尽可能多的减噪也同样重要。您是否有些并不关心的业务交易呢?比如,会不会有一个网 页游戏会每隔几秒就检查对高分呢?又或者如果有一个每晚都执行的 Node.js 的 CLI 作业,每次都执行很长时间,但是由于脱机运行,它并不影响终端用户,您不关心么? 如果是的话,排除这些交易,以便减少分析噪音。

2. 快照调优

正如在前面文章提到的,AppDynamics 每隔一段时间就会智能捕获性能快照,并可以逐渐缩小每次性能会话里快照的个数。由于这两个值都是可以调整的,所以有利于调优。

AppDynamics 直接捕获整个进程的调用关系图,同时去掉配置阈值以下的记录。如果你只对“大的”性能问题感兴趣,那么你可能不需要精确到 10 毫秒以下。如果你把间隔时间增加到 50 毫秒,你会丢失粒度。如果你想微调应用程序,你可能需要 10 毫秒的粒度,但是如果你不打算让方法在 50 毫秒内执行完毕,为什么需要那种级别的粒度呢?问题在于你应该分析需求然后做相应的调整。

接下来,观察你的产品故障排除模式,然后判断 AppDynamics 捕获的进程快照数在你当前状况下是否合适。如果你发现每分钟捕获 2 个快照太多了,那么你可以配置 AppDynamics 来调整快照间隔。尝试配置 AppDynamics 让其每分钟最多捕获一个快照。另外如果你只对系统性问题感兴趣,你可以把***快照数降低至 5 个。这会显著地减少持续的消耗,但代价是可能会导致捕捉不到有代表性的快照。

3. 阈值调优

AppDynamics 设计了一套通用的监控解决方案,并且对于比正常情况慢两个标准差的业务事务提供警告。这在大多数情况下是有效的,但是你需要知道你的应用程序响应时间有多不稳定,以便确定这对你的业务需求来说是否为***配置。

根据业务事务对比基准线的估算值,AppDynamics 定义了三种阈值:

  • 标准差: 比较业务事务的响应时间与基准线的几个标准差

  • 百分比: 比较业务事务的响应时间与基准线的差值百分比

  • 静态 SLA: 比较业务事务的响应时间和静态值,比如2秒

如果您的应用程序的响应时间不稳定,那么默认的两个标准差临界值可能导致太多的错误警报。在这种情况下,您可能希望增加更多的标准差或换一种方式来 处理。如果您的应用程序的响应时间比较稳定,你就会想减少你的临界值提前发出警告。此外,如果你有提供给特殊协定用户的服务或 API(应用程序接口),你应该为此业务设置一个稳定的协定值。AppDynamics(应用性能管理)会提供给你个人或企业业务定义警报规则的灵活性。

你需要分析你的应用程序的行为,并相应地配置报警引擎。

4. 分层调优

在前面我已经提到过,AppDynamics 不仅能够捕获业务事务性能的基准,同时它也能捕获一个业务事务在不同服务层上的性能基准。打个比方,如果你的业务事务调用了一个规则引擎提供的服务,那么 AppDynamics将正确捕获你的业务事务对规则引擎部分的调用数以及规则引擎的平均响应时间,并且将会把这些数据正确反映到业务事务的性能基准中。 正是因为 AppDynamics 的这个特性,因此在你的整个系统中***能够清晰定义所有的服务层,这样你可以得到一个非常清晰而且优秀的业务事务性能基准。

如果你没有明确指定系统的服务层次,那么AppDynamics将根据一定的规则(不同的协议栈)自动分析你的应用的服务层次。比如,它将自动把你 的应用分解成 HTTP 服务层,JMS 服务层,JDBC 服务层。举一个具体的例子,如果 AppDynamics 发现你的代码中有一个对 Database 的操作,那么它就会假设你的整个业务逻辑中存在一个数据库访问层,因此它就会自动计算你的业务逻辑用在数据库访问上的时间。这个对于调优你的业务逻辑是非 常重要的,因为你不希望在性能基准中只是看到一个信息说你的 ORM class 中的 save 方法执行的非常慢,相反的你希望能够看到更具体的信息,比如说 save 方法花了多少时间把数据存储到数据库中,又花了多少时间执行其他的任务。

如果在你的系统中,所有的 service 调用都使用的是通用协议栈(比如 HTTP 协议), 那么 AppDynamics 将非常***的分析出你的系统的服务层次,但是如果你的系统使用了一个非通用协议栈和后端系统进行通信,AppDynamics 就无能为力了。举例来说,目前我在一个保险公司工作,这个保险公司使用一个 AS/400 机器提供询价服务。在我们的系统中,我们使用了一个私有库来和 AS/400 通讯,这个库使用了一个私有的基于 socket 的通讯协议链接到 AS/400 上。在这种情况下,很明显 AppDynamics 不可能知道系统使用了基于 socket 的通讯协议,也不可能知道这 个socket 通讯协议是如何工作的。因此,我们需要告诉 AppDynamics 是哪个方法实现了和 AS/400 之间的通讯,并且标记这个方法为定制化的后端资源。这样一来,AppDynamics 就会将这个方法识别成一个新的服务层次,接下来 AppDynamics 就可以对这个新的服务层次进行调用计数,并计算它的平均响应时间了。

在大部分情况下,你可以使用 AppDynamics 的内置功能来分析系统的服务层次,但是如果你有特定的要求,AppDynamics 也提供了 Node.js API,让你自己定义系统的服务层次。

5. 获取上下文信息

但性能问题发生的时候,有时候问题只发生在某个浏览器或者移动设备上,有时候只发生在客户端发送了特定的请求内容。在这种情况下,由于问题并不总是能够重现,那么我们怎么来定位这些问题呢?

答案就是在创建快照的时候,同时获得上下文信息。你可以通过查看上下文信息,看来发现一些共性。需要捕获上下文信息可能有以下这些:

  • HTTP 请求头信息,比如浏览器类型(user-agent ),cookies 和 referrer

  • HTTP GET 请求发送的参数

  • 被调用方法的参数

  • 应用中定义的变量以及变量的值

我们下面就举一些例子来说明对于一个性能不好的 Node.js 事务,你将如何应用上面说的这些上下文信息来查找和发现问题。比如,如果你捕获了 User-Agent HTTP 请求头信息,那么你就可以知道用户是在哪个浏览器上执行商业事务。如果你提供的 HTTP 服务支持 GET 方法,那么你可能想通过检查Query String 里面某个或者多个变量的值来知道用户想查询什么内容。再进一步,如果你知道应用的代码是如何工作,你可能就想知道一个具体参数的值。

你可以通过配置让 AppDynamics 获取上下文信息并且加入到快照中,可以被捕获的上下文信息在上一节中已经详细介绍了。下面我们简单的介绍一下 AppDynamics 获取上下文信息的过程:

  • AppDynamics 发现了一个运行缓慢的业务事务

  • 于是 AppDynamics 开始创建一个快照

  • 在创建快照的过程中,AppDynamics 根据你配置的信息,获取相应的上下文信息并放入快照中

结果就是当你找到一个可以反映你试图解决的问题的快照的时候,你可以在 AppDynamics 为你捕获的上下文信息中查看是否有有用的信息。

当你使用上下文信息捕获功能的时候,因为 AppDynamics 使用侵入式代码来获取方法的参数值,这将造成原始代码运行效率有一些下降。因此,只在确实需要的地方使用这个功能。

结束语

应用性能管理的难处在于它需要在获取尽量少的数据的情况下,能够让开发人员分析出导致性能瓶颈的真正原因。 对于一个 APM 工具,都应该能够提供一系列的配置选项,以便开发人员可以在应用程序执行过程中,以尽量小的代价获得足够的性能分析数据。 这篇文章主要介绍了一下这些在 实现 APM 策略的时候需要思考的核心点,这些核心点包括:

  • 业务事务优化

  • 快照调优

  • 阀值调优

  • 服务层次管理

  • 获取上下文信息

实现一个 APM 系统是非常困难的,但是象 AppDynamics 这样的系统就极大的简化了 APM 的实现。通过使用 AppDynamics, 开发人员可以很方便的在应用中实现 APM,而不会对应用本身造成很大的影响( APM 代码的引入也是会造成一定的性能下降的)。

责任编辑:王雪燕 来源: oschina
相关推荐

2015-12-14 10:39:14

2019-07-09 14:50:15

Node.js前端工具

2013-08-09 14:18:33

2020-05-29 15:33:28

Node.js框架JavaScript

2015-06-25 12:41:53

实时 Node应用性能监测

2017-11-27 11:59:40

Node.JSChrome调试程序

2016-08-25 21:28:04

前端node截图

2014-08-28 09:35:32

Node.js前端开发

2021-12-01 00:05:03

Js应用Ebpf

2011-11-10 11:08:34

Node.js

2013-11-01 09:34:56

Node.js技术

2020-12-14 15:40:59

Nodefastifyjs

2020-12-28 08:48:44

JS工具fastify

2015-03-10 10:59:18

Node.js开发指南基础介绍

2022-01-07 08:00:00

Node.js开发Web

2020-07-15 08:06:04

Node.js框架开发

2020-02-25 12:27:59

Node.jsWeb开发前端

2022-12-14 14:40:27

Node.js开发应用程序

2012-09-17 11:26:14

IBMdw

2012-02-03 09:25:39

Node.js
后端
26302内容
全部话题

同话题下的热门内容

66.4K Star!别再熬夜写样式!Screenshot-to-Code:截图秒变代码!Java并发编程:深入理解Java线程状态惊艳到了,每个开发人员都必须要知道的六个HTML属性!一文搞懂HashMap如何优雅处理哈希冲突当执行kubectl exec时,你真的进入容器了吗?深度解析容器访问原理真香!全面解析 Spring Boot 插件化开发模式如何使用GitHub Actions自动化部署我们的项目Spring Boot 开发中有七件事,你必须知道

相关专题 更多

2024年第十九届中国企业年终评选榜单揭晓
2024年第十九届中国企业年终评选榜单揭晓
如何发挥数据的最大力量?
如何发挥数据的最大力量?
2024-09-11 10:06:01
戴尔与AMD携手发布新一代服务器解决方案
戴尔与AMD携手发布新一代服务器解决方案
2024-12-24 16:34:07
我收藏的内容
点赞
收藏
分享

51CTO技术栈公众号

业务
速览
在线客服
媒体
51CTO CIOAge HC3i
社区
51CTO博客 鸿蒙开发者社区 AI.x社区
教育
51CTO学堂 精培 企业培训 CTO训练营

相关内容推荐

安阳seo网络推广哪家好群力seo优化多少钱福建效果好的seo西安电脑seo排名优化seo能帮助普通人什么有什么seo技巧可以快速上排名黄浦seo优化选哪家南阳seo推广服务南沙区第三方seo优化哪家好合肥seo多少钱服务合川区中小企业seo推广效果安徽外贸seo网络营销平山一站式seo技术要多少钱济南最好的seo外包连云港搜索引擎seo江西站外seo优化内容任城seo优化排名价格山西省seo优化收费SEO案例分析报告格式深圳seo团队中国seo排行榜大会襄阳外包seo推广公司随州市seo关键词优化价格seo优化为什么没有权重惠州seo哪家质量好南海seo搜索优化代理商做seo有哪些优化公司seo诊断及优化方案合肥seo团队联系电话偃师seo优化关键词潮州seo优化推荐网络营销与seo推广哪家强葫芦岛seo优化哪家好关键词seo刻羽云ls seoseo软件代理seo公司深圳胡歌seo公司抖音seo操作南庄seo优化入门seo优化规范化标准驱宝sEo北京seo品牌推广北京品质seo优化有哪些冯耀宗seo有用吗秦淮seo优化seo新手怎样做排名嘉兴信息化seo推广seo是用一种江夏seo优化多少钱下城区seo关键词公司seo怎么做伪文章优化通化市seo优化公司河北seo智能优化费用东营最好的seo外包seo专业培训关键词广州seo方案多少钱兰州整站seo优化建站公司宁波seo排名费用禅城seo排名优化哪家好郴州关键词seo优化推广廊坊seo整站优化SEO优化工程师需要什么学历珠海专业seo排名费用多少优化SEO排名网站推广濮阳专业seo推广平台麒麟seo学院教学前端seo搜索引擎优化营销扬州页面seo推广天津的seo是什么希望免费seo教程全集seo营销新技巧外推seo必备能力seo可以长期做下去吗南山关键词seo优化价格seo优化专员工作内容灰色口碑好的万词霸屏推广seoseo安装一个微信济南seo策略seo竞价搜索排名连江网页seo哪家好seo优化是在什么时候做的宁波seo推广选哪家杭州抖音搜索排名seo怎么做seo新手必看seo推广收录seo诊断及优化方案肥西seo优化价格一个月能学会seo并找到工作吗seo基本功教程推广产品seo显示的是什么数据潼南区seo优化哪个好嘉兴谷歌seo案例校园seo优化案例山东seo优化公司价格搜索引擎优化排名seo联系电话seo网站注册有什么困难嘉定区seo网络推广品牌企业保定seo整站优化排名哪家好seo优化系统引流驱宝sEo启东seo网络优化哪家技术好苏州网站seo怎么选潜江seo推广公司威海文润测控seo招聘天津抖音seo搜索排名seo链接是什么概念安庆市seo优化外包seo公司怎么操作外链温岭做seo优化推广报班学SEO多少钱从事seo工作会遇到什么困难seo关键词助手奉化seo优化要多少钱seo专业推广营销从化区运营seo优化包括什么seo激光影城泰州seo站外推广排名代做seo报价方案多少钱是合理范围seo主词优化seo应该如何做代发随州seo排名技术厂家南通seo哪个公司好永州关键词seo优化报价表建筑seo优化团队内蒙古百度seo关键词桥西区电子seo服务诚信经营增城区品牌seo优化怎么样b2b网站seo方法肥西seo推广公司徐水县seo优化选哪家贵州seo关键词如何优化下载站如何seo优化广告丘仕达seo案例连江效果好的seo排名江都seo优化排名大连seo招聘信息推广芜湖seo优化服务网站seo外链工具seo顾问seo推广seo站内优化怎么更新seo考核内容如何让客户seo效果最大化seo进阶教程b2b哈尔滨seo技术多少钱蔡甸seo优化技术东方seo公司常用的seo优化工具有哪些新手自学seo第一步收录湖北seo优化答疑解惑seo优化教程自学seo顾问seo站外优化怎么做合肥整站seo总部福山区seo优化推广报价方案凯里seo优化推广公司qq群seo优化保康seo优化SEO国际舞蹈重庆铜梁seo哪家不错百度百科SEO负责人阳泉seo优化价格seo推广平台外链烟台seo推广引流排名盐城做seo优化选择哪家晋中seo优化市场规模云龙区seo优化公司绍兴seo推广服务哪家好百度推广seo渠道有哪些温江区seo网络推广方法上海seo实验室黄石seo推广公司排名自贡关键词seo优化seo网络营销课seo优化策略毕业论文分类岳阳专业seo优化成交价北京品质seo优化服务费百度SEO2022年最新算法seo优化公司价格seo每日应该做什么龙岩seo优化网络seo主管的待遇seo 网页字体seo技术好学吗广东移动端seo关键词优化推广重庆长沙seo优化团队成都seo优化课程哪家好湛江外包seo昆明seo优化策划报价湖南seo优化成交价seo部门职责商丘seo优化哪里好洛阳洛宁县seo优化建设纺织seo优化方法seo推广平台外链雨尘seo静态页面有用吗如何运营好sem营销seo博客seo优化推广哪家质量好巴中seo网络推广有哪些平台廊坊seo网站推广费用官网seo去哪学习短视频seo营销方案seo公司遂宁seo网络推广方案

合作伙伴

深圳SEO优化公司

龙岗网络公司
深圳网站优化
龙岗网站建设
坪山网站建设
百度标王推广
天下网标王
SEO优化按天计费
SEO按天计费系统