前言
在上一篇,通過(guò)dubbo的版本號(hào)控制,我們實(shí)現(xiàn)了一個(gè)服務(wù)的簡(jiǎn)單的灰度發(fā)布過(guò)程,在真實(shí)的項(xiàng)目環(huán)境中,灰度發(fā)布的應(yīng)用場(chǎng)景是很多的,服務(wù)接口存在灰度的需求,本篇再介紹另一種比較常見(jiàn)的灰度需求場(chǎng)景,即配置文件的灰度發(fā)布
配置文件簡(jiǎn)介
如今,微服務(wù)架構(gòu)盛行下,不管是互聯(lián)網(wǎng)大廠(chǎng),還是規(guī)模較小的團(tuán)隊(duì),都有一套自己的中央配置文件管理中心,各個(gè)微服務(wù)模塊都能接入中央配置文件,進(jìn)行統(tǒng)一的使用,現(xiàn)如今,配置中心的技術(shù)選擇也是非常豐富的,比如springcloud技術(shù)棧下的springcloud-config,springcloud-alibaba下自研的nacos,傳統(tǒng)的配置中心disconf,攜程出品的apollo等,都是不錯(cuò)的選擇
不管外觀如何變化,他們的作用都是相同的,那就是統(tǒng)一管理微服務(wù)的配置,起到統(tǒng)一管理,統(tǒng)一維護(hù),統(tǒng)一調(diào)度的作用
在這種形勢(shì)下,實(shí)際的業(yè)務(wù)中就出現(xiàn)了這么一種情況,配置管理中心可能存在針對(duì)不同環(huán)境,比如 dev,test,prod等環(huán)境各自的一套配置文件,但實(shí)際上,這還是無(wú)法滿(mǎn)足某些場(chǎng)景下的要求的
舉例來(lái)說(shuō),像上一篇介紹的,服務(wù)接口需要做到灰度使用,利用不同的版本號(hào)進(jìn)行控制,從而達(dá)到新功能和之前穩(wěn)定版本功能做到動(dòng)態(tài)切換的效果,而配置文件是控制程序中某些業(yè)務(wù)的關(guān)鍵信息,同樣需要做到類(lèi)似的功能,這種情況下該如何實(shí)現(xiàn)呢?
在一些開(kāi)源的配置管理技術(shù)框架中,它們?yōu)榱藵M(mǎn)足這樣的需求就實(shí)現(xiàn)了類(lèi)似的灰度發(fā)布的功能,本篇將介紹如何利用apollo實(shí)現(xiàn)配置文件的灰度發(fā)布
apollo簡(jiǎn)介與快速搭建
關(guān)于apollo的介紹,網(wǎng)上有大量的參考和學(xué)習(xí)資料,主要想說(shuō)的是,apollo是一款非常好用的配置管理工具,應(yīng)用于各個(gè)大中小型互聯(lián)網(wǎng)公司,可以無(wú)縫整合到很多java框架下,代碼侵入性低,而配置文件修改后實(shí)時(shí)生效是它的一大亮點(diǎn)
快速搭建過(guò)程
本篇基于centos7或者阿里云
1、安裝java環(huán)境
安裝JDK1.8及以上(省略)
2、安裝mysql
安裝mysql5.7及以上(省略)
3、github下載源碼包
下載Release版本
其主要的目錄文件如上圖所示,首先,在mysql中執(zhí)行下sql目錄下的兩個(gè)sql腳本,apollo的運(yùn)行依賴(lài)數(shù)據(jù)庫(kù)
4、將解壓后的文件上傳至服務(wù)器
修改demo.sh,主要修改連接數(shù)據(jù)庫(kù)信息
修改內(nèi)容如下,主要將數(shù)據(jù)庫(kù)連接信息配置成自己的數(shù)據(jù)庫(kù)IP即可
修改完畢后,啟動(dòng)apollo,只需要執(zhí)行命令: sh demo.sh start 即可,等待服務(wù)啟動(dòng)完畢之后,瀏覽器訪(fǎng)問(wèn):http://IP:8070,然后輸入默認(rèn)登錄用戶(hù)名和密碼 apollo/admin 即可進(jìn)入apollo主頁(yè)面
關(guān)于apollo的具體使用本文不做過(guò)多贅述,有興趣的同學(xué)可以深入學(xué)習(xí)
5、apollo創(chuàng)建一個(gè)項(xiàng)目
為了后文使用演示,這里快速創(chuàng)建一個(gè)app,和一個(gè)namespace,創(chuàng)建也非常簡(jiǎn)單,只需要點(diǎn)擊 "創(chuàng)建應(yīng)用"即可
默認(rèn)是application應(yīng)用,當(dāng)然可以通過(guò)創(chuàng)建新的namespace的方式新建一個(gè)新的namespace,這個(gè)是為了各自的項(xiàng)目管理自身的配置文件進(jìn)行使用,為了方便測(cè)試,這里我們?cè)赼pplication應(yīng)用下,創(chuàng)建了一個(gè)叫做dubbo的namespace,隨機(jī)添加幾個(gè)配置文件,即key/value的數(shù)據(jù)
友情提醒:注意appId,工程中后面有使用
以上的準(zhǔn)備工作到此結(jié)束
演示工程步驟
提前準(zhǔn)備一個(gè)springboot工程
1、添加核心依賴(lài)
主要包括springboot和apollo客戶(hù)端連接依賴(lài)
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連接測(cè)試
在工程中寫(xiě)一個(gè)接口,測(cè)試一下是否能從apollo上面讀取到配置,測(cè)試讀取一下下面這個(gè)配置
@Value("${uyun:default}") privateStringuyunname; @GetMapping("/getUyunName") publicStringgetUyunName(){ returnuyunname; }
啟動(dòng)項(xiàng)目,瀏覽器訪(fǎng)問(wèn)一下該接口,可以看到能成功訪(fǎng)問(wèn)到apollo,說(shuō)明與apollo的整合完畢
如何解決本文開(kāi)篇談到的使用apollo實(shí)現(xiàn)配置文件的灰度發(fā)布呢?回到apollo,我們注意到這里有個(gè)“灰度”按鈕
這是什么意思呢?簡(jiǎn)單理解就是,使用這個(gè)灰度按鈕的功能,可以對(duì)當(dāng)前的配置文件進(jìn)行一份拷貝,類(lèi)似備份,同時(shí)我們可以對(duì)灰度的配置進(jìn)行添加,修改,刪除等操作,而灰度文件的修改不會(huì)影響到主配置文件,下面我們對(duì) "dubbo"這個(gè)配置文件做一下灰度的配置吧
點(diǎn)擊“灰度”
可以看到,灰度創(chuàng)建的內(nèi)容是對(duì)主配置文件的全量拷貝,當(dāng)然灰度配置也需要像主配置文件那樣進(jìn)行發(fā)布之后才能使用的,點(diǎn)擊發(fā)布,彈出一個(gè)需要我們?cè)O(shè)置灰度規(guī)則的框
簡(jiǎn)單解釋下,既然是灰度發(fā)布的配置文件,自然不能讓所有的客戶(hù)端訪(fǎng)問(wèn)到,這里apollo提供了幾種配置規(guī)則方式,這里我選擇了直接配置IP的方式,將本機(jī)的IP填進(jìn)去,然后保存,再次發(fā)布即可
這個(gè)規(guī)則的含義就是,當(dāng)前dubbo的這個(gè)灰度配置文件,只能允許我的本機(jī)IP進(jìn)行訪(fǎng)問(wèn),接下來(lái)就讓我們做一下驗(yàn)證吧
4、灰度配置測(cè)試
在工程中新增一個(gè)接口,同時(shí)給灰度配置文件中新增2個(gè)配置
@Value("${name:default}") privateStringuname; @Value("${age:default}") privateStringage; @GetMapping("/getUyunName") publicStringgetUyunName(){ returnuyunname; }
將本機(jī)的其中一個(gè)項(xiàng)目啟動(dòng),訪(fǎng)問(wèn)新增的這個(gè)接口,可以發(fā)現(xiàn),能夠成功訪(fǎng)問(wèn)到灰度文件中的配置信息
為了驗(yàn)證灰度的功能,我們將項(xiàng)目打成jar包,部署到服務(wù)器上,服務(wù)器的IP不在灰度配置列表中,理論上是無(wú)法訪(fǎng)問(wèn)到 age 這個(gè)新增的配置的
成功啟動(dòng)后,瀏覽器直接訪(fǎng)問(wèn)云服務(wù)器上面的這個(gè)接口,這時(shí),可以發(fā)現(xiàn),同樣的接口,由于IP未配置在灰度規(guī)則中,將無(wú)法讀取到age這個(gè)配置的值
踩坑提醒
如果使用的是阿里云或者其他云服務(wù)器部署apollo的時(shí)候,本地項(xiàng)目連接apollo的時(shí)候會(huì)一直報(bào)apollo的連接超時(shí)問(wèn)題,這個(gè)問(wèn)題的解決辦法是,在啟動(dòng)的配置vm中,添加如下參數(shù)即可
-Dapollo.configService=http://apollo部署的主機(jī)IP:8080

審核編輯:劉清
-
JAVA
+關(guān)注
關(guān)注
20文章
2989瀏覽量
109559 -
MySQL
+關(guān)注
關(guān)注
1文章
859瀏覽量
27912 -
Apollo
+關(guān)注
關(guān)注
5文章
348瀏覽量
18852
原文標(biāo)題:基于 Apollo 實(shí)現(xiàn)配置灰度發(fā)布
文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
探討PROE的配置文件——系統(tǒng)配置文件config.pro
ICD配置文件的詳細(xì)介紹和配置內(nèi)容的詳細(xì)概述

Python進(jìn)行配置文件的教程免費(fèi)下載

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

評(píng)論