我在我的本地服务器和测试的Amazon EC2服务器上加载了相同数量的数据(~100kb),但EC2上的响应速度慢了2倍。两者都在同一台机器上运行Apache 2和MongoDB。在我的本地服务器上,响应时间约为209毫秒,而EC2上约为455毫秒。
我已经设置了一个简单的查询和AJAX调用,它根据设备的当前视口抓取要在地图上显示的点数据。
如何调试此问题?如何让它像我的本地服务器一样快?我甚至尝试使用不同类型的实例来确保规格相同,但没有运气。我也意识到这可能是因为网络延迟。
本地计算机规格:
Amazon EC2规范(m4.large):
答案 0 :(得分:1)
对EC2的远程查询不太可能像本地服务器一样快地返回AJAX查询的结果,因为它有网络延迟,而本地服务器没有。测量从查询开始到准备好返回数据的AJAX处理程序的时间,以获得有意义的基线进行比较。
MongoDB对RAM中的数据与磁盘上的数据非常敏感。根据您配置EC2实例的方式以及本地硬件,很可能本地硬件更快。 EC2实例可以配置为使用SSD存储,您可以配置保证的IOPS数据。
100KB是结果集的大小,还是形成结果集所需的数据量?如果您处理4GB数据以获得100KB结果集,那么很可能涉及磁盘IO。如果您需要提取的数据量很小,请重复测试几次以确保数据完全在RAM中。
最后,如果本地和EC2都从RAM中提取数据,那么本地CPU内核很可能比EC2 CPU内核更快,并且您的RAM访问速度也更快。 EC2旨在提供低成本的商用硬件。开发人员设置通常要快得多。
如果您无法考虑上述因素造成的速度差异,请使用排除网络延迟的时间测量值更新您的问题,并提供有关硬件的更详细规格。更新问题以指示您从MongoDB检索的数据是否应完全在RAM中,考虑到它的大小和实例上的RAM量。