Varnish 和 RAM 不足

Varnish 和 RAM 不足

我有一台专用于 Varnish 的服务器,用于处理数以万计的静态文件。这台服务器有 32GB 的 RAM。这些文件几乎占用了所有的 RAM,其中绝大多数也经常使用,所以我现在面临的问题是 - 该怎么办。服务器毫不费力地处理请求,但服务文件的数量一直在增加,我随时都会面临 RAM 的问题。添加额外的 RAM 不是一个选择,以及将部分数据保存在硬盘上。

我决定再放置一台具有相同参数的服务器。我想在两台服务器之间传播数据。两台服务器都可以与 HAProxy 配合使用。

由于缓存中存储的数据量增长非常快,并且它们不断轮换,我需要一个解决方案,可以让我自动在两台服务器上分配数据。例如:

Varnish1 处理站点 S1、S3、S5
Varnish2 处理站点 S2、S4、S6

当 S7 页面出现时,应该自动将其附加到负载最小的服务器。同样,当网站消失时,例如 S2,应该将数据重新分配到服务器,以实现最均衡的负载。在服务器正常运行期间也应该发生同样的情况,当一个网站(例如 S1)突然消耗比正常情况下多得多的资源时,服务器应该自动将部分支持的数据转移到其他服务器。我接受部分复制,即当 S1 等请求的数量增加到会堵塞一台服务器的程度时,数据应该立即复制到另一台服务器。

我预测将来服务的数据量以及服务器数量都会增加几倍,因此我不能依赖Varnish的手持解决方案。

答案1

我同意 Shane Madden 的观点。这是一个棘手的问题。以下是一些想法:

重新考虑磁盘

重新考虑使用磁盘作为 Varnish 缓存。添加磁盘比添加 RAM 更容易;您能负担得起的磁盘越快越好。性能会有所下降,但对于普通用户来说,可能并不明显。我们在 Varnish 中使用磁盘非常成功。磁盘的另一个优点是:例如,如果您使用 NAS,您可以将 NAS 安装在不同的服务器上,这样您就不必担心在各个服务器之间同步文件。

HAProxy

使用代理,您可以转移流量,但最终您会遇到同样的问题——内存或磁盘空间不足。

不要关注清漆

也许是时候考虑 Varnish 以外的解决方案了。也许是 CDN?它可能满足也可能不满足您的需求,但您可以将一些使用频繁的文件卸载到 CDN 上,而对于使用较少的文件,则从您的服务器交付。

HTH,祝你好运!

答案2

首先要检查是否Vary正确处理了 HTTP 标头。这一点非常重要,因为如果处理不当,您可能会获得同一缓存对象的多个副本,但由于 HTTP 标头不正确,这些副本只是单独的副本。

当你奔跑时你得到了什么curl -I http://yourhost.com/path/to/a/static/file.ext

相关内容