【问题标题】:How to read data from Slave DB if Master has not replicated data to slave.如果 Master 没有将数据复制到 Slave,如何从 Slave DB 读取数据。
【发布时间】:2017-01-30 03:12:11
【问题描述】:

假设我们有以下要求:(我们只有 1 个 master 和 1 个 slave)

用户打开第一页:输入用户名,然后按下提交按钮。请求转到应用服务器,然后将此用户名写入/更新到 Master DB 。现在,当我们从 Master 返回成功回调时,页面导航到第 2 页。但是我们必须在第 2 页上显示此用户名的详细信息(来自 Read/Slave DB),但假设 Master 没有将数据复制到 Slave。那么如何处理这种情况:

  1. 我们将检查 Slave 中是否有数据,然后我们可以从 Master 读取数据,但 Master 上的负载会再次增加。
  2. 我们将检查从属服务器中是否有数据,我们将一次又一次地等待我们访问从属服务器,但在这种情况下,用户将不得不等待加载 page2。

我的问题是我们可以使用哪些其他方法或设计解决方案来获取第 2 页上的数据而无需等待和增加负载。

【问题讨论】:

  • 您希望有多少用户访问您的 Web 应用程序。如果不是数百万,我认为复制发生得很快,您可以选择等待从从属数据库读取。您使用什么协议在 db (和 which db btw)之间复制数据。除了存储用户信息之外,Master DB 还做了什么其他事情。因为如果您将所有读取请求都发送给从属机器,那么您最终可能会加载从属机器作为其处理添加新数据和读取的处理。相反,您想加载在两者之间分配您的请求吗?

标签: architecture scalability high-availability


【解决方案1】:

您的解决方案策略应取决于主从之间的同步间隔。

  1. 如果同步间隔较小,则实体在从站中复制的概率较高,在这种情况下,请等待几秒钟,然后再次访问从站。
  2. 如果同步间隔较高(由于业务需要或某些其他原因),则实体在从属中复制的可能性较小,因此您应该仅在这种情况下直接点击主控。在其余的其他场景或页面中,由于您确信复制已完成,您可能会遇到从数据库。

【讨论】:

    【解决方案2】:

    案例是典型的读写一致性问题。选择 A 或 C:

    1. 异步复制。只能在主节点上读写,不能在从节点上读取。 (节点为数据分区单元,每台机器取若干个主节点和从节点),当一台机器宕机时,触发节点再平衡。

    2. 同步复制。当全部或大部分返回成功时返回成功。 (NWR 或 Paxos)

    我们的分布式 nosql 数据库通过异步复制数据选择可用性而不是一致性。我们只在主数据分区上读写。

    问题是当一台机器宕机时,用户无法读取机器中所有未发送数据的主分区,直到机器返回并将数据重新发送到副本。

    同一个数据中心的数据复制延迟小于1ms,这意味着在机器宕机之前,在机器启动之前,有1ms的数据无法检索。现在这可以被我们大多数业务需求所接受。

    对于不同的数据中心我们选择多个集群(主集群,从集群)。

    【讨论】:

      猜你喜欢
      • 2012-09-02
      • 2014-03-22
      • 2015-06-23
      • 2013-12-22
      • 1970-01-01
      • 2011-04-09
      • 2020-12-31
      • 2014-12-17
      • 2011-11-17
      相关资源
      最近更新 更多