云原生应用配置中心简述
在传统巨型单体应用纷纷转向细粒度微服务架构的历史进程中,构造云原生应用配置中心是微服务化不可缺少的一个系统组件,在这种背景下中心化的配置服务即配置中心应运而生。
配置中心概述
配置中心,是用来统一管理项目中所有配置的系统,保存应用运行过程与环境、业务规则相关的一些变量。这些变量一般和业务侧的服务逻辑无关,而只和当前的环境和特定场景有关,比如不同环境的数据库账号密码以及连接串、第三方服务的调用地址端口、监控系统的采样率、在线商品的基准折扣、特殊功能开关、业务规则参数等。
配置中心的思路是把项目中各种配置、参数、开关全部都放到一个集中的地方进行统一管理,并提供一套标准的接口。当各个服务需要获取配置时,就到配置中心的接口拉取。当配置中心中的各种配置项有更新时,也能通知各个服务实时同步最新的信息,使其动态更新。
配置中心架构
配置中心一般采用 C/S 模式,服务器端负责配置信息的管理运维和配置推送;客户端 SDK 面向不同的应用场景,负责配置信息的订阅及拉取。
配置中心服务器端一般采用分布式架构,其包括以下部分:
服务协议层:用于进行协议转换、鉴权验证等。
一致性管理层:用于配置的一致性管理和配置推送。
配置缓存层:通过分布式缓存提高配置查询和推送效率。
存储层:后台是一个分布式存储,用于存放配置,并具备高性能和高扩展性。
控制台:分布式配置控制台,用于配置管理。
配置中心客户端既提供 Java 语言的 SDK,也提供 RESTful API,以实现跨语言的配置访问。在某些场景下,配置中心提供 agent 来动态替换应用主机上的配置文件,此时配置中心的配置项和配置文件的对应关系需手动指定。
配置中心功能
配置中心的功能大概如下:
1、配置信息的增删改查。
2、配置的导入或导出,方便用户在多环境间同步配置。
3、通过命名空间隔离不同环境配置(开发、测试、预发布、灰度/生产)。
4、变更历史版本管理,让一切操作有据可查,并提供历史版本的回滚。
5、配置推送,可实时或定时推送配置项到所有的集群应用节点。
6、数据安全性,配置中心的访问授权,以及提高敏感配置数据的安全保护。
7、高性能、高可用性,一旦配置中心不能正常提供服务,就可能会导致项目整体故障,因此“高可用”是配置中心一个非常关键的指标。
8、高并发支持,可容纳百万级的配置及网络连接。
配置中心开源组件
ZooKeeperZooKeeper 是一个分布式应用程序协调服务,是谷歌 Chubby 的开源实现。它是一个为分布式应用提供一致性服务的软件,提供的功能包括配置维护、域名服务、分布式同步、组服务等。Dubbo 微服务框架使用 ZooKeeper 作为其服务注册中心;在 Hadoop 集群等场景下,ZooKeeper 同时充当应用配置管理的角色。但是由于它是 CP[Consistency(一致性),Partition Tolerance(分区容错性)]类应用,因此在可用性和性能上都会受到一定的影响。
etcd 是一个高可用的键值存储系统,主要用于配置共享和服务发现。etcd 内部采用 Raft 协议作为一致性算法,它的灵感来自 ZooKeeper 和 Doozer,它使用 Go 语言编写,并通过 Raft 一致性算法处理日志复制,以保证强一致性。etcd 和 ZooKeeper 类似,同样可以用于应用管理配置。但是由于它是强一致的管理类应用,因此其可用性和性能在某些场景会受到一定影响。
Consul 用于实现分布式系统的服务发现、服务隔离、服务配置。每一个功能既可以根据需要单独使用,也可以同时使用所有功能。Consul 既可以用来做分布式服务注册中心,也可以用来做分布式配置中心。Consul 是一个用来实现分布式系统的服务发现与配置的开源工具。
Spring Cloud Config Server 为服务器端和客户端提供了分布式系统的外部配置支持。配置服务器为各应用的所有环境提供了一个中心化的外部配置,配置服务器默认采用 Git 来存储配置信息,Spring Cloud Config Server 不提供可视化的操作界面,配置也不是实时生效的,需要重启或刷新,所以比较适用于小型项目。
Nacos 是目前应用较为广泛的开源配置中心产品。Nacos 除了提供配置中心的功能,还提供动态服务发现、服务共享与管理的功能,以降低服务化改造过程的难度。Nacos 注册中心分为服务器端与客户端,服务器端采用 Java 语言编写,为客户端提供注册发现服务与配置服务;而客户端可以用多语言实现,客户端与微服务嵌套在一起,Nacos 提供 SDK 和 OpenAPI,如果没有 SDK 也可以根据 OpenAPI 手动编写服务注册与发现和配置拉取的逻辑。Nacos 使用起来相对比较简洁,更适用于对性能要求比较高的大规模场景。
Disconf 是百度开源的一个分布式配置中心,是一套完整的基于 ZooKeeper 的分布式配置统一解决方案,依靠 ZooKeeper 的 watch 机制来做配置修改的实时推送。Disconf 包含了客户端 disconf-Client 和管理端 disconf-Web 两个模块,均由 Java 语言实现。Disconf 支持两种开发模式:基于 XML 配置或者基于注解,可完成复杂的配置分布式化。配置信息持久化存储在 MySQL 数据库上。
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于 Spring Boot 和 Spring Cloud 开发,打包后可以直接运行,不需要额外安装 Tomcat 等应用容器。Java 客户端不依赖任何框架,能够运行于所有 Java 运行时环境,同时对 Spring/Spring Boot 环境也有较好的支持。.Net 客户端 不依赖任何框架,能够运行于所有.Net 运行时环境。
至于这些开源组件该如何选择,需要根据企业自己的项目及团队人员来做最优的评估而后用。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/f4997c0370ade0e8aa8e3600d】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论