几乎每个项目中都涉及到配置参数或配置文件,如何避免硬编码,通过代码外的配置,来提高可变参数的安全性、时效性,弹性化配置显得尤其重要。本篇就带你一起聊聊软件项目的配置问题,特别是微服务架构风格下的配置问题。
参数配置的演变
早期软件开发时,当然也包括现在某些小伙伴开发时,存在硬编码的情况,将一些可变参数写死在代码中。弊端也显而易见,当参数变更时,必须重新构建编译代码,维护成本相当高。
后来,业界形成规则,将一些可变参数抽取出来,形成多种格式的配置文件,如 properties、yml、json、xml 等等,将这些参数集中管理起来,发生变更时,只需要更新配置文件即可,不再需要重新编码代码、构建发布代码块,明显比硬编码强大太。弊端也有:
- 关键信息暴露在配置文件中,安全性低。
- 配置文件变更后,服务也面临重启的问题
再接着出现了分布式配置,将配置参数从项目中解耦出来,项目使用时,及时向配置中心获取或配置中心变更时向项目中推送,优势很明显:
- 省去了关键信息暴露的问题
- 配置参数无须与代码模块耦合在一起,可以灵活的管理权限,安全性更高
- 配置可以做到实时生效,对一些规则复杂的代码场景很有帮助
- 面对多环境部署时,能够轻松应对
微服务场景下,我们也更倾向于采用分布式配置中心的模式,来管理配置,当服务实例增多时,完全不用担心配置变得复杂。
开源组件介绍
Spring Cloud Config 就是 Spring Cloud 项目下的