文章24 | 阅读 12806 | 点赞0
之前在讨论服务端实例注册时已经看到了部分数据一致性同步的相关内容。 以下两篇把这个课题单独拿出来讨论一下。
Nacos内部使用AP、CP两种一致性方案,如果实例是临时的,则是AP,如果是永久的,则是CP。
一致性服务接口是ConsistencyService,我们看一下它的类图:
其中左半部分是AP,右半部分是CP。中间的DelegateConsistencyServiceImpl是一个代理类,通过它来确定是使用AP还是CP:
@DependsOn("ProtocolManager")
@Service("consistencyDelegate")
public class DelegateConsistencyServiceImpl implements ConsistencyService {
/**
* 持久一致性服务
*/
private final PersistentConsistencyService persistentConsistencyService;
/**
* 临时一致性服务
*/
private final EphemeralConsistencyService ephemeralConsistencyService;
public DelegateConsistencyServiceImpl(PersistentConsistencyService persistentConsistencyService,
EphemeralConsistencyService ephemeralConsistencyService) {
this.persistentConsistencyService = persistentConsistencyService;
this.ephemeralConsistencyService = ephemeralConsistencyService;
}
private ConsistencyService mapConsistencyService(String key) {
// com.alibaba.nacos.naming.iplist.ephemeral.
return KeyBuilder.matchEphemeralKey(key) ? ephemeralConsistencyService : persistentConsistencyService;
}
...
}
mapConsistencyService方法用来选择具体使用什么方式的。就是判断key是否以com.alibaba.nacos.naming.iplist.ephemeral.开头,如果是就是AP,否则都是CP。
关于AP和CP实现,画一个流程图:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_19414183/article/details/112468193
内容来源于网络,如有侵权,请联系作者删除!