15|配置和环境(上):配置服务中的设计思路
叶剑峰
该思维导图由 AI 生成,仅供参考
你好,我是轩脉刃。
经过前面几节课对框架的改造,我们能很方便在 hade 框架中创造一个定时任务,或者一个 Web 服务了。但是随着开始编写业务,你会发现,业务中有大量的配置项,比如数据库的用户名密码、缓存 Redis 的 IP 和端口、第三方调用的地址等。如何通过统一的方法快速获取到这些配置项,就是今天要讨论的内容。
当你看到获取配置项这个需求,第一个反应是不是要创建一个读取配置文件的服务。但是,一个程序获取配置项只有读取配置文件这个方法么?其实不是的,获取配置项的方法有很多,读取本地配置文件、读取远端配置服务、获取环境变量,都是获取配置项的方法。
获取远端配置服务是通过一个远程调用来获取配置信息的方法,它依赖于远端的服务提供。而读取本地配置文件和获取环境变量,是我们通过进程本身获取配置项最常用的方法,这节课就为框架增加这两种获取配置项的能力。
环境变量获取配置思路分析
在现在服务越来越容器化的时代,环境变量越来越重要。因为一个服务一旦被封装为 Docker 镜像,镜像就会被部署在不同的环境中。如何区分不同的环境呢?在容器内部已经把程序、配置文件都进行了打包,唯一能在不同环境变化的就是环境变量了。
所以顾名思义,环境变量也就是为不同环境准备的,不同环境有不同的设置。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了在框架中设计配置服务的思路和方法,重点讨论了获取配置项的多种方法,包括读取本地配置文件、远程调用获取配置信息以及获取环境变量。文章强调了在容器化时代环境变量的重要性,并介绍了在Golang中通过os标准库的os.Environ()方法获取环境变量的实现方式。此外,还提到了使用默认环境变量文件来设置默认值的普遍做法,并介绍了如何在框架中设计环境变量服务的接口和具体实现。接口设计包括获取当前环境、判断环境变量是否存在、获取某个环境变量以及获取所有环境变量。具体实现则包括读取本地默认.env文件和运行环境变量,并将其保存到map中。文章还围绕获取配置这一功能点,设计了环境变量服务和配置文件服务,强调了环境变量在现代架构设计中的重要性。整体而言,本文通过实际代码和思路分析,为读者展示了如何在框架中设计和实现配置服务,为读者提供了一种快速获取配置项的方法。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》,新⼈⾸单¥59
《手把手带你写一个 Web 框架》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- Tokamak在根据文章进行编码后, 运行程序的时候发现程序会一直卡在获取锁的地方。 调试了很久才发现是因为 EnvProvider 的Boot()中调用了MustMake, 会再一次获取锁, 会导致死锁。 死锁的原因是: main.go 中的Bind() 会先获取锁, 使用的是defer 释放锁, 在Bind() 中由于会调用Boot(), EnvProvider的Boot()中也会去获取锁, 导致再次获取锁时会失败,因此会卡住. 解决方法是: 将Bind()中的锁释放改为 hade.lock.Unlock() 直接释放,尽量让锁的占用时间最小。2022-02-1737
- qinsi12 factor的建议是配置存储在环境变量中,甚至都不建议使用配置文件。这里似乎是需要一个配置中心:启动容器的时候从配置中心拉取配置注入到容器的环境变量中,而容器中的应用只需要读取环境变量就好了。2021-10-2152
- 牛玉富看来,还是用yaml的多2022-01-13
收起评论