首先给大家举个例子,
我的亲身经历,或许大家也深有体会。我曾经做一个项目,这个项目一套代码,卖给了30多个企业客户。也就是说,我们为这30多个企业客户部署的是同一套程序,只是配置不一样而已。
所以我们知道,配置是很重要的:
配置是程序的一部分,配置设计得好的话,程序就会非常灵活、易用。
把易改变的配置,比如选项、开关、阈值、密码等,从代码中独立出来,从外部去加载。
这样做的主要好处有两个,一个是改变配置,不需要重新编译打包应用程序;
第二配置可以做到动态变更。
在这里,我想把配置分析得更透彻一点,让大家都配置有一个深入的理解。
首先,配置从应用程序的使用上讲,可以分为编译时配置,和运行时配置。编译时配置,使用很简单,通常放在配置文件中就可以了。
我们最主要关心的是运行时配置。运行时配置,最常见的,是在运行命令后面指定运行参数,或者事先设置环境变量。这两种方式,简单,但从管理上讲,都不太好,你要设置环境变量,首先你得要有这个权限才行,服务器的环境变量,是你能随便设置的吗?另一种常见方式,就是把配置写在配置文件中,从本地文件中加载。同样,本地文件,它不好管理,修改个配置,你还得登录服务器。
然后我们可能会想到,能不能通过远程读取配置,给一个url就能读取到。于是有些人把配置保存在数据库中,这样就不用登录一个一个服务器去改配置,而且各种不同地方的配置,可以集中管理起来。
能想到通过数据库管理配置,说明你的思路已经进步了,你已经快成为架构师了。但是真正的架构师,肯定不满足于此,虽然我们不用登录服务器了,但是数据库也不是专门用来做这个的啊,而且数据库来管理配置,它的操作也不是特别方便。所以比较好的方式,还是做一个专门管理配置的Web界面。
但是如果每一个项目,都自己写一套配置管理系统,这显然是不科学的。所以,我们要做一个配置管理平台,所有的项目都能直接使用,这是目前最好的办法,一流的IT企业,都有自己的配置管理平台。百度,有disconf,阿里有diamond,携程有apollo,spring-cloud也提供了spring-cloud-config,这些也都开源了,对比下来,我们觉得apollo是最好的,功能很强大,UI界面设计也很简单易用。
关于开源配置中心的选型,参见我的另一篇文章《开源分布式配置中心选型》。