ruby on rails——跨前端服务器共享缓存文件的可伸缩方式



我有多个后端服务器不断构建和刷新api的公共部分,以便缓存它。后端服务器的构建取决于作业队列中必须完成的任务。

一次,后端服务器1将构建:

/article/1.json
/article/5.json

后端服务器2将构建:

/article/3.json
/article/9.json
/article/6.json

我需要从前端服务器提供这些文件。缓存被存储为文件,以便nginx直接提供服务,而不需要通过rails堆栈。

问题在于如何以可扩展的方式使前端服务器上的缓存保持最新(添加新服务器应该是无缝的)。

我考虑过:

  • NFS/S3(但太慢)
  • Memcached(但不能直接从nginx服务-可能是错误的?)
  • CouchDB直接提供JSON(我觉得这太大了)
  • 后端写json在redis,工作在前面重写文件在好地方(目前我最喜欢的选项)

有什么经验或者好主意吗?

您没有说构建一篇文章需要多长时间,但假设它不是非常慢,我认为您最好让应用程序服务器动态构建页面,并让前端服务器进行缓存。在这种情况下,你可以把一些haproxy/varnish/squid/nginx的组合放在你的应用服务器前面,让他们为你做平衡/缓存。

你可以做同样的事情,我想如果你继续在后端不断构建它们。

你的最终目标是拥有这个:

internet -> load balancer -> caching server 1   --> numerous app servers
                         -> caching server 2  -/

根据需要添加更多缓存服务器和应用服务器。互联网永远不会知道。根据您选择的软件,负载平衡器/缓存服务器可能是相同的,也可能不是。这取决于你的负载和特殊需求

如果你不想触及rails堆栈,你可以在请求到达整个应用程序之前使用rack-cache之类的东西捕获请求:

http://rtomayko.github.io/rack-cache/

至少这样,你只需要引导机架。

它还支持memcached作为存储机制:http://rtomayko.github.io/rack-cache/storage

你是对的,S3本身很慢,特别是HTTPS会话设置可能需要5-10秒。但S3是主数据的理想存储,我们经常使用它,但与S3 Nginx代理相结合,以加快数据传输速度并注入缓存设施。

Nginx S3代理解决方案在生产环境中测试良好,缓存机制工作完美,每个应用服务器都使用代理从S3获取原始文件进行缓存。

要防止狗堆效果,可以使用:

  • proxy_cache_lock 新文件,文档

  • proxy_cache_use_stale updating更新文件,doc

S3 Nginx代理配置查看此https://gist.github.com/mikhailov/9639593

相关内容

  • 没有找到相关文章

最新更新