0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用apollo实现配置文件的灰度发布?

jf_ro2CN3Fa 来源:CSDN 2023-02-16 10:09 次阅读

前言

在上一篇,通过dubbo的版本号控制,我们实现了一个服务的简单的灰度发布过程,在真实的项目环境中,灰度发布的应用场景是很多的,服务接口存在灰度的需求,本篇再介绍另一种比较常见的灰度需求场景,即配置文件的灰度发布

配置文件简介

如今,微服务架构盛行下,不管是互联网大厂,还是规模较小的团队,都有一套自己的中央配置文件管理中心,各个微服务模块都能接入中央配置文件,进行统一的使用,现如今,配置中心的技术选择也是非常丰富的,比如springcloud技术栈下的springcloud-config,springcloud-alibaba下自研的nacos,传统的配置中心disconf,携程出品的apollo等,都是不错的选择

不管外观如何变化,他们的作用都是相同的,那就是统一管理微服务的配置,起到统一管理,统一维护,统一调度的作用

在这种形势下,实际的业务中就出现了这么一种情况,配置管理中心可能存在针对不同环境,比如 dev,test,prod等环境各自的一套配置文件,但实际上,这还是无法满足某些场景下的要求的

举例来说,像上一篇介绍的,服务接口需要做到灰度使用,利用不同的版本号进行控制,从而达到新功能和之前稳定版本功能做到动态切换的效果,而配置文件是控制程序中某些业务的关键信息,同样需要做到类似的功能,这种情况下该如何实现呢?

在一些开源的配置管理技术框架中,它们为了满足这样的需求就实现了类似的灰度发布的功能,本篇将介绍如何利用apollo实现配置文件的灰度发布

apollo简介与快速搭建

关于apollo的介绍,网上有大量的参考和学习资料,主要想说的是,apollo是一款非常好用的配置管理工具,应用于各个大中小型互联网公司,可以无缝整合到很多java框架下,代码侵入性低,而配置文件修改后实时生效是它的一大亮点

快速搭建过程

本篇基于centos7或者阿里云

1、安装java环境

安装JDK1.8及以上(省略)

2、安装mysql

安装mysql5.7及以上(省略)

3、github下载源码包

下载Release版本

f7f5a114-ad3d-11ed-bfe3-dac502259ad0.png

其主要的目录文件如上图所示,首先,在mysql中执行下sql目录下的两个sql脚本,apollo的运行依赖数据库

f8058c1e-ad3d-11ed-bfe3-dac502259ad0.png

4、将解压后的文件上传至服务器

修改demo.sh,主要修改连接数据库信息

f8143110-ad3d-11ed-bfe3-dac502259ad0.png

修改内容如下,主要将数据库连接信息配置成自己的数据库IP即可

f8293e2a-ad3d-11ed-bfe3-dac502259ad0.png

修改完毕后,启动apollo,只需要执行命令: sh demo.sh start 即可,等待服务启动完毕之后,浏览器访问:http://IP:8070,然后输入默认登录用户名和密码 apollo/admin 即可进入apollo主页面

f84d481a-ad3d-11ed-bfe3-dac502259ad0.png

关于apollo的具体使用本文不做过多赘述,有兴趣的同学可以深入学习

5、apollo创建一个项目

为了后文使用演示,这里快速创建一个app,和一个namespace,创建也非常简单,只需要点击 "创建应用"即可

f86b40cc-ad3d-11ed-bfe3-dac502259ad0.png

默认是application应用,当然可以通过创建新的namespace的方式新建一个新的namespace,这个是为了各自的项目管理自身的配置文件进行使用,为了方便测试,这里我们在application应用下,创建了一个叫做dubbo的namespace,随机添加几个配置文件,即key/value的数据

友情提醒:注意appId,工程中后面有使用

以上的准备工作到此结束

演示工程步骤

提前准备一个springboot工程

1、添加核心依赖

主要包括springboot和apollo客户端连接依赖


org.springframework.boot
spring-boot-starter-web
2.2.1.RELEASE



