Couchbase中get、getAllReplicas、getAnyReplicas对比及高可用调用策略选择
Couchbase Java SDK 高可用部署下的读取调用策略
首先明确Java SDK三类核心读取方法的定位:get()(常规主节点读取)、getAnyReplica()(优先返回第一个响应的副本数据)、getAllReplicas()(返回所有副本节点的全量数据),高可用场景下的选择策略可按业务要求分层选择:
- 常规稳定集群场景优先走默认
get()方法:优先读取主节点数据,可保证数据强一致性,性能也最优,是绝大多数业务的首选方案。 - 可用性优先、允许最终一致的业务,采用「
get()失败兜底调用getAnyReplica()」的策略:先尝试读主节点,当主节点宕机、请求超时或返回不可用错误时,自动降级调用getAnyReplica(),SDK会并行请求所有存活的副本节点,返回最快响应的副本数据,能最大程度降低请求失败率,同时额外延迟开销最低,适合商品展示、用户个性化推荐、非核心状态查询等对数据一致性敏感度不高的业务。 - 有自定义数据校验、冲突解决需求的场景使用
getAllReplicas():该方法会返回所有副本节点的完整数据列表,你可以自行比对多副本数据差异、做自定义冲突修复,适合对数据准确性要求高、需要自行解决主备切换数据不一致问题的场景,但因为要等待所有副本响应,整体请求延迟更高,不适合作为通用高可用兜底方案。
注意:所有副本读取方法返回的都是最终一致数据,会存在和主节点数据的同步延迟,强一致性要求的业务(如支付状态查询、库存扣减校验)不建议直接使用副本读取兜底,可搭配短时间多次重试主节点、调高集群持久化配置的方案提升可用性。
内容的提问来源于stack exchange,提问作者best wishes
相关产品推荐
相关产品推荐

