配置中心
- eureka 不支持
- consul 支持,但用起来偏麻烦,不太符合springBoot框架的命名风格,支持动态刷新
- nacos 支持,用起来简单,符合springBoot的命名风格,支持动态刷新
注册中心
1.eureka:spring
- 应用内/外:直接集成到应用中,依赖于应用自身完成服务的注册与发现
- ACP原则:遵循AP(可用性+分离容忍)原则,有较强的可用性,服务注册快,但牺牲了必定的一致性。
- 版本迭代:目前已经不进行升级
- 集成支持:只支持SpringCloud集成
- 访问协议:HTTP 雪崩保护:支持雪崩保护
- 界面:英文界面,不符合国人习惯 上手:容易
- consul:
- 应用内/外:属于外部应用,侵入性小
- ACP原则:遵循CP原则(一致性+分离容忍) 服务注册稍慢,因为其一致性致使了在Leader挂掉时从新选举期间真个consul不可用。
- 版本迭代:目前仍然进行版本迭代
- 集成支持:支持SpringCloud K8S集成
- 访问协议:HTTP/DNS
- 雪崩保护:不支持雪崩保护
- 界面:英文界面,不符合国人习惯
- 上手:复杂一点
- nacos:
- 应用内/外:属于外部应用,侵入性小
- ACP原则:通知遵循CP原则(一致性+分离容忍) 和AP原则(可用性+分离容忍)
- 版本迭代:目前仍然进行版本迭代
- 集成支持:支持Dubbo 、SpringCloud、K8S集成
- 访问协议:HTTP/动态DNS/UDP
- 雪崩保护:支持雪崩保护
- 界面:中文界面,符合国人习惯
- 上手:极易,中文文档,案例,社区活跃
功能差别
模块 | Nacos | Eureka | 说明 |
---|---|---|---|
注册中心 | 是 | 是 | 服务治理基本功能,负责服务中心化注册 |
配置中心 | 是 | 否 | Eureka须要配合Config实现配置中心,且不提供管理界面 |
动态刷新 | 是 | 否 | Eureka须要配合MQ实现配置动态刷新,Nacos采用Netty保持TCP长链接实时推送 |
可用区AZ | 是 | 是 | 对服务集群划分不一样区域,实现区域隔离,并提供容灾自动切换 |
分组 | 是 | 否 | Nacos可用根据业务和环境进行分组管理 |
元数据 | 是 | 是 | 提供服务标签数据,例如环境或服务标识 |
权重 | 是 | 否 | Nacos默认提供权重设置功能,调整承载流量压力 |
健康检查 | 是 | 是 | Nacos支持由客户端或服务端发起的健康检查,Eureka是由客户端发起心跳 |
负载均衡 | 是 | 否 | 均提供负责均衡策略,Eureka采用Ribion |
管理界面 | 是 | 否 | Nacos支持对服务在线管理,Eureka只是预览服务状态 |
部署安装
模块 | Nacos | Eureka | 说明 |
---|---|---|---|
MySql | 是 | 否 | Nacos须要采用MySql进行数据进行持久化 |
MQ | 否 | 是 | Eureka须要采用MQ进行配置中心刷新 |
动态刷新 | 是 | 否 | Eureka须要配合MQ实现配置动态刷新,Nacos采用Netty保持TCP长链接实时推送 |
配置中心 | 是 | 否 | Eureka结合Config或者Consul实现配置中心 |
配置文件 | 在线编辑 | 本地文件或者Git远程文件 | Eureka结合Config或者Consul |
集群 | 是 | 是 | Nacos须要配置集群ip再启动 |
稳定及扩展性
模块 | Nacos | Eureka | 说明 |
---|---|---|---|
版本 | 1.0.0 | 1.9.9 | Eureka2.0已中止开发,Nacos处于1.x-2.0开发 |
厂商 | 阿里巴巴 | Netflix | Netflix已长期用于生产,阿里刚起步 |
生产建议 | 否 | 是 | Nacos0.8之前不可用于生产,建议生产采用Nacos1.0,便于节省配置中心集群和服务管理 |
将来发展 | 是 | 否 | Nacos 2.0主要关注在统一服务管理、服务共享及服务治理体系的开放的服务平台的建设 |
选型建议
- 采用Eureka方案的考虑:
- 想用Spring Cloud原生全家桶
- 想用本地文件和Git做为配置管理的,将配置与服务分开管理
- 考虑短时间的稳定性
- 采用Nacos方案的考虑:
- 想在线对服务进行上下线和流量管理
- 不想采用MQ实现配置中心动态刷新
- 不想新增配置中心生产集群
- 考虑引入Spring Cloud Alibaba生态