统一化配置的实现

统一化配置的实现

1.1 配置文件选型

配置文件调研:

java框架常见配置文件:xml

nodejs框架常见配置文件:json

golang框架常见配置文件:json(go-zero),yaml(dubbo-go、k8s)

经过调研,使用yaml文件作为golang框架的配置文件应用较为广泛,并且go语言有解析yaml文件的专用库,yaml配置文件的编写和修改较为方便,支持多种常见结构和数据类型的定义,配置文件内容较为简洁。

最终选择yaml格式作为glory框架的配置文件格式,就在下文称本框架的配置文件为glory.yaml。

1.2 根据环境变量对配置文件的选择

这个是在本阶段最后,开发人员提出的需求,要求使用多个配置文件,通过环境变量的方式,对多种环境:dev、release、test环境进行区分。

由于考虑到产品兼容性问题,将在之后针对这部分内容进行修改。

思路为:配置加载之前,首先从环境变量中读入:GLORY_ENV

从而达到针对多环境的动态兼容。

1.3 配置读入灵活性设计

由于GoOnline是基于k8s管理的微服务,在之前没有框架的时候,都是使用环境变量保存配置,为了兼容已有服务,我决定使用特定字段对同一级别的配置进行标注,被标注的配置会事先从配置文件中读入配置信息,再以读到的字段为key逐一尝试从环境变量读入,如果存在配置则替换。

这样的策略可以保证和GoOnline已有服务配置的兼容。

1.4 中心化配置管理(设计)

在未来,当GoOnline有足够的资源维护一个配置中心例如nacos,可以将启动时根据服务ID从配置中心拉取特定环境配置的逻辑写入框架。