基于apollo实现配置灰度发布
前言
在上一篇,通过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版本:https://github.com/ctripcorp/apollo/releases
其主要的目录文件如上图所示,首先,在mysql中执行下sql目录下的两个sql脚本,apollo的运行依赖数据库
4、将解压后的文件上传至服务器
修改demo.sh,主要修改连接数据库信息
修改内容如下,主要将数据库连接信息配置成自己的数据库IP即可
修改完毕后,启动apollo,只需要执行命令: sh demo.sh start 即可,等待服务启动完毕之后,浏览器访问:http://IP:8070,然后输入默认登录用户名和密码 apollo/admin 即可进入apollo主页面
关于apollo的具体使用本文不做过多赘述,有兴趣的同学可以深入学习
5、apollo创建一个项目
为了后文使用演示,这里快速创建一个app,和一个namespace,创建也非常简单,只需要点击 "创建应用"即可
默认是application应用,当然可以通过创建新的namespace的方式新建一个新的namespace,这个是为了各自的项目管理自身的配置文件进行使用,为了方便测试,这里我们在application应用下,创建了一个叫做dubbo的namespace,随机添加几个配置文件,即key/value的数据
友情提醒:注意appId,工程中后面有使用
以上的准备工作到此结束
演示工程步骤
提前准备一个springboot工程
1、添加核心依赖
主要包括springboot和apollo客户端连接依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.2.1.RELEASE</version></dependency><dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>1.5.1</version></dependency>
2、配置文件
server:port: 8001#连接apollo的配置
app:id: provider
apollo:meta: http://IP:8080bootstrap:enabled: truenamespaces: dubbo
3、apollo连接测试
在工程中写一个接口,测试一下是否能从apollo上面读取到配置,测试读取一下下面这个配置
@Value("${uyun:default}")private String uyunname;@GetMapping("/getUyunName")public String getUyunName(){return uyunname;}
启动项目,浏览器访问一下该接口,可以看到能成功访问到apollo,说明与apollo的整合完毕
如何解决本文开篇谈到的使用apollo实现配置文件的灰度发布呢?回到apollo,我们注意到这里有个“灰度”按钮
这是什么意思呢?简单理解就是,使用这个灰度按钮的功能,可以对当前的配置文件进行一份拷贝,类似备份,同时我们可以对灰度的配置进行添加,修改,删除等操作,而灰度文件的修改不会影响到主配置文件,下面我们对 "dubbo"这个配置文件做一下灰度的配置吧
点击“灰度”
可以看到,灰度创建的内容是对主配置文件的全量拷贝,当然灰度配置也需要像主配置文件那样进行发布之后才能使用的,点击发布,弹出一个需要我们设置灰度规则的框
简单解释下,既然是灰度发布的配置文件,自然不能让所有的客户端访问到,这里apollo提供了几种配置规则方式,这里我选择了直接配置IP的方式,将本机的IP填进去,然后保存,再次发布即可
这个规则的含义就是,当前dubbo的这个灰度配置文件,只能允许我的本机IP进行访问,接下来就让我们做一下验证吧
4、灰度配置测试
在工程中新增一个接口,同时给灰度配置文件中新增2个配置
@Value("${name:default}")private String uname;@Value("${age:default}")private String age;@GetMapping("/getUyunName")public String getUyunName(){return uyunname;}
将本机的其中一个项目启动,访问新增的这个接口,可以发现,能够成功访问到灰度文件中的配置信息
为了验证灰度的功能,我们将项目打成jar包,部署到服务器上,服务器的IP不在灰度配置列表中,理论上是无法访问到 age 这个新增的配置的
成功启动后,浏览器直接访问云服务器上面的这个接口,这时,可以发现,同样的接口,由于IP未配置在灰度规则中,将无法读取到age这个配置的值
踩坑提醒
如果使用的是阿里云或者其他云服务器部署apollo的时候,本地项目连接apollo的时候会一直报apollo的连接超时问题,这个问题的解决办法是,在启动的配置vm中,添加如下参数即可
-Dapollo.configService=http://apollo部署的主机IP:8080
以上是本篇的全部内容,希望对看到的小伙伴有用哦,最后感谢观看!
基于apollo实现配置灰度发布相关推荐
- 基于Nodejs的前端灰度发布方案_20190228
基于Nodejs的前端灰度发布方案 1. 灰度发布和A/B测试简介 灰度发布 将某个功能灰度发布(逐渐放量)给特定线上人群,避免新功能全量上线带来的风险. 上面的图可以通过两个方面来理解: 蓝色实线和 ...
- Apollo配置灰度发布
所谓灰度发布,就是一部分客户端采用新的配置,一部分采用旧的,待新的配置经过市场检验后再全量发布为最新的配置,实现版本迭代的平滑过渡.
- 基于spring cloud 的灰度发布实践_【收藏】基于spring cloud灰度发版方案
简介 敏捷开发迭代周期短发布快,每周都可能面临版本发版上线,为最大可能的降低对用户的影响提高服务可用率,大部分团队都需要等到半夜做发布和支持.本文就如何基于spring cloud体系做灰度发版改造提 ...
- 基于 Nepxion/Discovery 的灰度发布实现
https://github.com/Nepxion/Discovery/tree/002e957bc8677e69c706ec77c2a98e35bc419402 https://gitee.com ...
- springcloud 服务与服务之间实现灰度发布 基于Aspect
灰度发布定义可查看我上一篇文章:基于zuul实现灰度发布 1.创建工程 创建三个工程:分别为:订单.eureka.user-server (1)order服务 order服务提供方,提供两个服务,端口 ...
- 基于Spring Cloud Gateway 和 注册中心实现灰度发布
什么是灰度发布? 灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式.在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B ...
- ASP.NET Core on K8s学习之旅(14)Ingress灰度发布
[云原生]| 作者/Edison Zhou 这是恰童鞋骚年的第236篇原创文章 上一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和使用,然后我还录了一个快速分享小视频介绍了一 ...
- apollo修改配置刷新bean_饮冰三年-人工智能-Python-57-Apollo之04应用 - 逍遥小天狼
4.1 Apollo工作原理 下图是Apollo架构模块的概览 各模块职责 上图简要描述了Apollo的总体设计,我们可以从下往上看: Config Service提供配置的读取.推送等功能,服务对象 ...
- SpringCloud Nacos 实现全链路灰度发布
实际生产中如有需求变更,并不会直接更新线上服务,最通常的做法便是:切出线上的小部分流量进行体验测试,经过测试后无问题则全面的上线. 这样做的好处也是非常明显,一旦出现了BUG,能够保证大部分的客户端正 ...
最新文章
- 51CTO让我成长【我与51CTO的故事】
- JavaScript 公有 私有 静态属性和方法
- 话说placeholder
- linux下source insight安装以及打开
- c语言编写服务器的优点,用C语言编写的服务器中记录效率最高的文件是什么?...
- SpringCloud 01_单体应用到分布式系统演变过程
- osgi cxf_所有OSGi套件的通用CXF请求拦截器
- 有什么办法可以判断页面是静态还是动态?_你知道seo到底是什么吗?该怎么优化?...
- cocos2d-x中的尺寸之二
- 撬动百亿台设备,让物联网“造”起来!
- pr导出html,premiere视频导出怎么设置? pr导出高质量视频的教程
- python英文情绪识别_Python能识别文字情绪?
- 监控Linux磁盘情况,进行邮件告警
- Variable used in lambda expression should be final or effectively final 问题的解决和追根溯源
- 相对丰度会歪曲实际丰度,联合16S扩增子测序和总菌qPCR获得的绝对丰度可靠吗?...
- Ubuntu 安装微信客户端
- 分享几个关于UG装配的小问题,干货满满!!!
- 软考中项第三章 信息系统集成专业知识
- 使用腾讯云轻量应用服务器搭建dplayer播放器弹幕服务器
- 嫁人就要嫁程序员,钱多话少死得早!
热门文章
- 探究pytorch model.eval()测试效果远差于model.train()
- WiFi模块的AP模式和STA模式
- 【转帖】视频聊天网站的研究、发展以及趋势
- matlab+GMT 画图操作——在画图区域-R外进行图例文字标注
- 微信群聊,为什么人数上限500人?
- 独热码状态机、SR锁存器延迟模型、移位除法器模型
- SAP:常用的T-code 收藏
- 从P1到P7——我在淘宝这7年(转)
- 【愚公系列】2022年10月 微信小程序-电商项目-小微商户支付后端功能实现(node版)
- 这一天,我拿到了华为“天道酬勤”奖,这是我到海外的第十年