2

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

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

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

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

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

非常感谢

4

3 回答 3

1

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

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

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

于 2013-11-07T19:46:22.713 回答
0

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

Redis 集群:

Redis Sentinel:(高度可用)

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

于 2013-11-10T20:38:17.437 回答
0

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

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

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

于 2013-11-07T16:51:17.510 回答