gpt4 book ai didi

scalability - 如何正确处理异步数据库复制?

转载 作者:行者123 更新时间:2023-12-04 12:41:38 25 4
gpt4 key购买 nike

我正在考虑使用 Amazon RDSread replicas扩展我们的数据库。

我们的 Web 应用程序中的一些 Controller 是读/写的,其中一些是只读的。我们已经有了一种自动识别哪些 Controller 是只读的方法,所以我的第一种方法是在请求读/写 Controller 时打开与主服务器的连接,否则在请求读时打开与只读副本的连接-只有 Controller 。

从理论上讲,这听起来不错。但后来我偶然发现了复制滞后的概念,它基本上是说一个副本可能比主节点慢几秒钟。

让我们想象一下以下用例:

  • 浏览器发布到 /create-account ,这是读/写,从而连接到master
  • 创建帐户,提交事务,浏览器重定向到 /member-area
  • 浏览器打开 /member-area ,这是只读的,因此连接到副本。如果副本稍微落后于主副本,则副本上可能尚不存在用户帐户,从而导致错误。

  • 您如何在应用程序中实际使用只读副本,以避免这些潜在问题?

    最佳答案

    我使用了使用伪 vertical partitioning 的应用程序。 .由于只有少数数据对时间敏感,因此应用程序通常仅在特定情况下从从站和主站获取。

    举个例子:当用户更新他们的密码时,应用程序总是会要求主人提供身份验证提示。当更改非时间敏感数据(如用户首选项)时,它会显示成功对话框以及可能需要一段时间才能更新所有信息的信息。

    根据环境可能会或可能不会起作用的其他一些想法:

  • 更新计算实体校验和后,将其存储在应用程序缓存中,并且在获取数据时始终要求符合校验和
  • 使用浏览器存储/cookie 存储增量确保用户始终看到最新版本
  • 添加“最新”标志并在更新之前/之后在每个从节点上同步失效

  • 无论您选择哪种解决方案,请记住它的主题 CAP Theorem .

    关于scalability - 如何正确处理异步数据库复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17395101/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com