【问题标题】:scaling up using memcached to store gzipped file使用 memcached 扩展存储 gzip 文件
【发布时间】:2009-09-17 19:59:54
【问题描述】:

我有一个向浏览器提供 javascript 源文件的 Web 服务。 javascript文件由php实时编译,包含一些文件。生成的文件每天仅更改几次。在提供给浏览器之前,它会被 apache 压缩。

我想使用 memcached 从内存中提供服务,以避免磁盘和 cpu 加载文件包含和重复 gzip。

我的问题是如何 gzip 并将 javascript 文件存储在 memcached 中并提供它(来自 php)?

在我看来,如果文件不在存储中,我应该通过 include 获取文件,获取输出缓冲区,gzip 并将其存储在 memcached 中。我对么?是否有一些标题我应该添加到输出中,或者我应该做些什么来使结果与我的 apache 当前提供的 gzip 文件兼容?

更新:我没有提到该文件有几个由 url 参数控制的变体,这些变体会导致包含不同的 def 文件。如上所述,每个变体都是相当静态的。

【问题讨论】:

    标签: javascript performance memcached


    【解决方案1】:

    最好使用适当的工具来完成他们设计的任务。

    在您的情况下,您有一个缓慢变化的文件,该文件将以静态方式提供。我的意思是它不依赖于查询,但在其有效期内的每个查询都是相同的。

    为此,请使用良好的缓存网络服务器或在您的服务器前面放置一个缓存/负载平衡器。 Squid、Varnish 或 NginX 都可以。事实上,它们中的任何一个都可以像 memcached 一样快速地提供静态文件。只要确保自己 gzip 文件并像这样提供它。

    memcached 在写入速度上胜过其中任何一个,而不是服务。所以它是随查询参数变化的内容的最佳答案,因此它必须不断生成和过期(并且重叠)。

    由于您只需压缩和写入文件几次,因此压缩/写入时间无关紧要。之后,多级缓存将为您带来最佳性能。

    另请注意,由于 mencached 不是网络服务器,它的缓存不像适当的网络缓存那样“靠近”客户端,从而否定了任何假设的读取性能优势

    【讨论】:

    • 谢谢!我没有提到该文件有几个由 url 参数控制的变体,这些变体会导致包含不同的 def 文件。如上所述,每个变体都是相当静态的。假设我买不起负载均衡器,这可以用 LAMP 自动完成吗?我不想手动压缩文件的每个变体。
    【解决方案2】:

    也许正确的解决方案是在您的网络服务器上使用 Apache 自己的内置缓存。

    毕竟,这并不是有很多不同的变体,也不是经常变化。如果您场中的每台服务器不时生成自己的副本,那(我想)不会有太大影响。

    Apache 的缓存尊重输出中的“Expires”标头等,因此只需为这些 URI 打开它并输出适当的标头即可。

    memcached 的“优点”是您的 memcached 服务器形成一个池,看起来像一个单一的缓存,并且可以由您的所有 Web 节点共享;如果您只有很少数量的项目(在这种情况下,听起来您只有一个或只有几个),这并不真正相关。

    【讨论】:

    • 我不知道 Apache 尊重过期的标头。我以为它们是用于浏览器缓存的。我想这是我需要的解决方案。谢谢!
    猜你喜欢
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 2022-12-21
    • 2018-11-10
    相关资源
    最近更新 更多