Spring Boot集成Apollo配置中心【开发实践】

一、Apollo简介

1.1 什么是配置

数据库的连接参数、应用的启动参数、一些系统的账号密码等信息,一般都不会在代码中硬编码,而是存储于代码外部的文件中。这些信息被称为配置信息,存储配置信息的文件就是配置文件。程序需要读取配置文件来获取所需的配置信息。

1.2 Apollo是什么

Apollo(阿波罗)是携程开源的一款分布式配置中心(核心功能见后),以键值对的方式来管理配置信息,并提供了Java和.Net原生客户端和开发平台API,部署起来也简单。

1.3 为什么要配置中心

在规范的软件开发中,开发、测试和线上的环境/配置是不同的,一般会使用三套不同的配置。使用配置中心,可以集中管理配置信息,在不同配置之间切换很方便。

对于分布式系统,如果在不同节点上都单独使用一个配置,会使得配置分散不好管理,且这些配置信息冗余。换用分布式的配置中心后,就解决了冗余的问题,且可以集中管理配置。

配置中心相较于一般的配置文件方案,提供了更多的功能。

1.4 Apollo的核心功能(x6)

  • 统一管理不同应用的环境、不同集群的配置
  • 配置修改实时生效(热发布):用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序
  • 版本发布管理:所有的配置发布都有版本概念,从而可以方便的支持配置的回滚
  • 灰度发布支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例
  • 权限管理、发布审核、操作审计:应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。所有的操作都有审计日志,可以方便地追踪问题
  • 客户端配置信息监控:可以在界面上方便地看到配置在被哪些实例使用

1.5 Apollo的基础模型(三步走)

在这里插入图片描述

  1. 使用配置中心修改并发布配置
  2. 配置中心通知Apollo客户端有配置更新
  3. Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用

二、Apollo开发实践

2.1 Apollo管理配置的四个维度

每条配置信息对应一个键值对数据,其属于某个application,并且需要设置对应的environment、cluster和namespace。

2.1.1 application

application是Apollo管理配置的基本单位,一个application对应一个项目,使用appId作为唯一标识。

2.1.2 environment

一个应用可能有多个环境(如开发/测试/线上),不同环境对应的配置一般不同。Apollo提供了四种环境:

  • FAT(Feature Acceptance Test):功能测试环境
  • UAT(User Acceptance Test):集成测试环境
  • DEV(Develop):开发环境(默认环境)
  • PRO(Produce):生产环境

2.1.3 cluster

一个应用可以有多个实例,我们可以对这些实例进行分组管理,每个分组就是一个集群。

2.1.4 namespace

我们可以通过命名空间将不同类型的配置进行分组。如,将MySQL的配置使用一个命名空间,而Redis的配置使用另一个命名空间,这样可以将大量的配置信息分散到不同的分配空间,方便分类管理

命名空间可以分为公共的和私有的,私有的命名空间只对当前应用可见,公共的命名空间在所有应用中共享。

2.2 Spring Boot集成Apollo

2.2.1 原理简介

Spring Boot项目启动时,如果使用了Apollo配置中心,则会在启动前先去配置中心中读取配置信息。使用Spring Boot集成Apollo配置中心,需要先配置Apollo(需要配置的信息见后),告诉Apollo客户端从哪个Apollo服务器读取哪个配置。

Apollo 客户端会把从服务端获取到的配置在本地文件系统缓存一份,当服务不可用或网络不通时,可以从本地恢复配置,不影响应用正常运行。

2.2.2 Spring Boot集成Apollo的流程

  1. 添加Maven依赖
  2. 配置Apollo(详见后)
  3. 加载Apollo的配置(在主启动类上使用@EnableApolloConfig即可,同时可指定环境)
  4. 发布配置(详见后)
  5. 获取配置(使用@Value(${key})注解注入)

2.2.3 配置Apollo

最重要的三个配置:appId,Apollo服务器地址和端口,名称空间
其他三个常用配置:缓存目录,开启预加载,开启Apollo支持日志级别的加载时机

 # appId信息,可以在此处配置,也可以在META-INF/app.properties中配置
 app:
 	id: testAppId

apollo:
	#  Apollo配置中心地址,包括Apollo服务器地址和端口号
	meta: http://config-service-url
	# 配置默认的缓存目录(可选)
	cacheDir: /opt/data/some-cache-dir
	bootstrap:
  		# 是否开启Apollo
    	enabled: true
    	# 使用namespaces指定命名空间,多个namespace之间用逗号隔开
    	# 不指定时会使用默认的namespace
 		namespaces: namespace1,namespace2
 		# 将Apollo加载时机设置为初始化日志系统之前。由于加载时机在初始化日志系统之前,所以不能打印出Apollo的日志信息
 		# 默认加载时机为初始化日志系统之后,此时可以打印Apollo的日志信息,但由于加载时机是在初始化日志系统之后,此时无法对日志配置进行修改
 		eagerLoad:
 			enabled: true

2.3 Apollo:从创建项目到发布配置

  1. 创建项目
    在这里插入图片描述在这里插入图片描述
  2. 创建namespace:点击进入一个项目,选择环境,然后创建namespace
    在这里插入图片描述
  3. 创建一个配置:在namespace列表选择一个namespace,点击“展开/收藏”来展开,然后可以看到该namespace下的配置,并且显示了新增配置等功能(可能会因为权限问题不显示新增配置)
    在这里插入图片描述
    在这里插入图片描述
  4. 发布配置:创建配置后,配置会处于未发布状态,需要发布后才能使用(需要审核)
    在这里插入图片描述

三、Apollo原理介绍

// to do
// 暂时当做工具用就好,原理可以不了解

参考博客推荐

Apollo官网(貌似打不开)
Apollo配置中心教程、详解
Apollo配置中心
Apollo(阿波罗)——携程推出的分布式配置管理中心 & 启动Apollo & SpringBoot集成 & @ConfigurationProperties的使用姿势
SpringBoot 集成 Apollo 配置中心
全网最全的Apollo教程从入门到精通

  • 21
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值