【问题标题】:How to scale with Rails如何使用 Rails 进行扩展
【发布时间】:2013-11-19 10:32:55
【问题描述】:

我想准备一个可扩展的 Rails 应用程序。这个应用程序的一些功能是连接到一些 API 和发送电子邮件,另外我正在使用 PostgreSQL 并且它在 Heroku 上。

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

我应该使用 Redis 还是 Memcached ?这对我来说有点模糊,我在 StackOverflow 上看到过类似的问题,但在这里我想知道我应该使用哪一个仅用于扩展目的。

我也在考虑使用 Sidekiq 来处理一些工作。它会与 Memcached/Redis 冲突吗?另外,在哪种情况下我应该使用它?

在可扩展性方面我应该考虑的其他任何事情?

非常感谢

【问题讨论】:

  • 您还必须扩展基础架构(服务器)。最好是垂直缩放。

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


【解决方案1】:

Redis 是一个非常好的缓存选择,它的性能与 memcached 相似(redis 稍快一些),并且需要几分钟的时间来配置它。

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

如果您确实需要这样做,请确保您使用 volatile-lru 最大内存策略配置 redis,并且始终使用 TTL 设置缓存;这样当 redis 用完内存缓存时,key 就会被驱逐。

【讨论】:

    【解决方案2】:

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

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

    总而言之,缩放不仅仅是挑选几个组件。您必须进行大量规划,在应用开发过程中识别瓶颈,并根据需要通过增加服务器来扩展 CPU/内存/磁盘。

    【讨论】:

    【解决方案3】:

    你必须看看 Redis 的两个很酷的功能,它们还没有在不久的将来出现

    Redis 集群:

    Redis Sentinel:(高可用)

    这些特性也将对redis的扩展产生很大的帮助, 如果 memcached 缺少这些功能,那么就积极开发而言,redis 社区也更加活跃。

    【讨论】:

      猜你喜欢
      • 2013-02-11
      • 2012-02-28
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2012-12-09
      • 1970-01-01
      • 2019-07-08
      相关资源
      最近更新 更多