Nacos AP CP
1. CAP 理论基础
- C(Consistency):一致性,所有节点在同一时间看到的数据完全相同。
- A(Availability):可用性,每次请求都能收到响应(无论成功或失败)。
- P(Partition Tolerance):分区容错性,系统在网络分区时仍能正常工作。
CAP 理论指出:分布式系统无法同时满足 C、A、P,必须选择其中两个。Nacos 提供了 CP 和 AP 两种模式,允许用户根据业务场景选择不同的一致性策略。
2. Nacos 的 CP 模式
核心特点
- 强一致性:数据更新后,所有节点在同一时间看到相同的数据(通过 Raft 协议实现)。
- 可用性妥协:当发生网络分区或 leader 选举时,可能暂时不可用。
适用场景
- 配置管理:如数据库连接串、关键参数配置,要求数据绝对一致。
- 元数据管理:如服务注册中心的元数据(服务列表、权重等)。
配置方式
在 Nacos 中,通过修改
cluster.conf
或 API 切换为 CP 模式:java
// 注册服务时指定使用 CP 模式
NacosNamingService naming = NamingFactory.createNamingService(serverAddr);
naming.registerInstance("serviceName", "192.168.1.1", 8080, "DEFAULT", true); // 最后参数为 true 表示使用 CP 模式
3. Nacos 的 AP 模式
核心特点
- 高可用性:任何请求都能得到响应,即使存在数据不一致。
- 弱一致性:数据更新后,允许不同节点在一段时间内看到不同数据(最终一致)。
适用场景
- 服务发现:服务实例的注册与发现,允许短暂的不一致(如注册延迟几秒)。
- 容忍临时错误:如电商大促时,服务注册的轻微延迟不影响整体功能。
配置方式
java
// 注册服务时指定使用 AP 模式(默认)
NacosNamingService naming = NamingFactory.createNamingService(serverAddr);
naming.registerInstance("serviceName", "192.168.1.1", 8080); // 默认使用 AP 模式
4. CP 与 AP 的对比
特性 | CP 模式(强一致性) | AP 模式(高可用性) |
---|---|---|
一致性保障 | 强一致性(Raft 协议) | 最终一致性 |
可用性 | 可能因 leader 选举或分区暂时不可用 | 始终可用(允许数据延迟同步) |
实现协议 | Raft | Distro(Nacos 自研协议) |
典型场景 | 配置管理、元数据存储 | 服务注册与发现 |
数据冲突处理 | 写操作需多数节点确认,冲突时拒绝 | 冲突时后写入的数据覆盖先写入的数据 |
5. 如何选择?
-
优先一致性(CP):
若业务不能容忍数据不一致(如金融交易、配置中心),选择 CP 模式。例如:java// 获取配置时使用 CP 模式 ConfigService configService = ConfigFactory.createConfigService(serverAddr); String content = configService.getConfig("dataId", "group", 5000, true); // 最后参数为 true 表示使用 CP 模式
-
优先可用性(AP):
若业务允许短暂不一致(如服务发现、流量控制),选择 AP 模式。例如:java// 服务发现默认使用 AP 模式 List<Instance> instances = naming.getAllInstances("serviceName");
6. 实际应用示例
配置中心(CP 模式)
java
// 获取配置(CP 模式确保所有节点数据一致)
ConfigService configService = ConfigFactory.createConfigService(serverAddr);
String config = configService.getConfig("db.properties", "DEFAULT_GROUP", 3000);
服务注册与发现(AP 模式)
java
// 服务注册(AP 模式允许短暂不一致,提高可用性)
NacosNamingService naming = NamingFactory.createNamingService(serverAddr);
naming.registerInstance("order-service", "192.168.1.100", 8080);
总结
- CP 模式:适合对一致性要求极高的场景(如配置管理),牺牲部分可用性。
- AP 模式:适合对可用性要求极高的场景(如服务发现),容忍最终一致性。
Nacos 通过灵活切换模式,满足不同业务场景的需求,这也是其相比其他注册中心(如 Eureka、ZooKeeper)的优势之一。