1

我有一个非常简单的问题,找不到答案,这让我认为我很可能错过了一些基本事实。

我正在使用 memcache 来缓存和提供大型静态数据,这通常可以让我们从单个实例中为数千个用户提供服务;然而,似乎由于应用引擎是单线程的,所以每个请求都被排队并按顺序服务,然后在为大量用户提供服务时最终启动多个实例......</p>

除了延迟,尤其是在启动新实例时,这会导致更大的定价问题。由于 Google 现在按实例小时数而不是 CPU 利用率收费,并且通过提供缓存数据,我们很可能只使用每个实例的可用 CPU 的一小部分,因此需要为许多不必要的额外实例收费,类似于这篇文章...< /p>

我错过了什么吗?

提前感谢您的回答

4

1 回答 1

0

如果您通过在 appengine-web.xml 文件中将“threadsafe”元素设置为“true”来启用多线程,则 App Engine 不再是单线程的。

但是,在 MemCache 中缓存数据并不意味着您可以为单个实例提供无限数量的请求。Mem 缓存不运行您的应用程序代码,它只是让您为它节省前往数据存储的时间,因此速度更快。

根据您的代码和内存使用情况等,当 App Engine 看到一个实例(由于多线程现在一次服务多个请求)变得“太忙”时,它将启动新实例(这取决于许多仪表板设置以及您在 appengine-web.xml 中的热身请求设置)和更新的请求可能由这些请求提供服务。

因此,实例的使用取决于为您的请求提供服务的代码的持续时间,以及每个人的内存使用 - 而不是 MemCache。

如果通过说“静态数据”,您指的是 html 文件等,通过在 appengine-web.xml 中将它们标记为“静态”,那么实际上您可能根本不需要任何实例。它们由 Google 的内容分发网络(“CDN”)提供服务,无需启动您的实例或运行您的任何代码。

为此,客户端请求(例如来自浏览器的请求)只需要请求静态文件,而不会导致您的任何应用程序代码运行。

因此,基于所有这些 - 您可能需要重新提出您的问题 - 无论哪种方式,我希望它有所帮助。

于 2012-09-19T23:25:59.503 回答