加入收藏 | 设为首页 | 会员中心 | 我要投稿 孝感站长网 (https://www.0712zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

深度对比三种主流微服务配置中心

发布时间:2019-04-16 00:27:44 所属栏目:外闻 来源:Dockone.io
导读:【编者的话】在撰写这篇技术选型的文章之前,是比较犹豫的。因为,以其中一个开源项目开发者的身份,去写一篇三个开源项目的对比,即便很克制的去客观的比较,也很难有信服力。这就像,既是参赛选手,又想做裁判,观众肯定是不买账的。 但最后,仍然决定去

在实际生产中,配置中心常常需要涉及多环境或者多集群,业务在开发的时候可以将开发环境和生产环境分开,或者根据不同的业务线存在多个生产环境。如果各个环境之间的相互影响比较小(开发环境影响到生产环境稳定性),配置中心可以通过逻辑隔离的方式支持多环境。

Spring Cloud Config支持Profile的方式隔离多个环境,通过在Git上配置多个Profile的配置文件,客户端启动时指定Profile就可以访问对应的配置文件。

Apollo也支持多环境,在控制台创建配置的时候就要指定配置所在的环境,客户端在启动的时候指定JVM参数ENV来访问对应环境的配置文件。

Nacos通过命名空间来支持多环境,每个命名空间的配置相互隔离,客户端指定想要访问的命名空间就可以达到逻辑隔离的作用。

多集群

当对稳定性要求比较高,不允许各个环境相互影响的时候,需要将多个环境通过多集群的方式进行物理隔离。

Spring Cloud Config可以通过搭建多套Config Server,Git使用同一个Git的多个仓库,来实现物理隔离。

Apollo可以搭建多套集群,Apollo的控制台和数据更新推送服务分开部署,控制台部署一套就可以管控多个集群。

Nacos控制台和后端配置服务是部署在一起的,可以通过不同的域名切换来支持多集群。

配置实时推送的对比

当配置变更的时候,配置中心需要将配置实时推送到应用客户端。

Nacos和Apollo配置推送都是基于HTTP长轮询,客户端和配置中心建立HTTP长联接,当配置变更的的时候,配置中心把配置推送到客户端。

深度对比三种主流微服务配置中心

Spring Cloud Config原生不支持配置的实时推送,需要依赖Git的WebHook、Spring Cloud Bus和客户端/bus/refresh端点:

  • 基于Git的WebHook,配置变更触发server端refresh
  • Server端接收到请求并发送给Spring Cloud Bus
  • Spring Cloud Bus接到消息并通知给客户端
  • 客户端接收到通知,请求Server端获取最新配置

深度对比三种主流微服务配置中心

整体比较下来,Nacos和Apollo在配置实时推送链路上是比较简单高效的,Spring Cloud Config的配置推送引入Spring Cloud Bus,链路较长,比较复杂。

部署结构 & 高可用的对比

Spring Cloud Config

Spring Cloud Config包含config-server、Git和Spring Cloud Bus三大组件:

  • config-server提供给客户端获取配置;
  • Git用于存储和修改配置;
  • Spring Cloud Bus通知客户端配置变更;

本地测试模式下,Spring Cloud Bus和config-server需要部署一个节点,Git使用GitHub就可以。在生产环境中,Spring Cloud Config,config-server需要部署至少两个节点。Spring Cloud Bus如果使用RabbitMQ,普通集群模式至少需要两个节点。

Git服务如果使用GitHub就不用考虑高可用问题,如果考虑到安全性要自建Git私有仓库,整体的成本比较高。Web服务可以部署多节点支持高可用,由于Git有数据的一致性问题,可以通过以下的方式来支持高可用:

  • Git+Keepalived冷备模式,当主Git挂了可以马上切到备Git;
  • Git多节点部署,存储使用网络文件系统或者通过DRBD实现多个Git节点的数据同步;

Apollo

Apollo分为MySQL,Config Service,Admin Service,Portal四个模块:

  • MySQL存储Apollo元数据和用户配置数据;
  • Config Service提供配置的读取、推送等功能,客户端请求都是落到Config Service上;
  • Admin Service提供配置的修改、发布等功能,Portal操作的服务就是Admin Service;
  • Portal提供给用户配置管理界面;

本地测试Config Service,Admin Service,Portal三个模块可以合并一起部署,MySQL单独安装并创建需要的表结构。在生产环境使用Apollo,Portal可以两个节点单独部署,稳定性要求没那么高的话,Config Service和Admin Service可以部署在一起,数据库支持主备容灾。

Nacos

Nacos部署需要Nacos Service和MySQL:

  • Nacos对外提供服务,支持配置管理和服务发现;
  • MySQL提供Nacos的数据持久化存储;

单机模式下,Nacos可以使用嵌入式数据库部署一个节点,就能启动。如果对MySQL比较熟悉,想要了解整体数据流向,可以安装MySQL提供给Nacos数据持久化服务。生产环境使用Nacos,Nacos服务需要至少部署三个节点,再加上MySQL主备。

整体来看

Nacos的部署结构比较简单,运维成本较低。Apollo部署组件较多,运维成本比Nacos高。Spring Cloud Config生产高可用的成本最高。

多语言支持的对比

一个公司的各个系统可能语言不尽相同,现在使用的比较多的比如C++,Java,PHP,Python,Nodejs,还有Go等。引入配置中心之后,配置中心要想让多语言的系统都能享受到动态配置的能力,需要支持多语言生态。

多语言支持

Spring Cloud服务于Java生态,一开始只是针对Java微服务应用,对于非Java应用的微服务调用,可以使用Sidecar提供了HTTP API,但动态配置方面还不能很好的支持。

Apollo已经支持了多种语言,并且提供了open API。其他不支持的语言,Apollo的接入成本相对较低。

Nacos支持主流的语言,例如Java、Go、Python、Nodejs、PHP等,也提供了open API。

迁移支持

国内主流的互联网公司仍是以Java为主,除了原生Java SDK,在对整个Java生态,比如Spring Boot和Spring Cloud的支持上,三个产品都是支持的。

(编辑:孝感站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读