如果Master没有将数据复制到slave,如何从Slave DB读取数据。

时间:2016-09-21 18:19:18

标签: architecture scalability high-availability

让我们说我们有以下要求:(我们只有1个主人和1个奴隶)

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

  1. 我们将检查Slave中是否没有数据,然后我们可以从Master读取,但是Master会再次加载。
  2. 我们将检查Slave中是否没有数据,我们会等待一段时间再次点击Slave服务器,但在这种情况下,用户必须等待加载page2。
  3. 我的问题是我们可以使用其他方法或设计解决方案在第2页上获取数据而无需等待并增加负载。

2 个答案:

答案 0 :(得分:0)

您的解决方案策略应该取决于Master和Slave之间的同步间隔。

  1. 如果同步间隔较小,则实体在Slave中复制的概率较高,在这种情况下等待几秒钟再次命中奴隶。
  2. 如果同步间隔较高(由于业务需要或某些其他原因),那么实体在Slave中复制的概率较小,因此您应该仅在此场景中直接命中Master。在其他场景或页面中,由于您确信复制已完成,因此您可以点击从站DB。

答案 1 :(得分:0)

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

  1. 异步复制。仅在主节点上读取或写入,而不是从节点。 (节点是数据分区单元,每台机器占用主节点和从节点的数量),当一台机器关闭时,则触发节点重新平衡。

  2. 同步复制。当所有或大多数返回成功时返回成功。 (NWR或Paxos)

  3. 我们的分布式nosql数据库通过异步复制数据选择可用性而非一致性。我们只对主数据分区进行读写。

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

    相同的数据中心数据复制延迟小于1毫秒,这意味着当机器停机时,在机器启动之前,无法检索到1毫秒的数据。现在,这可以接受我们的大多数业务要求。

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