从应用引擎提供缓存数据时的多线程处理



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

我正在使用memcache来缓存和提供大型静态数据,这通常应该使我们能够从单个实例为数千个用户提供服务;但是,似乎由于应用程序引擎是单线程的,因此每个请求都按顺序排队和提供服务,然后最终在为大量用户提供服务时启动多个实例...

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

我错过了什么吗?

提前感谢您的回答

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

但是,在 MemCache 中缓存数据并不意味着您可以从单个实例处理无限数量的请求。Mem 缓存不会运行您的应用程序代码,它只是节省了您访问数据存储的时间,因此速度更快。

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

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

如果说"静态数据",

你指的是html文件等,在appengine-web中将它们作为"静态".xml,那么实际上你可能根本不需要任何实例。它们由 Google 的 CONTENT 分发网络 ("CDN") 提供服务,无需启动您的实例或运行您的任何代码。

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

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

最新更新