0

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

在此处输入图像描述

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

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

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

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

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

要求:

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

2 回答 2

0

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

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

于 2020-08-12T13:03:53.157 回答
0

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

Redis Cluster:可以设置多个主从节点。Redis 将在 master 关闭时处理故障转移。

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

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

于 2020-08-04T10:23:02.453 回答