首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >微服务之SpringCloud架构第六篇(上)——配置中心(Apollo)

微服务之SpringCloud架构第六篇(上)——配置中心(Apollo)

作者头像
leehao
发布于 2025-02-11 11:20:15
发布于 2025-02-11 11:20:15
9320
举报
文章被收录于专栏:leehaoleehao

随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址…… 并且对配置的期望也越来越高,配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制…… 并且随着采用分布式的开发模式,项目之间的相互引用随着服务的不断增多,相互之间的调用复杂度成指数升高,每次投产或者上线新的项目时苦不堪言,因此需要引用配置中心治理。

开源配置中心

  1. spring-cloud/spring-cloud-config spring出品,可以和spring cloud无缝配合
  2. 淘宝 diamond 已经不维护
  3. disconf java开发,蚂蚁金服技术专家发起,业界使用广泛
  4. ctrip apollo Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,具备规范的权限、流程治理等特性。

配置中心对别

功能特性

我们先从功能层面来对别

功能点

优先级

spring-cloud-config

ctrip apollo

disconf

备注

静态配置管理

高

基于file

支持

支持

动态配置管理

高

支持

支持

支持

统一管理

高

无,需要github

支持

支持

多环境

中

无,需要github

支持

支持

本地配置缓存

高

无

支持

支持

配置锁

中

支持

不支持

不支持

不允许动态及远程更新

配置校验

中

无

无

无

如:ip地址校验,配置

配置生效时间

重启生效,或手动refresh生效

实时

实时

需要结合热加载管理, springcloudconfig需要 git webhook+rabbitmq 实时生效

配置更新推送

高

需要手工触发

支持

支持

配置定时拉取

高

无

支持

配置更新目前依赖事件驱动, client重启或者server端推送操作

用户权限管理

中

无,需要github

支持

支持

现阶段可以人工处理

授权、审核、审计

中

无,需要github

支持

无

现阶段可以人工处理

配置版本管理

高

Git做版本管理

界面上直接提供发布历史和回滚按钮

操作记录有落数据库,但无查询接口

配置合规检测

高

不支持

支持(但还需完善)

实例配置监控

高

需要结合springadmin

支持

支持,可以查看每个配置在哪些机器上加载

灰度发布

中

不支持

支持

不支持部分更新

现阶段可以人工处理

告警通知

中

不支持

支持,邮件方式告警

支持,邮件方式告警

依赖关系

高

不支持

不支持

不支持

配置与系统版本的依赖系统运行时的依赖关系

技术路线兼容性

引入配置中心,需要考虑和现有项目的兼容性,以及是否引入额外的第三方组件。我们的java项目以SpringBoot为主,需要重点关注springboot支持性。

功能点

优先级

spring-cloud-config

ctrip apollo

disconf

备注

SpringBoot支持

高

原生支持

支持

与spring boot无相关

SpringCloud支持

高

原生支持

支持

与spring cloud无相关

客户端支持

低

Java

Java、.Net

java

业务系统侵入性

高

侵入性弱

侵入性弱

侵入性弱,支持注解及xml方式

依赖组件

高

Eureka

Eureka

zookeeper

可用性与易用性

引入配置中心后,所有的应用都需要依赖配置中心,因此可用性需要重点关注,另外管理的易用性也需要关注。

功能点

优先级

spring-cloud-config

ctrip apollo

disconf

备注

单点故障(SPOF)

高

支持HA部署

支持HA部署

支持HA部署,高可用由zookeeper保证

多数据中心部署

高

支持

支持

支持

配置获取性能

高

unkown

unkown(官方说比spring快)

配置界面

中

无,需要通过git操作

统一界面(ng编写)

统一界面

最终选择

  • 支持不同环境(开发、测试、生产)、不同集群
  • 完善的管理系统,权限管理、发布审核、操作审计
  • SpringBoot集成友好 ,较小的迁移成本
  • 配置修改实时生效(热发布)
  • 版本发布管理

综上,ctrip applo是较好的选择方案,最终选择applo。

1、Apollo简介

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

具体参见git:https://github.com/ctripcorp/apollo

2、Apollo编译适配自己的注册中心

Apollo项目中内置了Eureka注册中心,如果我们想使用自己外部独立的注册中心,就要把Apollo项目中的Eureka剥离。

1、下载源代码,地址https://github.com/ctripcorp/apollo,下载后导入到编辑工具中。

2、导入数据库文件,数据库文件在源码srcripts/sql下,两个SQL文件,apolloconfigdb.sql和apolloportaldb.sql。MySQL版本需要在5.7以上。

3、修改源代码。

(1)、apollo-configservice工程修改

1.ConfigServiceApplication类的@EnableEurekaServer注解改成@EnableEurekaClient

2.bootstrap.yml中的eureka.client.serviceUrl.defaultZone配置为独立的Eureka Server的地址

(2)、apollo-adminservice工程修改

1.bootstrap.yml中的eureka.client.serviceUrl.defaultZone配置为独立的Eureka Server的地址

(3)、eureka-server工程修改

1.把apollo-configservice工程中com.ctrip.framework.apollo.metaservice下的相关类移到

eureka-server工程下面,并解决相关的编译问题。

2.pom.xml引入apollo-core依赖,如:

代码语言:javascript
复制
<dependency>

    <groupId>com.ctrip.framework.apollo</groupId>

    <artifactId>apollo-core</artifactId>

    <version>RELEASE/version>

</dependency>

3.application.yml中的eureka.client.fetchRegistry要设为true

4.将apollo-portal模块下的apollo-env.properties 中dev.meta或其他环境地址修改为configservice对应地址

代码语言:javascript
复制
local.meta=http://localhost:8080
dev.meta=http://localhost:8080
fat.meta=http://localhost:8080
uat.meta=http://localhost:8080
lpt.meta=http://localhost:8080
pro.meta=http://localhost:8080
dev.meta=hhttp://localhost:8080

5.打包 运行项目根目录scripts下 build.bat 或build.sh,执行maven打包命令,打好的jar包在相应模块target目录下。

6.修改数据库

将apolloconfigdb serverconfig表的eureka.service.url的value值改为自己的eureka服务地址,如http://localhost:8761/eureka/ 将apolloportaldb serverconifg表的apollo.portal.envs的value指改为第三步的对应的地址,如:dev,如果有多个环境用逗号分隔。

7.运行

分别将Apollo-configservice、Apollo-adminservice、Apollo-Portal模块下target中的zip包拷贝出来,解压后,修改里面配置文件的信息application-github.properties、apollo-env.properties,包括数据库连接信息、环境信息。如:

代码语言:javascript
复制
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
代码语言:javascript
复制
local.meta=http://localhost:8080
dev.meta=http://localhost:8080
fat.meta=http://localhost:8080
uat.meta=http://localhost:8080
lpt.meta=http://localhost:8080
pro.meta=http://localhost:8080

然后依次在configservice、adminservice、portal下的scripts目录中运行startup.sh。启动无误后,查看注册中心eureka:

说明已经注册到我们自己的eureka中。

再次访问配置中心Apollohttp://localhost:8070/,输入用户名密码apollo/admin,进入potrtal管理页面:

至此,配置中心服务端改造以及搭建基本完成,下一篇介绍配置中心客户端的使用,包括配置获取、配置同步、更新、以及配置管理等。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 开源配置中心
  • 配置中心对别
    • 功能特性
    • 技术路线兼容性
    • 可用性与易用性
  • 最终选择
  • 1、Apollo简介
  • 2、Apollo编译适配自己的注册中心
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档