4 加载配置
4.1 介绍
一个微服务项目启动,通过flag
指定的--config
或者环境变量确定了配置路径后,需要加载该配置,读取配置内容。
以下列出了配置的基本概念
- 配置分类
- 文件配置
- 本地文件
- 挂载文件(k8s configmap)
- 远程配置
- etcd
- nacos
- consul
- k8s config (map, secret) api
- 文件配置
- 配置方式:是否监听配置
- 配置属性:静态配置、动态配置
- 配置格式: toml、json、yaml、等等
4.2 配置分类
4.2.1 本地文件配置
本地文件配置,直接读取即可
4.2.2 挂载文件配置(k8s configmap)
k8s configmap如果采用挂载文件配置方式,其介绍如下。
例如你启动了一个应用app --config=prod.toml
,k8s
会将一个按时间戳生成真正的配置例如..2021_03_30_19_37_00.949542480/prod.toml
挂载到prod.toml
下。
如果这个时候,你在k8s configmap
进行了一次发布配置,那么会重新生成一个新的配置..2021_03_30_20_20_00.334542480/prod.toml
挂载到prod.toml
下。该挂载行为可以理解为
ln -sfn /data/config/..2021_03_30_20_37_00.949542480/prod.toml /data/config/prod.toml
该方式,可以使k8s配置中心实现起来特别简单
4.2.3 远程配置
远程配置可以保证配置不落盘,通过api
的方式,可以确保应用有该配置的权限,并且获取配置时候能够保证其安全性。
因为文件配置有后缀名可以很方便区分配置格式。而远程配置会丢失该信息,所以我们通常会在远程配置里不仅要存入配置内容还要有配置格式,当然你还可以存入配置元数据,方便以后扩展使用。
4.2.4 k8s config
- k8s configmap api
- k8s config secret api
4.3 监听配置(todo)
4.3.1 本地文件监听
特别简单,不讲了
4.3.3 挂载文件配置监听(k8s configmap)
挂载监听,需要找真实路径,todo
4.3.4 远程配置监听
- 长连接广播推送(grpc stream) todo
- 长轮询(http polling) todo
4.4 配置属性(todo)
4.4.1 静态配置
- 有状态配置,例如redis,mysql,他们有连接池
4.4.2 动态配置
- 无状态配置
- 原子锁,更改配置
- map,更改配置
- struct,更改配置
4.5 配置格式(todo)
- toml
- yaml
- json