配置中心
- 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生態