环境变量
启动参数
配置文件
基于数据库(把配置信息持久化到数据库中)
1. 缺少权限控制:由于配置能改变程序的行为,不正确的配置甚至能引起灾难,所以对配置的修改必 须有比较完善的权限控制
2. 缺少版本控制:在整个开发过程中,配置会经常发生修改,版本控制非常必要
3. 缺少实时控制:配置发生变化后,需要重启才能生效,费时费力,迫切需要实时生效(热发布)
4. 微服务化和分布式带来的挑战
当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分 割),这样配置就变得非常分散,造成使用和管理难度变大。不仅如此,各个节点服务的配置中难 免会包含很多冗余代码。
同一个应用程序在不同的环境(开发,测试,生产)和不同的集群经常需要有不同的配置,需要能 方便得进行动态切换。
1. Disconf
2014年7月百度开源的配置管理中心,专注于各种「分布式系统配置管理」的「通用组件」和「通 用平台」, 提供统一的「配置管理服务」。目前已经不再维护更新。 https://github.com/knightliao/disconf
2. Spring Cloud Config
2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。 https://github.com/spring-cloud/spring-cloud-config
3. Apollo
2016年5月,携程开源的配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修 改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场 景。 https://github.com/ctripcorp/apollo
4. Nacos
2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。 https://github.com/alibaba/nacos