2

我们有一段 Javascript,每天为数百万浏览器提供服务。为了处理负载,我们决定使用 Google App Engine。

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

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

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

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

非常感谢。

4

3 回答 3

3

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

其次,确保您的 js 被客户缓存,因此当他们重新加载您的页面时,您不必再次为他们提供不必要的 js。

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

于 2013-08-27T14:48:50.967 回答
2

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

是的,请添加 memcache 层以缓存所有整个输出,并添加一个使用实例内存的附加实例缓存。这可以简单地通过添加一个模块全局字典并在那里添加你的键/值缓存来完成。但是您也可以使用 LRUCaching 库,这样您就不会超载您的实例。

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

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

于 2013-08-27T14:43:22.283 回答
0

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

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