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

栏目: Go · 发布时间: 7年前

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

最近有使用携程开源的 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)
}

参考资料:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机程序设计艺术:第4卷 第4册(双语版)

计算机程序设计艺术:第4卷 第4册(双语版)

Donald E.Knuth / 苏运霖 / 机械工业出版社 / 2007-4 / 42.00元

关于算法分析的这多卷论著已经长期被公认为经典计算机科学的定义性描述。迄今已出版的完整的三卷组成了程序设计理论和实践的惟一的珍贵源泉,无数读者都赞扬Knuth的著作对个人的深远影响。科学家们为他的分析的美丽和优雅所惊叹,而从事实践的程序员们已经成功地应用他的“菜谱式”的解到日常问题上,所有人都由于Knuth在书中所表现出的博学、清晰、精确和高度幽默而对他无比敬仰。   为开始后续各卷的写作并更......一起来看看 《计算机程序设计艺术:第4卷 第4册(双语版)》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试