Heroku上的Rails:动态生成图像存档 - 提高性能

时间:2013-04-26 10:57:22

标签: ruby-on-rails caching heroku amazon-s3

我们正在Heroku上构建一个Rails应用程序,用户可以上传图像(存储在S3,美国标准区域)。用户可以向朋友发送链接,他们可以将图像作为存档(zip)下载。这个档案必须在飞行中生成 - 每个用户的内容(即哪个图像)与某些“魔术规则”不同。

问题:当朋友打开下载URL时,构建存档需要几秒钟。所有图像(总共约4Mb)必须从S3下载到Rails应用程序,然后打包到存档中。您是否有想法如何加快这一过程,或者您能帮助我评估以下选项吗?

  1. 异步下载:我们可以使用异步作业队列进行打包(这不会使流程更快,但可扩展性更好:))
  2. 在文件系统上缓存:我们可以将文件缓存在文件系统上。但由于Heroku上的Web进程不一定共享相同的文件系统,因此必须为每个新的Web进程执行此操作。
  3. 并行下载:目前按顺序完成下载,线程(哎哟,更好的几个作业队列?)可以用于并行化
  4. 通用缓存组件(memcached,redis):我们可以使用memcached或redis来加快访问速度,而不是在文件系统上缓存(因此我们不必为每个Web加热缓存处理)。
  5. 我对缓存策略做了一些简短的基准测试,我尝试从不同的位置下载100Kb:

    • 文件系统:0.0002s
    • Memcached:0.01s-0.09s
    • Redis:0.01s-0.09s
    • S3:0.1-0.25s

    因此,使用缓存(文件系统,memcached或redis)肯定会提高性能,最终的解决方案可能是结合不同的方法。

    你会怎么想?非常感谢您的帮助!

0 个答案:

没有答案