我心目中的配置中心应该怎么做?

最近有使用携程开源的 apollo。Golang的客户端的使用用法大概是 agollo.GetStringValue("GRPCAddr", "") 这样。

apollo的好处在于方便管控,热更新。但是实际开发过程中,更新配置非常麻烦,需要去配置中心更新配置,然后发布,然后等待 5-10s等配置热更新,但是通常来说,诸如数据库等配置是不会更新的,因为通常数据库连接池会在程序启动的时候初始化,之后 就不会再更新。此外,使用方式也不是很方便,这样程序中充斥着上面的代码,反而不如 config.GRPCAddr 这样来的简介明了。

所以我心目中的配置中心应当是:

- 遵守 12 factors,所有配置从环境变量中读取
- 配置写在配置文件中例如 `k8s/deploy.yml` 或者 `docker-compose.yml` 中,然后进行加密,对应工具拉起程序之后会把配置
写入环境变量, 程序启动之后会从环境变量读取
- 配置文件需要加密,重要的事情再强调一遍
- 配置使用一个单例,将配置写入到单例的某个属性中

例如Python:

from loka import LokaConfig


class Config(LokaConfig):
    MYSQL_URI = "mysql://root@127.0.0.1:3306"
    LISTEN_PORT = 8080


config = Config()

# below is just for test
print(config.MYSQL_URI, type(config.MYSQL_URI))
print(config.LISTEN_PORT, type(config.LISTEN_PORT))

例如Golang:

main() {
	// Config is test demo
	type Config struct {
		Foo        string
		Bar        string
		Boolean    bool
		ReplicaNum int
	}
	c := Config{Foo: "hello"}

	log.Printf("before, c: %+v", c)
	LoadFromEnv(&c)
	log.Printf("after, c: %+v", c)
}

参考资料:


更多文章
  • frp 源码阅读与分析(一):流程和概念
  • 学习frp源码之简洁的在两个connection之间转发流量
  • 自己动手写一个反向代理
  • 读《债务危机》
  • 从XMonad迁移到i3
  • 服务器IP被ban学到的经验
  • socks5 协议详解
  • 开启HSTS(HTTP Strict Transport Security)
  • 网络乞讨之合并支付宝和微信的收款二维码
  • 从Chrome切换到Firefox
  • nomad简明教程
  • Linux下当笔记本合上盖子之后只使用扩展显示器
  • Ubuntu 18.04 dhcp更换新IP
  • Python中的新式类(new style class)和老式类(old style class)
  • Python Requests 简明教程