在 Nacos 中,ephemeral
参数用于定义服务实例的性质,其设置对于 Nacos 集群的数据一致性有间接影响。
注:以下文章会涉及到CAP理论知识、RAFT协议的知识。可以先参考这两篇文章进行初步了解。
CAP理论相关文章: CAP理论
RAFT协议相关文章:RAFT协议
ephemeral
的作用
ephemeral=false(CP模式)
: 表示创建的是永久实例。永久实例会在 Nacos 服务端进行持久化存储,即使实例离线或出现故障,Nacos 也不会自动删除该实例,而是将其标记为不健康状态。永久实例与服务端的交互采用 HTTP 请求,集群间数据同步使用Raft 协议,健康检查通过服务端的主动探活机制完成。 Raft 协议是保证集群数据一致性的关键!!ephemeral=true(AP模式)
: 表示创建的是临时实例(默认情况)。临时实例不会被持久化存储,依赖于心跳机制来保持存活状态。如果在指定时间内未收到心跳,Nacos 会将该实例标记为不健康,随后删除。临时实例与服务端的交互采用 gRPC 请求,集群间数据同步使用 Distro 协议,健康检查通过 TCP 的 keepalive 机制完成。
实际应用场景
在实际使用中,ephemeral
的设置应根据业务需求进行选择:
- 临时实例: 适用于需要快速弹性扩展、处理流量突增的服务。由于不需要持久化存储,临时实例能够快速注册和注销,灵活应对瞬时的服务需求。
- 永久实例: 更适合需要持续监控和管理实例健康状态的场景。运维人员可以根据永久实例的状态进行预警、扩容等操作。此外,在触发保护阈值时,永久实例即使处于不健康状态,也能起到分流作用,防止服务雪崩。
设置方法
要将实例设置为永久实例,可以在配置中指定 ephemeral=false
。例如,在基于 Spring Cloud 的项目中,可以通过以下方式实现:
spring:
cloud:
nacos:
discovery:
ephemeral: false
总结
虽然 ephemeral=false
主要是为了定义实例的持久化特性,但是当ephemeral=false
时采用的是 Raft 协议让nacos集群保持数据一致性,因此ephemeral=false
与 Nacos 集群的数据一致性有间接关系。