将 redis 缓存用于主要存储然后稍后同步到数据库的缺点?

Drawbacks of using redis cache for primary store and then syncing to a DB later?

我正在编写一个应用程序并尝试使用无服务器架构,我的一个想法是这些功能应该相当快地执行,这也可以从我的想法中节省资金,这是关于数据的持久性保持函数执行时间短。

函数本身很简单,它需要 'cards' 和文本并持久化它们。特别是应用程序可能会频繁创建这些卡片,或者非常频繁地大量编辑这些卡片。

鉴于这个假设,我认为与其将函数直接写入数据库,不如将函数写入缓存更有意义。稍后,可能会存在某种同步应用程序,它会在缓存中获取数据并将其持久保存到数据库中。 同步工具可能发生在几台机器上,这些机器启动并专门执行此操作,因此可以以固定速率完成,而不是使用一些昂贵的功能。

这似乎是一个更好的选择,但我想知道这样做与使用数据库相比有什么缺点。到目前为止,我的一些想法是:

  1. 一致性问题会很棘手,因为同步必须足够频繁地发生,缓存中的项目在保存和用户会话结束之前不会过期。
  2. 捆绑到同步中意味着操作可以批量执行,而不是许多单个事务,这听起来是件好事
  3. 一般来说,通过将缓存作为数据源的主要驱动程序来设置缓存似乎更容易,而不是将数据存储在缓存中并确定何时进行缓存等

我也很想知道我可以 google 了解更多关于这些概念的内容,因为目前这些都是想法,我不知道描述它们和了解更多信息的术语关于他们。我敢肯定这个问题以前已经解决过很多次了!

您的方案的主要缺点之一是系统的复杂性 - 这意味着更高的开发(包括此研究阶段)和维护成本。这在项目的早期阶段尤为重要。通常,当您看到投资于此类相对较小的优化的业务价值时(即您需要大量流量才能收回初始成本 + 额外维护成本),您通常会专注于主要业务功能并将此类优化留到以后再做。

如果您在进一步研究这个问题时看到了商业案例,您应该从估计实际收益开始。所以你应该检查一些基准 - 例如与 DynamoDB(针对此用例进行了优化)相比,您在 Redis 上的写入速度有多快?

接下来,如果您希望持续拥有大量流量 - 数学表明无服务器实际上更适合您吗?也许只增加自动缩放实例和 运行 本地内存缓存更具成本效益,它会以块的形式转储到数据库(而不是使用相同想法的 Redis)?无服务器并不总是像漂亮的广告所展示的那样具有成本效益。

正如您所说,一致性是需要考虑的一个非常重要的方面。你真的需要它吗?例如,如果两个 lamdb 想要更新相同的 'card' 会发生什么?理想情况下,您不应该关心先处理哪个更新。如果它们可以以任何顺序发生(没有错误)——那将为您提供获得更好性能和更低成本的最多选择。