com.ctrip.framework.apollo
apollo-client
1.5.1

2、配置文件

server:
port:8001

#连接apollo的配置
app:
id:provider
apollo:
meta:http://IP:8080
bootstrap:
enabled:true
namespaces:dubbo

3、apollo连接测试

在工程中写一个接口,测试一下是否能从apollo上面读取到配置,测试读取一下下面这个配置

f883578e-ad3d-11ed-bfe3-dac502259ad0.png

@Value("${uyun:default}")
privateStringuyunname;

@GetMapping("/getUyunName")
publicStringgetUyunName(){
returnuyunname;
}

启动项目,浏览器访问一下该接口,可以看到能成功访问到apollo,说明与apollo的整合完毕

f89850f8-ad3d-11ed-bfe3-dac502259ad0.png

如何解决本文开篇谈到的使用apollo实现配置文件的灰度发布呢?回到apollo,我们注意到这里有个“灰度”按钮

f8abacde-ad3d-11ed-bfe3-dac502259ad0.png

这是什么意思呢?简单理解就是,使用这个灰度按钮的功能,可以对当前的配置文件进行一份拷贝,类似备份,同时我们可以对灰度的配置进行添加,修改,删除等操作,而灰度文件的修改不会影响到主配置文件,下面我们对 "dubbo"这个配置文件做一下灰度的配置吧

点击“灰度”

f8c1bdb2-ad3d-11ed-bfe3-dac502259ad0.pngf8c1bdb2-ad3d-11ed-bfe3-dac502259ad0.png

可以看到,灰度创建的内容是对主配置文件的全量拷贝,当然灰度配置也需要像主配置文件那样进行发布之后才能使用的,点击发布,弹出一个需要我们设置灰度规则的框

f916792e-ad3d-11ed-bfe3-dac502259ad0.pngf9262e0a-ad3d-11ed-bfe3-dac502259ad0.png

简单解释下,既然是灰度发布的配置文件,自然不能让所有的客户端访问到,这里apollo提供了几种配置规则方式,这里我选择了直接配置IP的方式,将本机的IP填进去,然后保存,再次发布即可

这个规则的含义就是,当前dubbo的这个灰度配置文件,只能允许我的本机IP进行访问,接下来就让我们做一下验证吧

4、灰度配置测试

在工程中新增一个接口,同时给灰度配置文件中新增2个配置

f939426a-ad3d-11ed-bfe3-dac502259ad0.png

@Value("${name:default}")
privateStringuname;

@Value("${age:default}")
privateStringage;

@GetMapping("/getUyunName")
publicStringgetUyunName(){
returnuyunname;
}

将本机的其中一个项目启动,访问新增的这个接口,可以发现,能够成功访问到灰度文件中的配置信息

f94913de-ad3d-11ed-bfe3-dac502259ad0.png

为了验证灰度的功能,我们将项目打成jar包,部署到服务器上,服务器的IP不在灰度配置列表中,理论上是无法访问到 age 这个新增的配置的

f95f5054-ad3d-11ed-bfe3-dac502259ad0.png

成功启动后,浏览器直接访问云服务器上面的这个接口,这时,可以发现,同样的接口,由于IP未配置在灰度规则中,将无法读取到age这个配置的值

f97dd7d6-ad3d-11ed-bfe3-dac502259ad0.pngf991635a-ad3d-11ed-bfe3-dac502259ad0.png

踩坑提醒

如果使用的是阿里云或者其他云服务器部署apollo的时候,本地项目连接apollo的时候会一直报apollo的连接超时问题,这个问题的解决办法是,在启动的配置vm中,添加如下参数即可

-Dapollo.configService=http://apollo部署的主机IP:8080
f9a52d40-ad3d-11ed-bfe3-dac502259ad0.png







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    102994
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    26003
  • Apollo
    +关注

    关注

    5

    文章

    326

    浏览量

    18292

原文标题:基于 Apollo 实现配置灰度发布

