如何使用Rails进行扩展

时间:2013-11-07 16:46:07

标签: ruby-on-rails redis memcached scalability sidekiq

我想准备一个可扩展的rails应用程序。此应用程序的一些功能是连接到一些API&发送电子邮件,加上我正在使用PostgreSQL&它在Heroku上。

现在代码很干净,我想使用缓存和任何有助于扩展应用程序的技术。

我应该使用Redis还是Memcached?这有点让我感到不安,我在StackOverflow上看到了类似的问题,但在这里我想知道哪一个我只能用于扩展目的。

此外,我还在考虑使用Sidekiq来处理一些工作。它会与Memcached / Redis发生冲突吗?另外,我应该使用它吗?

在可扩展性方面我还应该考虑其他什么?

非常感谢

3 个答案:

答案 0 :(得分:1)

Redis是缓存的一个非常好的选择,它与memcached具有相似的性能(redis稍微快一点),并且用这种方式配置它需要几分钟。

如果可能的话,我会再次建议使用相同的redis实例来存储缓存和消息存储。

如果您确实需要这样做,请确保使用volatile-lru max内存策略配置redis,并始终使用TTL设置缓存;这种方式当redis耗尽内存缓存密钥时将被驱逐。

答案 1 :(得分:0)

Sidekiq要求Redis作为其消息存储。因此,如果要使用Sidekiq,则需要具有Redis实例或使用Redis服务。 Sidekiq很棒,顺便说一句。

您可以使用Memcached或Redis作为缓存存储。对于缓存,我可能会使用Memcached,因为缓存清理行为更好。在Rails中,特别是在Rails 4应用程序中,很少有人明确地从缓存中过期项目或设置明确的过期时间。相反,一个依赖于对cache_key的更新,这意味着缓存的项目实际上并未从商店中删除。 Memcached通过在达到内存限制时驱逐最近最少使用的项目来处理这个问题。

众所周知,缩放比选择一些组件要多得多。您将不得不进行大量的规划,识别应用程序开发时的瓶颈,并根据需要通过增加服务器来扩展CPU /内存/磁盘。

答案 2 :(得分:0)

你必须看看Redis的两个很酷的功能,这些功能在不久的将来还会出现

Redis群集:

Redis Sentinel :(高度可用)

此外,这些功能将有助于扩展redis, 在memcached的情况下,缺少这些功能,就活跃的开发而言,redis社区更加充满活力。