Couchbase java sdk 公开了 3 个方法。当 master 关闭时, getAllReplicas 和 getAnyReplicas 是相关的。一般来说,在调用 Couchbase 进行 HA 设置时应选择什么策略。
如果是我,我只会在正常获取操作失败时才计划获取副本。例如。在
try/catch
的捕获中,和/或在一定次数的重试之后。
Couchbase 复制的工作方式与其他数据库不同:每个数据节点都存储一部分主数据和一部分辅助数据(有关更多详细信息,请参阅文档中的 vBuckets)。因此,如果一个节点出现故障,并不意味着每个主节点都消失了,只是该节点上的主数据消失了。
如果发生故障的节点随后进行了故障转移,那么主数据很快就会从副本中恢复(随后进行重新平衡)。一定要在 Couchbase 文档上查看有关 故障转移/副本/重新平衡的更多信息。
因此,在许多情况下,您可能只需要依赖副本的短暂时间窗口。希望您运行在节点不会经常停机的基础设施上(例如云提供商和适当大小的集群)。但在这些情况(希望非常罕见且短暂)的情况下,您可以回退获取副本。
当 master 宕机时,getAllReplicas 和 getAnyReplicas 是相关的。一般来说,在调用 Couchbase 进行 HA 设置时应选择什么策略
首先应谨慎使用这些。 如果您的原始请求由于集群过载而失败并超时,那么发出更多请求只会使其更加过载。 如果您的应用程序可以容忍 2.5 秒的原始请求加上另一个长达 2.5 秒的请求,那么您最好只在原始请求上设置 5.0 秒的超时,而不发出副本请求。 另外 - 原始请求将是对文档的活动节点的 1 个请求。 随后使用 getAnyReplica 或 getAllReplicas 将向活动节点发出第二个请求,并向持有该文档副本的所有节点发出请求。假设您有 3 个副本,而不是 1 个请求,现在您有 5 个请求,并且您的过载问题将会变得更加严重。因此,我将限制使用 getAllReplicas/getAnyReplica 来处理不表明集群过载的异常。