Skip to content
Charles
Go back

配置中心项目对比

Edit page

配置中心的差别不只在于能不能存 KV,还在配置隔离、变更通知、权限、灰度和回滚。注册发现方案见注册中心项目对比。

本文只比较开源且支持多语言 SDK 或语言无关 API 的方案,不列绑定单一应用框架的组件。

方案对比

方案多语言接入配置能力主要取舍
NacosJava / Go 官方 SDK;其他语言有社区 SDK 和 HTTP API动态配置、监听、历史和灰度配置和注册共用同一控制面
ApolloJava / .NET 原生 SDK;另有多语言 SDK 和 HTTP API应用 / 环境隔离、权限、发布、灰度、回滚需要运维 Apollo 服务与 MySQL
Consul KVHTTP API / Consul Template,语言无关KV、Watch 和模板化配置分发适合轻量配置;不提供完整的应用级发布治理
ZooKeeperJava / C 官方绑定;Go / Python 社区客户端ZNode、Watch,可自行实现配置分发原语型方案,发布、审计和回滚流程需自行实现
Kubernetes ConfigMap / Secret挂载文件、环境变量或 Kubernetes API,语言无关配置作为 Kubernetes 资源挂载或注入进程不自动热加载;治理依赖部署流程
Polaris(北极星)Java、Go、C++、PHP SDK动态配置、版本和灰度发布平台能力和接入方式需要一并评估
etcdgRPC / HTTP JSON API,语言无关一致性 KV、Watch 和事务,可自行实现配置分发环境模型、权限、发布、历史回滚和客户端要自己实现

怎么选

需求优先评估
已经用 Nacos,想复用配置能力Nacos
需要配置控制台、权限、灰度和回滚Apollo
配置随 Kubernetes 工作负载发布ConfigMap / Secret
已有 Polaris 服务治理平台Polaris
已有 Consul,管理轻量参数配置Consul KV
已有 ZooKeeper,需要共享配置与 WatchZooKeeper
自建控制面,能接受自己实现配置治理etcd

ConfigMap 挂载为卷时,内容会在 kubelet 后续同步时更新;进程环境变量不会随 ConfigMap 更新,需要替换 Pod;挂载文件变化后也要由应用主动重读。Kubernetes 更新示例。密钥应使用 Secret,并配置好集群加密与访问控制。

无论选哪种方案,都要先确定配置服务不可用时的启动策略、客户端缓存策略和无法热更新配置的发布方式。


Edit page
Share this post:

Previous Post
注册中心项目对比