在微服务架构的系列文章中, 前面已经通过文章《微服务架构之「服务网关 」》介绍过了在微服务中服务网关的原理和应用, 今天这篇文章我们继续来聊一聊微服务中另外一个重要模块:「 配置中心 」. 后面还会继续介绍 服务框架, 服务监控, 服务治理等. 还是那句话, 只有将这些基础设施弄清楚了, 微服务实践的道路才能走的稳, 走的远.
「配置中心」, 顾名思义, 就是用来统一管理项目中所有配置的系统. 虽然听起来很简单, 但也不要小瞧了这个模块. 如果一个中型互联网项目, 不采用配置中心的模式, 一大堆的各类配置项, 各种不定时的修改需求, 一定会让开发同学非常头疼且管理十分混乱. 我认为甚至可以直接用 "一个项目中是否有无采用「配置中心」" 这一粗略的条件, 来判断一个互联网研发团队是否规范和成熟.
一, 为什么需要「配置中心」?
我们先来看看在没有「配置中心」的传统项目中, 我们是怎么处理各类配置参数问题的:
一般是静态化配置. 大多数在项目中单独写一个配置文件, 例如 "config.conf", 然后将各类 参数配置, 应用配置, 环境配置, 安全配置, 业务配置 都写到这个文件里. 当项目代码逻辑中需要使用配置的时候, 就从这个配置文件中读取. 这种做法虽然简单, 但如果参数需要修改, 就非常的不灵活, 甚至需要重启运行中的项目才能生效. 相信大多数开发同学都深有体会.
配置文件无法区分环境. 由于配置文件是放在项目中的, 但是我们项目可能会有多个环境, 例如: 测试环境, 预发布环境, 生产环境. 每一个环境所使用的配置参数理论上都是不同的, 所以我们在配置文件中根据不同环境配置不同的参数, 这些都是手动维护, 在项目发布的时候, 极其容易因开发人员的失误导致出错.
配置文件过于分散. 如果一个项目中存在多个逻辑模块独立部署, 每个模块所使用的配置内容又不相同, 传统的做法是会在每一个模块中都放一个配置文件, 甚至不同模块的配置文件格式还不一样. 那么长期的结果就是配置文件过于分散混乱, 难以管理.
配置修改无法追溯. 因为采用的静态配置文件方式, 所以当配置进行修改之后, 不容易形成记录, 更无法追溯是谁修改的, 修改时间是什么, 修改前是什么内容. 既然无法追溯, 那么当配置出错时, 更没办法回滚配置了.
上面只是拿配置文件的形式来举例, 有的项目会采用数据库配置, 虽然灵活一点, 但是依旧不能完全解决上述问题. 既然传统的项目配置有这么多弊端, 那我们看看「配置中心」的方案是如何解决这些痛点的:
「配置中心」的思路就是把项目中各种配置, 各种参数, 各种开关, 全部都放到一个集中的地方进行统一管理, 并提供一套标准的接口. 当各个服务需要获取配置的时候, 就来「配置中心」的接口拉取. 当「配置中心」中的各种参数有更新的时候, 也能通知到各个服务实时的过来同步最新的信息, 使之动态更新.
那么, 按照上述思路, 我们理想中的「配置中心」应该具备如下特点:
配置集中管理, 统一标准
配置与应用分离
实时更新
高可用
具有上述特性的「配置中心」是如何解决上面传统配置所面临的问题的呢?
采用 "配置集中管理", 可以很好的解决传统的 "配置文件过于分散" 的问题. 所有的配置都集中在配置中心这一个地方管理, 不需要每一个项目都自带一个, 这样极大的减轻了开发成本.
采用 "配置与应用分离", 可以很好的解决传统的 "配置文件无法区分环境" 的问题, 配置并不跟着环境走, 当不同环境有不同需求的时候, 就到配置中心获取即可, 极大的减轻了运维部署成本.
具备 "实时更新" 的功能, 就是用来解决传统的 "静态化配置" 的问题. 线上系统需要调整参数的时候, 只需要在配置中心动态修改即可.
既然配置都统一管理了, 那配置中心在整个系统中的地位就非常重要了, 一旦配置中心不能正常提供服务, 就可能会导致项目整体故障, 因此 "高可用" 就是配置中心又一个很关键的指标了.
二,「配置中心」的原理与应用?
通过上面的介绍, 其实就可以了解到「 配置中心 」的原理不是很复杂. 其核心功能也不多, 主要是:
实现配置的记录
实现配置的读取, 更新, 取消
实现配置的查看
但是围绕着这几个核心功能, 我们还需要保障高可行, 要实现实时更新, 要能方便的使用, 还希望有权限管理的功能, 操作审计的功能等等, 加上这些周边辅助功能之后, 一个完善的「 配置中心 也就不那么简单了.
我们再来看一下在实际项目中如何去选型和应用:
虽然配置中心的核心原理并不复杂, 我们可以根据原理自己去实现一个配置中心, 但是如果没有特殊需求, 还是不建议重复造轮子了, 毕竟业内已经有很多成熟的开源方案可以直接选用了. 下面就列举几个比较热门的配置中心开源组件给大家参考:
Apollo
Apollo 是由携程开源的分布式配置中心.
Apollo 的特点有很多, 比如: 配置更新之后可以实时生效, 还可以支持灰度发布功能. 并且能对所有的配置进行版本管理, 操作审计等功能, 提供开放平台 API. 另外由于 Apollo 使用的人很多, 所以网上的资料也非常的丰富, 并且 GitHub 上资料也写的很详细.
上面即是 Apollo 的基础模型, 看结构很简单. 但是其功能很多, 之前说过配置中心对高可用的要求很高. 下面可以继续看一下 Apollo 的架构:
更多的 Apollo 资料可以直接去 GitHub 上查看, 可以说官方文档是非常体贴的.
Spring Cloud Config
看名字就知道, 这是 Spring Cloud 中带的配置中心组件. 也正是这个原因, 所以它和 Spring 是无缝集成, 使用起来非常方便. 并且它的配置存储支持 Git, 不过它没有可视化的操作界面, 配置的生效也不是实时的, 需要重启或去刷新. 所以比较适用于小型项目快速上手.
Spring Cloud Config 包含了 Config Client 和 Config Server 两部分, Config Server 实现配置文件的存储, 对外以接口的形式提供获取配置文件, 然后 Config Client 通过这些接口获取数据.
Disconf
Disconf 是由百度开源的分布式配置中心. 其实很多一线大厂都有开源自己的配置中心组件, 这里挑出百度的 Disconf 也是因为网上比较火热, 易用性也还不错, 项目也是托管在 GitHub 上很容易找到. 它是基于 Zookeeper 来实现配置变更后实时通知和生效的.
以上, 就是对微服务架构中「 配置中心」的一些思考.
码字不易啊, 喜欢的话不妨转发朋友, 或点击文章右下角的 "在看" 吧.
来源: https://www.cnblogs.com/jsjwk/p/10880671.html