前言

在上一篇,通过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实现配置灰度发布相关推荐

  1. 基于Nodejs的前端灰度发布方案_20190228

    基于Nodejs的前端灰度发布方案 1. 灰度发布和A/B测试简介 灰度发布 将某个功能灰度发布(逐渐放量)给特定线上人群,避免新功能全量上线带来的风险. 上面的图可以通过两个方面来理解: 蓝色实线和 ...

  2. Apollo配置灰度发布

    所谓灰度发布,就是一部分客户端采用新的配置,一部分采用旧的,待新的配置经过市场检验后再全量发布为最新的配置,实现版本迭代的平滑过渡.

  3. 基于spring cloud 的灰度发布实践_【收藏】基于spring cloud灰度发版方案

    简介 敏捷开发迭代周期短发布快,每周都可能面临版本发版上线,为最大可能的降低对用户的影响提高服务可用率,大部分团队都需要等到半夜做发布和支持.本文就如何基于spring cloud体系做灰度发版改造提 ...

  4. 基于 Nepxion/Discovery 的灰度发布实现

    https://github.com/Nepxion/Discovery/tree/002e957bc8677e69c706ec77c2a98e35bc419402 https://gitee.com ...

  5. springcloud 服务与服务之间实现灰度发布 基于Aspect

    灰度发布定义可查看我上一篇文章:基于zuul实现灰度发布 1.创建工程 创建三个工程:分别为:订单.eureka.user-server (1)order服务 order服务提供方,提供两个服务,端口 ...

  6. 基于Spring Cloud Gateway 和 注册中心实现灰度发布

    什么是灰度发布? 灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式.在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B ...

  7. ASP.NET Core on K8s学习之旅(14)Ingress灰度发布

    [云原生]| 作者/Edison Zhou 这是恰童鞋骚年的第236篇原创文章 上一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和使用,然后我还录了一个快速分享小视频介绍了一 ...

  8. apollo修改配置刷新bean_饮冰三年-人工智能-Python-57-Apollo之04应用 - 逍遥小天狼

    4.1 Apollo工作原理 下图是Apollo架构模块的概览 各模块职责 上图简要描述了Apollo的总体设计,我们可以从下往上看: Config Service提供配置的读取.推送等功能,服务对象 ...

  9. SpringCloud Nacos 实现全链路灰度发布

    实际生产中如有需求变更,并不会直接更新线上服务,最通常的做法便是:切出线上的小部分流量进行体验测试,经过测试后无问题则全面的上线. 这样做的好处也是非常明显,一旦出现了BUG,能够保证大部分的客户端正 ...

最新文章

  1. 51CTO让我成长【我与51CTO的故事】
  2. JavaScript 公有 私有 静态属性和方法
  3. 话说placeholder
  4. linux下source insight安装以及打开
  5. c语言编写服务器的优点,用C语言编写的服务器中记录效率最高的文件是什么?...
  6. SpringCloud 01_单体应用到分布式系统演变过程
  7. osgi cxf_所有OSGi套件的通用CXF请求拦截器
  8. 有什么办法可以判断页面是静态还是动态?_你知道seo到底是什么吗?该怎么优化?...
  9. cocos2d-x中的尺寸之二
  10. 撬动百亿台设备,让物联网“造”起来!
  11. pr导出html,premiere视频导出怎么设置? pr导出高质量视频的教程
  12. python英文情绪识别_Python能识别文字情绪?
  13. 监控Linux磁盘情况,进行邮件告警
  14. Variable used in lambda expression should be final or effectively final 问题的解决和追根溯源
  15. 相对丰度会歪曲实际丰度,联合16S扩增子测序和总菌qPCR获得的绝对丰度可靠吗?...
  16. Ubuntu 安装微信客户端
  17. 分享几个关于UG装配的小问题,干货满满!!!
  18. 软考中项第三章 信息系统集成专业知识
  19. 使用腾讯云轻量应用服务器搭建dplayer播放器弹幕服务器
  20. 嫁人就要嫁程序员,钱多话少死得早!

热门文章

  1. 探究pytorch model.eval()测试效果远差于model.train()
  2. WiFi模块的AP模式和STA模式
  3. 【转帖】视频聊天网站的研究、发展以及趋势
  4. matlab+GMT 画图操作——在画图区域-R外进行图例文字标注
  5. 微信群聊,为什么人数上限500人?
  6. 独热码状态机、SR锁存器延迟模型、移位除法器模型
  7. SAP:常用的T-code 收藏
  8. 从P1到P7——我在淘宝这7年(转)
  9. 【愚公系列】2022年10月 微信小程序-电商项目-小微商户支付后端功能实现(node版)
  10. 这一天,我拿到了华为“天道酬勤”奖,这是我到海外的第十年