我有一个非常简单的问题,找不到答案,这让我觉得我很可能错过了一些基本事实。
我正在使用memcache来缓存和提供大型静态数据,这通常应该使我们能够从单个实例为数千名用户提供服务;然而,似乎因为app引擎是单线程的,所以每个请求都按顺序排队并按顺序提供,然后在为很多用户提供服务时最终启动多个实例......
除了延迟,特别是在启动新实例时,这甚至会导致更大的定价问题。由于Google现在正在收取小时数而不是CPU利用率,并且通过提供缓存数据,我们很可能只使用每个实例的一小部分可用CPU,因此需要为许多不必要的额外实例付费,类似于{{3} } post ...
我错过了什么吗?
提前感谢您的回答
答案 0 :(得分:0)
如果通过在appengine-web.xml文件中将“threadsafe”元素设置为“true”来启用多线程,则App Engine不再是单线程的。
但是,在MemCache中缓存数据并不意味着您可以从单个实例提供无限数量的请求。内存缓存没有运行您的应用程序代码,只是为了节省您前往数据存储区的速度,因此速度更快。
根据您的代码和内存使用情况等,当App Engine看到一个实例(现在由于多线程而一次提供多个请求)变得“太忙”时,它将启动新实例(这取决于许多仪表板设置以及appengine-web.xml中的预热请求设置和更新的请求可能由这些设置提供。
因此,实例使用取决于为您的请求提供服务的代码的持续时间,以及每个内存的使用情况 - 而不是MemCache。
如果通过说“静态数据”,你指的是html文件等,通过在appengine-web.xml中将它们称为“静态”,那么实际上你根本不需要任何实例。它们由Google的COntent分发网络(“CDN”)提供服务,无需启动您的实例或运行任何代码。
为此,客户端请求(例如来自浏览器)只需要请求静态文件,而不会导致任何应用程序代码运行。
所以,基于这一切 - 您可能需要重新表述您的问题 - 无论哪种方式,我希望它有所帮助。