【问题标题】:High network TTFB times on local and remote server本地和远程服务器上的高网络 TTFB 时间
【发布时间】:2017-06-15 00:54:49
【问题描述】:

我正在解决一些对 Angular 1.3、NodeJS、Postgres DB 应用程序堆栈的 http 调用的缓慢问题。 Remote 托管在 AWS EC2 实例上。

Google's dev tools documentation 让我对时间有了一些很好的理解,this SO post 解释了你可以做的事情。

我对特定 HTTP 调用的网络响应显示 TTFB(到第一个字节的时间)很慢,有时与在 ttfb 时间中添加的 3s 一样慢,这表明:

a) 客户端和客户端之间的网络连接不良 服务器。因此数据到达服务器并返回的速度很慢。

b) 处理请求的服务器速度较慢。这要么是因为 硬件薄弱或应用程序运行缓慢。或者,这两个 问题可能同时存在。

我尝试过的:

  • 比较本地和远程 AWS 响应时间会产生类似的缓慢。所以看起来我的客户端和我的服务器之间的网络不是问题
  • 在有问题的查询上运行 EXPLAIN ANALYZE 会产生快速的处理时间
  • 我们对服务器的其他部分使用 Redis 缓存,但不是这个特定的调用

我的问题是:如果看起来远程和本地之间的速度没有太大差异,并且查询时间相当快,还有什么可能会增加缓慢? Node 端是否有一些中间件或处理,或者来自 Angular 的一些限制?

奇怪的是,我还发现对于相同的请求,TTFB 时间偶尔会发生很大变化……TTFB 时间 3 秒。这是为什么呢?

网络响应:

解释分析相关查询的结果:

 Planning time: 0.915 ms
 Execution time: 1.687 ms
(30 rows)

版本:

Postgres:9.6.1

select version();

 PostgreSQL 9.6.1 on x86_64-apple-darwin14.5.0, compiled by Apple LLVM version 7.0.2 (clang-700.1.81), 64-bit

节点:7.4.0

Knex:0.12.6

角度:1.3

【问题讨论】:

  • 您使用的是哪个数据库库以及哪个版本?
  • @vitaly-t 添加在上面
  • 我问的是数据库,不是服务器的版本。
  • @vitaly-t 抱歉,我该如何检查?
  • 您不知道您使用哪个库从 Node.js 访问 PostgreSQL?什么模块从 Node.js 执行你的 SQL 查询?

标签: angularjs node.js performance postgresql amazon-web-services


【解决方案1】:

比较本地和远程 AWS 响应时间会产生类似的缓慢。

这指出了问题的最可能原因 - 数据库连接的使用效率低。

不一致的 TTFB 来自这样一个事实,即有时您的请求到达时所有可用的连接都被消耗并且没有按时释放。在这种情况下,默认的 pg 驱动程序会导致等待一段时间,直到池中的连接可用。

要解决这个问题,您需要研究如何使用连接:

  • 池的大小
  • 在所有请求中管理连接的方式

【讨论】:

  • Vitaly,我如何检查与此详细信息的连接?如何检查池的大小和管理连接的方式?
  • @Growler 据我所知,knex 实现了自己的连接池,与node-postgres 驱动程序的默认池分开。我不熟悉 knex 池管理,很遗憾,您需要自己研究。
猜你喜欢
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
相关资源
最近更新 更多