Consul 是 HashiCorp 公司推出的开源服务网格解决方案,提供以下核心功能:
- 服务发现:服务注册与发现,支持 HTTP 和 DNS 接口
- 健康检查:多种健康检查方式,自动剔除不健康服务
- KV 存储:分布式键值存储,用于配置管理
- 多数据中心:原生支持多数据中心部署
- 安全通信:支持 TLS 加密和 ACL 访问控制
| 组件 | 说明 |
|---|
| Agent | Consul 的核心进程,运行在每个节点上 |
| Server | 存储数据、参与 Raft 共识的节点 |
| Client | 转发请求到 Server 的轻量级节点 |
| Datacenter | 数据中心,包含多个 Server 和 Client |
服务是 Consul 的核心抽象,包含:
{
"ID": "user-service-1",
"Name": "user-service",
"Tags": ["primary", "v1"],
"Address": "192.168.1.100",
"Port": 8080,
"Meta": {
"version": "1.0.0"
},
"Check": {
"HTTP": "http://192.168.1.100:8080/health",
"Interval": "10s"
}
}
| 类型 | 说明 | 示例 |
|---|
| Script | 执行脚本检查 | /bin/check.sh |
| HTTP | HTTP 请求检查 | http://localhost:8080/health |
| TCP | TCP 连接检查 | localhost:8080 |
| TTL | 主动上报检查 | 服务定期调用 API |
| gRPC | gRPC 健康检查 | localhost:8080 |
# 写入配置
consul kv put config/database/host 192.168.1.100
# 读取配置
consul kv get config/database/host
# 列出所有配置
consul kv get -recurse config/
# 策略定义
service "user-*" {
policy = "write"
}
key_prefix "config/" {
policy = "read"
}
| 特性 | Consul | Eureka |
|---|
| CAP | CP | AP |
| 一致性协议 | Raft | 无(最终一致) |
| 健康检查 | 多种方式 | 仅心跳 |
| KV 存储 | 支持 | 不支持 |
| 多数据中心 | 原生支持 | 不支持 |
| 维护状态 | 活跃 | 停止更新 |
| 特性 | Consul | Zookeeper |
|---|
| 语言 | Go | Java |
| 协议 | HTTP/DNS | TCP |
| 健康检查 | 内置多种 | 需自己实现 |
| UI | 内置 Web UI | 无 |
| 学习曲线 | 较低 | 较高 |
| 特性 | Consul | Nacos |
|---|
| 出品方 | HashiCorp | 阿里巴巴 |
| CAP | CP | AP/CP 可切换 |
| 配置管理 | KV 存储 | 专业配置中心 |
| 生态 | 多语言 | Java 生态更好 |
- 需要多数据中心支持
- 需要丰富的健康检查方式
- 需要 KV 存储做配置管理
- 多语言微服务环境
- 需要 DNS 接口访问服务
- 纯 Java 技术栈(可考虑 Nacos)
- 对可用性要求极高(CP 模型)
- 已有成熟的配置中心
Consul 的核心优势:
- 功能全面:服务发现 + 配置管理 + 健康检查
- 多数据中心:原生支持跨数据中心部署
- 健康检查:多种检查方式,灵活配置
- 多语言支持:HTTP/DNS 接口,语言无关
- 安全性:ACL + TLS 加密