RedisvsmemcachedvsScyllaCache-选择哪一个?

我正在设计一个应用程序,我想在其中缓存 10kb 左右的数百万数据。

  1. 高性能
  2. 高可用性
  3. 高吞吐量
  4. 低价?

回答

完全披露 - 我从事 Scylla 项目。

我认为这是一个延迟和 HA 与成本的问题。作为基于 RAM 的系统,Redis 将是最低延迟的。如果您需要 < 1 毫秒的响应,那么 Redis 或 memcached 是您的选择。

Scylla 是一个基于磁盘的系统。那些在 Scylla 的 RAM 中的值将是低延迟的,但那些需要从磁盘中提取的值会更慢。所以你的 99p 延迟可能会更慢。有多慢?取决于你的磁盘。NVME 可以是 99p 3-5 毫秒。SSD,也许 5-10 毫秒。如果这是一个可以接受的延迟,那么 Scylla 会便宜得多,因为即使是 NVME 也比 RAM 便宜得多。

至于 HA - Redis 和 memcached 旨在作为缓存。虽然您可以使用一些功能和框架来复制数据,但这些都是附加功能并增加了复杂性。Scylla 是一个分布式系统。因此,允许多层 HA 的复制是内置的(节点、机架和 DC 可用性)

Redis(以及较小的扩展,memcached)是非凡的缓存。但是,根据您的用例,Scylla 可能是正确的选择。


回答

您提到的所有三个选项都是开源软件,因此定价相同 - 零 🙂 但是,Scylla 和 Redis 均由公司(分别为 ScyllaDB 和 RedisLabs)编写和支持,因此如果您的用例是任务 -关键你可以选择支付这些公司的企业级支持,你可以向这些公司询问他们的价格。

三者之间更有趣的区别在于技术。

您描述了一个用例,其中缓存中有 10 GB 数据。这个数量可以很容易地保存在内存中,所以像 Memcached 或 Redis这样的完全内存数据库是一个自然的选择。但是,您仍然需要问自己一些问题,这可能会导致您使用分布式数据库,例如Scylla,具体取决于您的回答:

  1. 您会使用功能强大的众核机器吗?如果是这样,您可能应该排除 Memcached - 我的经验(和其他人的经验 - 请参阅
    Memcached 能否充分利用多核?)表明它不能很好地扩展多核。在 8 核机器上,您不会获得接近单核机器 8 倍的性能。Redis 也并非真正适用于多核使用 - https://redis.io/topics/benchmarks说 Redis “并非旨在从多个 CPU 内核中受益。人们应该启动多个 Redis 实例以扩展多个如果需要,核心。”。另一方面,Scylla 在多核机器上茁壮成长。在做出决定之前,您可能应该在您的用例中测试所有三种产品的性能。

  2. 突然丢失缓存的全部内容会造成多大的灾难?在某些用例中,这只是意味着您需要查询一些稍微慢一点的后端服务器,因此在重新启动时突然丢失缓存是可以接受的。在这种情况下,像 Memaced 或 Redis 这样的纯内存缓存可能正是您所需要的。但是,在其他情况下,使用空缓存从头开始可能会有很大的惩罚——后端服务器可能非常慢,或者原始内容可能存储在远程服务器上,广域网速度慢且昂贵。在这种情况下,您需要一个磁盘支持的缓存,因此如果内存缓存丢失,您仍然可以从磁盘而不是从后端服务器刷新它。Redis 有一个磁盘备份选项,在 Scylla 中磁盘备份是主要方式。

  3. 您提到了一个 10 GB 的工作集,可以轻松容纳单个服务器的内存。但是这是否可能会增长,一年后您会发现自己需要缓存 100 GB 或 1 TB,这不再适合单个服务器的内存?在 memcached 中,您将不走运。Redis 曾经为此目的提供“虚拟内存”解决方案,但它已被弃用,并且https://redis.io/topics/virtual-memory现在声明 Redis“至少目前没有考虑对大于内存”。Scylla 确实通过两种方式处理这个问题。首先,您的缓存将存储在可能比内存大得多的磁盘上(您拥有的任何内存量都将用于进一步加速该缓存,但它不需要适合内存)。第二,服务器。它可以将 100 GB 的工作集分发到 10 个不同的节点。Redis 也有“复制”功能,但它将整个数据复制到所有节点——而 Scylla 可以选择性地将不同的数据子集存储在不同的节点上。


以上是RedisvsmemcachedvsScyllaCache-选择哪一个?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>