目录
背景分析
我们知道,除了代码之外,
软件还有一些配置信息,(比如数据库的用户名和密码),
还有一些我们不想写死在代码里的东西,(例如线程池的大小,队列长度等运行参数,以及日志级别,算法策略等)
还有一些是软件运行环境的参数,(例如java内存的大小,应用启动的参数,包括操作系统的一些参数配置)
所有的这些东西,我们都叫做软件配置。
以前我们把这些软件配置写在一个配置文件中,(就像windows下的ini文件或者是linux下的conf文件)
然而,在分布式系统下,这样的方式就变得非常不好管理,并且容易出错。(例如生产环境下的项目现在正在运行,此时修改了配置文件,我们需要让这些配置文件生效,就必须重启服务器)
但重启是不是会带来系统服务短时间的暂停,从而影响用户体验呢?还有可能会带来经济上的很大损失(例如双11重启下服务)。基于这样的背景,配置中心诞生了。
配置中心的概述
配置中心最基础的功能就是存储一个键值对,用户发布一个配置(configKey),然后客户端获取这个配置项(configValue);
进阶的功能就是当某个配置项发生变更时,不停机就可以动态刷新服务内部的配置项,例如,在生产环境上我们可能把我们的日志级别调整为 error 级别,但是,在系统出问题我们希望对它 debug 的时候,我们需要动态的调整系统的行为的能力,把日志级别调整为 debug 级别。
还有,当你设计一个电商系统时,设计大促预案一定会考虑,同时涌进来超过一亿人并发访问的时候,假如系统是扛不住的,你会怎么办,
在这个过程中我们一般会采用限流,降级。系统的限流和降级本质上来讲就是从日常的运行态切换到大促态的一个行为的动态调整,这个本身就是配置起到作用的一个相应的场景。
配置中心的选型
在面向分布式的微服务系统中,如何通过更高效的配置管理方式,实现微服务系统架构持续“无痛”的演进,并动态调整和控制系统的运行时态,配置中心的选型和设计起着举足轻重的作用。
市场上主流配置中心有Apollo(携程开源),nacos(阿里开源),Spring Cloud Config(Spring Cloud 全家桶成员)。
我们在对这些配置中心进行选型时重点要从产品功能、使用体验、实施过程和性能等方面
进行综合考量。本次我们选择nacos,此组件不仅提供了注册中心,还具备配置中心的功能。