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.tomlk8s会将一个按时间戳生成真正的配置例如..2021_03_30_19_37_00.949542480/prod.toml挂载到prod.toml下。

如果这个时候,你在k8s configmap进行了一次发布配置,那么会重新生成一个新的配置..2021_03_30_20_20_00.334542480/prod.toml挂载到prod.toml下。该挂载行为可以理解为

  1. 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