【问题标题】:Which replication mechanism to chose in distributed system?在分布式系统中选择哪种复制机制?
【发布时间】:2020-11-22 20:16:22
【问题描述】:

很难理解一些事情。 我在网关后面有两个复制的服务主机(A 和 B)(将来可能会扩展到最多 3 个)。每个服务主机都需要保存其各自主机的一些数据/状态(key-value)。为避免 SPOF,需要将相同的状态/数据复制到两台主机,以便如果一台服务器出现故障,则另一台服务器应该可以提供服务。请提出一些解决此问题的机制。 (如果有分布式框架,要非常具体)

主从复制:主机 A 为主,主机 B 为从。 但我的问题是:

  • 来自主机 B 的所有写入请求都将通过主机 A 路由,然后最终到达 B。
  • 另外,假设主机 A 出现故障,那么将没有写入和 B 将卡住直到 A 恢复。

我的理解是否正确,不能在从属中进行写入?如果有一些解决方法,例如将从属升级为主,仍然存在如前所述的重新路由问题。

我认为可以使用其他方法(多主机和无领导)来实施解决方案,但无法得出任何结论。我尝试比较其中的几个:

  • Redis - 默认情况下是主从,但企业版是 也有主主配置。所以可能是 解决方案。
  • Dynamo 风格 - Riak、Cassandra、Voldemort 等。不确定所涉及的复杂性

要求:

  • 解决方案必须简单轻量,不消耗大量服务主机资源。
  • 数据采用键值格式
  • 读/写应该非常快。 (内存中会更好)
  • 读/写操作的发生/频率不是很快。
  • 数据量也非常少。任何主机上任何时间点的数据总大小不得超过 1 mb。

【问题讨论】:

    标签: redis distributed-caching distributed-database multi-master-replication


    【解决方案1】:

    在集群模式或哨兵模式下使用 Redis 都是一种选择。

    Redis 集群:可以设置多个主从节点。 Redis 会在 master 宕机时处理故障转移。

    Redis Sentinel:您可以设置单个或多个主从节点,以及一个哨兵集群。故障转移时,哨兵将处理新的主节点选举。

    而且我认为您不需要为服务的每个主机使用单独的数据库。相反,所有主机都可以连接到同一个 Redis 集群。当其中一台主机或redis节点宕机时,不会影响你的服务。

    【讨论】:

    • 另外,如果你没有太多数据,我会根据你的场景推荐使用单主多从的Sentinel。
    • 但是为集群或哨兵添加单独的主机会增加额外的成本并且超出设计..所以考虑我只有两台机器或主机。我该如何解决这个问题?
    • 我认为您可以使用容器在同一主机内部署多个redis实例。
    【解决方案2】:

    Cassandra 的 P2P 特性使其具有明显的优势,无需担心如何以实现最大冗余的方式分配主服务器和从服务器。

    使用 Sentinel 有一个缺点 - 如果 Sentinel 节点本身出现故障,那么整个系统都会受到影响。水平和垂直扩展要好得多,即多主多从设置,主从分布在节点上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多