5 个快速的 Node.js 应用性能提示(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 为你捕获的上下文信息中查看是否有有用的信息。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14a90131c1bdd5d6c6f9b84b4a93412b.html