本地和远程服务器上的高网络TTFB时间

时间:2017-01-29 21:33:19

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

我正在解决Angular 1.3,NodeJS,Postgres数据库应用程序堆栈的几个http调用中的缓慢问题。 Remote托管在AWS EC2实例上。

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

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

  

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

     

b)处理请求的慢速服务器。这要么是因为   硬件很弱或应用程序运行缓慢。或者,这两个   问题可以立即存在。

我尝试了什么:

  • 比较本地和远程AWS响应时间会产生类似的缓慢。因此,我的客户端和服务器之间的网络似乎不是问题
  • 对相关查询运行EXPLAIN ANALYZE会产生快速处理时间< 2ms的
  • 我们将Redis缓存用于服务器的其他部分,但不是这个特定的调用

我的问题是:如果没有显示远程和本地之间的速度有很大差异,查询时间相当快,还有什么可能会增加缓慢?节点端是否存在某些中间件或处理,或者Angular会进行一些限制?

奇怪的是,我还发现TTFB时间偶尔会因同一请求而异常变化...... TTFB时间< 500ms,其他时间TTFB> 3秒。这是为什么?

网络响应:

enter image description here

EXPLAIN ANALYZE有问题的查询结果:

 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

Angular :1.3

1 个答案:

答案 0 :(得分:1)

  

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

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

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

要解决此问题,您需要了解如何使用连接:

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