降低谷歌应用程序引擎成本

Reducing Google App Engine costs

本文关键字:引擎 应用程序 谷歌      更新时间:2023-09-26

我们有一段Javascript,每天为数百万浏览器提供服务。为了处理负载,我们决定使用谷歌应用程序引擎。

这段Javascript的一个特别之处在于,使用我们服务的每家公司的情况(非常)略有不同。

到目前为止,我们通过main.py来处理这一问题,main.py基本上是:-读取JS静态文件并打印-打印自定义代码

我们在每次装载时都这样做,成本开始真正增加。

除了每个客户都有一个静态版本的文件外,为了减少我们的账单,你还有其他方法可以考虑吗?使用memcache而不是读取文件会以任何方式降低价格吗?

非常感谢。

我假设您在实例小时内支付了很多费用。从GAE文件系统读取相当慢。因此,最简单的优化方法是在实例启动时只从静态文件中读取一次,将js文件保存在内存中(即全局变量),然后打印。

其次,确保客户缓存了你的js,这样当他们重新加载你的页面时,你就不必再向他们提供不必要的js了。

下一种方法是尽可能将js文件作为静态文件提供。如果js文件很大,并且只打印它就消耗了CPU周期,这将为您节省一些钱。在这种情况下,让生成HTML的处理程序将适当的URL插入到适当的js文件中,而不是每次都重新生成整个js。您将节省资金,因为用作静态文件的文件不会收取实例时间的费用,而且它们可以缓存在边缘缓存(GAE的CDN)中,而且您根本不会为此收取任何费用。

以下是一些在不使用cdn的情况下对其进行更多优化的方法。

是的,添加memcache层以缓存所有输出,并添加一个使用实例内存的额外实例缓存。这可以简单地通过添加一个模块全局dict并在那里添加您的key/vals缓存来完成。但是您也可以使用LRU来处理库,这样就不会使实例过载。

最后,最便宜的方法是使用cdn并将原点指向你的应用程序引擎应用程序,如果你的输出不需要太频繁地修改,你可以短时间或长时间地缓存这些结果。

以下是Ben Kamens关于实例缓存的完整博客文章:http://bjk5.com/post/2320616424/layer-caching-in-app-engine-with-memcache-and-cachepy

如果您通过提供静态文件来使用Javascript(我假设您现在这样做)。

  1. 您可以使用memcache(它降低了成本,因为处理程序将为更少的实例提供更快的服务器)
  2. 您可以使用webcache来允许缓存简单的示例(它减少了重新读取,而不是实例)
  3. 您可以支持高级http头在此处输入链接描述(需要重写Google静态文件处理程序)(它减少了重新读取+如果没有更改则加快了重新读取-不是实例或更快的实例和更少的实例)