我正在尝试优化GAE的性能,但是一旦部署,我会得到非常不稳定的结果。很难看出每个优化是否真的有效,因为数据存储区和内存缓存操作的时间变化很大(相同操作的时间范围从毫秒到秒)。
对于这些测试,我是唯一一个通过刷新主页只对应用程序发出一个请求的测试。没有其他人/流量发生(除了我自己的浏览器从页面请求图像/ css / js文件)。
编辑:为了确保丢弃不是由于来自浏览器的并发请求(images / css / js),我通过仅使用urllib2.urlopen请求页面来重做测试()。问题依然存在。
我的问题是:
这是一个非常慢的数据存储区get(memcache刚刚刷新): Full size
这是一个非常慢的memcache get(由于之前的请求,事情被缓存): Full size
这是一个缓慢但更快的memcache get(与前一个相同的repro步骤,不同的调用很慢): Full size
答案 0 :(得分:0)
回答你的问题,
1)是的,由于共享网络,您可以预期远程呼叫会出现差异;
2)您将看到差异的最常见位置是数据存储区请求 - 请求越大/越远,您将看到的差异越大;
3)这里有一些选项:
看起来您正在尝试从数据存储区/内存缓存中获取大量数据。您可能需要重新考虑查询和缓存,以便检索较小的数据块。您的应用是否需要针对单个请求的所有数据?
如果应用程序确实需要在每个请求上处理所有数据,则另一个选项是使用后台任务(cron,任务队列等)对其进行预处理,并将结果放入内存缓存中。提供页面的请求应该只是从内存缓存中选择正确的部分并组装页面。
@ proppy建议使用NDB是一个很好的建议。将串行查询重写为并行查询需要一些工作,但异步调用的节省可能是巨大的。如果你可以从并行任务中受益(使用map),那就更好了。