linux怎么查看本机内存大小
265
2022-09-04
【Go进阶训练营】工程化实践-配置管理
配置文件分类
环境变量(配置) Region、Zone、Cluster、Environment、Color、Discovery、AppID、Host,等之类的环境信息,都是通过在线运行时平台打入到容器或者物理机,供 kit 库读取使用。静态配置 资源需要初始化的配置信息,比如 server、redis、mysql 等,这类资源在线变更配置的风险非常大,我通常不鼓励 on-the-fly 变更,很可能会导致业务出现不可预期的事故,变更静态配置和发布 bianry app 没有区别,应该走一次迭代发布的流程。动态配置 应用程序可能需要一些在线的开关,来控制业务的一些简单策略,会频繁的调整和使用,我们把这类是基础类型(int, bool)等配置,用于可以动态变更业务流的收归一起,同时可以考虑结合类似 来结合使用。全局配置 通常,我们依赖的各类组件、中间件都有大量的默认配置或者指定配置,在各个项目里大量拷贝复制,容易出现意外,所以我们使用全局配置模板来定制化常用的组件,然后再特化的应用里进行局部替换。
配置文件最佳实践
代码更改系统功能是一个冗长且复杂的过程,往往还涉及Review、测试等流程,但更改单个配置选项可能会对功能产生重大影响,通常配置还未经测试。配置的目标:
避免复杂多样的配置简单化努力以基础设施 -> 面向用户进行转变配置的必选项和可选项配置的防御编程权限和变更跟踪配置的版本和应用对齐安全的配置变更:逐步部署、回滚更改、自动回滚
案例
:= &Config{ Addr: "tcp://127.0.0.1:6379", } c.Addr = "tcp://127.0.0.1:6379" //外部可以修改
```go c := new(redis.Config) _ = ApplyYAML(c, loadConfig()) //将配置对象和信息一起处理。 r, _ := redis.Dial(c.Network, c.Address, Options(c)...)}func ApplyYAML(s *redis.Config, yml string) error { js, err := yaml.YAMLToJSON([]byte(yml)) if err != nil { return err } return ApplyJSON(s, string(js))}
复盘
配置文件对于系统来说是不可缺少的。对于单体系统来说,可能只需要将一些文件存储到文件中,yml或者propreties中进行读写操作。然后如果项目比较大,就可能引入配置中心相关的中间件进行配置的管理。这是之前的理解,但是配置文件可以进行细粒度的划分。
环境变量:项目的环境变量,比如Go Env或k8依赖的一些环境变量的配置。 静态变量:项目启动必须的资源比如 mysql/redis 等依赖的初始化信息,一般存储在yml文件中。 动态配置:更多的是一些业务或者系统流程上的开关。这种信息一般存储到配置中心中。 全局配置:可以通过全局配置模版进行处理。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~