前言
在上一篇,通過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版本
其主要的目錄文件如上圖所示,首先,在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客戶端連接依賴
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上面讀取到配置,測試讀取一下下面這個配置
@Value("${uyun:default}") privateStringuyunname; @GetMapping("/getUyunName") publicStringgetUyunName(){ returnuyunname; }
啟動項目,瀏覽器訪問一下該接口,可以看到能成功訪問到apollo,說明與apollo的整合完畢
如何解決本文開篇談到的使用apollo實現配置文件的灰度發布呢?回到apollo,我們注意到這里有個“灰度”按鈕
這是什么意思呢?簡單理解就是,使用這個灰度按鈕的功能,可以對當前的配置文件進行一份拷貝,類似備份,同時我們可以對灰度的配置進行添加,修改,刪除等操作,而灰度文件的修改不會影響到主配置文件,下面我們對 "dubbo"這個配置文件做一下灰度的配置吧
點擊“灰度”
可以看到,灰度創建的內容是對主配置文件的全量拷貝,當然灰度配置也需要像主配置文件那樣進行發布之后才能使用的,點擊發布,彈出一個需要我們設置灰度規則的框
簡單解釋下,既然是灰度發布的配置文件,自然不能讓所有的客戶端訪問到,這里apollo提供了幾種配置規則方式,這里我選擇了直接配置IP的方式,將本機的IP填進去,然后保存,再次發布即可
這個規則的含義就是,當前dubbo的這個灰度配置文件,只能允許我的本機IP進行訪問,接下來就讓我們做一下驗證吧
4、灰度配置測試
在工程中新增一個接口,同時給灰度配置文件中新增2個配置
@Value("${name:default}") privateStringuname; @Value("${age:default}") privateStringage; @GetMapping("/getUyunName") publicStringgetUyunName(){ returnuyunname; }
將本機的其中一個項目啟動,訪問新增的這個接口,可以發現,能夠成功訪問到灰度文件中的配置信息
為了驗證灰度的功能,我們將項目打成jar包,部署到服務器上,服務器的IP不在灰度配置列表中,理論上是無法訪問到 age 這個新增的配置的
成功啟動后,瀏覽器直接訪問云服務器上面的這個接口,這時,可以發現,同樣的接口,由于IP未配置在灰度規則中,將無法讀取到age這個配置的值
踩坑提醒
如果使用的是阿里云或者其他云服務器部署apollo的時候,本地項目連接apollo的時候會一直報apollo的連接超時問題,這個問題的解決辦法是,在啟動的配置vm中,添加如下參數即可
-Dapollo.configService=http://apollo部署的主機IP:8080

審核編輯:劉清
-
JAVA
+關注
關注
20文章
2984瀏覽量
106762 -
MySQL
+關注
關注
1文章
844瀏覽量
27479 -
Apollo
+關注
關注
5文章
346瀏覽量
18687
原文標題:基于 Apollo 實現配置灰度發布
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
探討PROE的配置文件——系統配置文件config.pro
配置文件和例程文件的使用

評論