文章出处:【微信号:芋道源码,微信公众号:芋道源码】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于libconfig进行配置文件解析

    本文介绍基于libconfig进行配置文件解析
    的头像 发表于 06-08 10:18 844次阅读
    基于libconfig进行<b class='flag-5'>配置文件</b>解析

    如何利用蓝牙串行端口配置文件实现无线引导加载?

    如何利用蓝牙串行端口配置文件实现无线引导加载?
    发表于 05-21 06:10

    ICD配置文件的详细介绍和配置内容的详细概述

    配置文件配置文件利用SCL语言描述变电站设备对象模型后生成的文件,用于在不同厂商的配置工具之间交换配置
    的头像 发表于 06-02 11:16 1.7w次阅读
    ICD<b class='flag-5'>配置文件</b>的详细介绍和<b class='flag-5'>配置</b>内容的详细概述

    FreeRTOS_006_FreeRTOSConfig.h配置文件 (三)

    FreeRTOS_006_FreeRTOSConfig.h配置文件(三)
    的头像 发表于 03-14 11:10 3137次阅读
    FreeRTOS_006_FreeRTOSConfig.h<b class='flag-5'>配置文件</b> (三)

    FreeRTOS_004_FreeRTOSConfig.h配置文件 (一)

    FreeRTOS_004_FreeRTOSConfig.h配置文件(一)
    的头像 发表于 03-14 11:18 2437次阅读
    FreeRTOS_004_FreeRTOSConfig.h<b class='flag-5'>配置文件</b> (一)

    AD8283评估板设计和配置文件

    AD8283评估板设计和配置文件
    发表于 05-31 16:04 9次下载
    AD8283评估板设计和<b class='flag-5'>配置文件</b>

    labview读写配置文件实例分享

    labview读写配置文件实例分享
    发表于 11-01 16:05 40次下载

    配置文件和例程文件的使用

    上期讲述了AMetal平台驱动框架中的硬件层,介绍了硬件层的驱动是如何实现及其硬件层接口的定义,逐渐深入了解AMetal平台。接下来向大家介绍配置文件和例程文件的使用,以此可灵活使用相应外设的资源。
    的头像 发表于 04-07 11:49 1695次阅读
    <b class='flag-5'>配置文件</b>和例程<b class='flag-5'>文件</b>的使用

    教程 2:自定义配置文件示例

    教程 2:自定义配置文件示例
    发表于 03-13 19:33 0次下载
    教程 2:自定义<b class='flag-5'>配置文件</b>示例

    教程 3:构建自定义配置文件

    教程 3:构建自定义配置文件
    发表于 03-15 19:39 0次下载
    教程 3:构建自定义<b class='flag-5'>配置文件</b>

    教程 2:自定义配置文件示例

    教程 2:自定义配置文件示例
    发表于 07-04 20:50 0次下载
    教程 2:自定义<b class='flag-5'>配置文件</b>示例

    教程 3:构建自定义配置文件

    教程 3:构建自定义配置文件
    发表于 07-06 18:49 0次下载
    教程 3:构建自定义<b class='flag-5'>配置文件</b>

    KT142C语音芯片配置文件总是不起作用?配置文件的问题集中归纳

    KT142C语音芯片配置文件总是不起作用?配置文件的问题集中归纳
    的头像 发表于 10-20 15:04 280次阅读
    KT142C语音芯片<b class='flag-5'>配置文件</b>总是不起作用?<b class='flag-5'>配置文件</b>的问题集中归纳

    springboot的全局配置文件有几种

    Spring Boot是一种快速开发框架,其通过提供配置文件实现对应用程序的配置。全局配置文件在Spring Boot中起着非常重要的作用,可以用于
    的头像 发表于 12-03 15:28 484次阅读

    php的配置文件是什么

    PHP的配置文件是一种用于配置PHP解释器的文本文件。它包含了一系列的指令和选项,用于影响PHP的行为和性能。通过修改配置文件,可以改变PHP解释器的默认行为,从而满足不同的需求。 在
    的头像 发表于 12-04 15:55 798次阅读