希望标题不会太混乱。
我有一个运行完全相同的PHP API代码的TEST和PROD环境。两个“环境”都在同一个VM上运行。
通过live.myapi.com访问PROD,通过test.myapi.com进行TEST。两个域都指向相同的IP,并且两者的所有请求都是通过SSL进行的。 (怀疑任何重要但无论如何都是这样)
如果我在搜索终点上运行测试,我会在执行时间上获得巨大的差异。
PROD https://live.myapi.com/search 1.5s至5.8s 测试https://test.myapi.com/search 0.07s至0.2s
PROD比TEST慢10倍,即使它们是相同的代码并在同一个VM上运行。
API与AWS(Aurora)中的远程数据库联系,这两个API之间的唯一区别是它们分别与PROD和TEST数据库通信。数据库也在同一台服务器上运行,因此它们之间的硬件没有区别。
我将PROD中的搜索对象更改为指向TEST数据库,但仍然有相同的时间。
然后我在TEST中将搜索对象更改为指向PROD数据库,它仍然超级快。
我还确保他们在搜索两个环境时都返回了相同的记录,但更改了TEST的一列值,因此很明显我所做的更改实际上已生效。他们肯定是。
所以我认为我已经淘汰了数据库作为问题,但我想不出任何其他会导致这些荒谬的速度差异。
我希望你们中的一些人对我能找到的其他东西有一些想法,以确定为什么PROD会如此缓慢地运行。
提前感谢您提供帮助和阅读本文。
答案 0 :(得分:0)
事实证明,差异与数据库有关。
我的搜索API中的一个嵌套类是调用一个函数来老化访问日志。
在TEST中,这花了很长时间,因为它没有获得大量的流量。但是在PROD中,它需要更长的时间和变化,具体取决于流量(我们有一堆站点使用相同的API,因此流量很大。)
我从搜索堆栈中删除了老化函数调用,并将其作为一个单独的终点,然后将其连接到cron。
我低估了网站在编码之前获得的流量。
感谢大家的有益建议!