在這篇文章中,我將會通過一個實際案例來介紹一下F5灰度發(fā)布解決方案的具體應用場景。
01X 用戶為什么要使用灰度發(fā)布
在金融科技化的時代,灰度發(fā)布可以讓應用更快地進行迭代,以更高的頻率發(fā)布到市場,同時還能減輕運維人員的負擔,并且給用戶帶來更好的體驗。X用戶提供的服務已經覆蓋了企業(yè)和個人的方方面面,新功能的發(fā)布、第三方接口的變更、問題的修復都會需要進行應用的升級。但是對于運維部門來說,應用變更總是伴隨著風險和壓力。X用戶每次互聯(lián)網(wǎng)應用更新均需要在23:00停機后才能進行,經常在凌晨才能完成上線,每次上線投產后由于時間窗口較晚、驗證時間較短,有些場景需要隔日驗證,無法對所有場景進行覆蓋,無法保證互聯(lián)網(wǎng)應用的穩(wěn)定性。同時對于業(yè)務部門和開發(fā)部門來說,新的產品和功能是否能被大部分用戶接受,也存在一定的風險。
灰度發(fā)布,就是解決以上矛盾的一個最好方法。
02X 用戶灰度發(fā)布建設實踐
實現(xiàn)灰度發(fā)布最重要的兩個問題是灰度策略如何制定,以及灰度策略如何執(zhí)行。
灰度策略其實就是決定什么樣的請求應該路由到我們的灰度版本上來,以什么為依據(jù)。在上一篇文章中我們提過通常有以下幾種策略:基于地域、基于用戶信息、基于交易類型。
綜合考慮后,X用戶最終采用根據(jù)用戶進行灰度的策略,根據(jù)不同應用的特點設置用戶白名單,基于用戶白名單進行灰度發(fā)布。
灰度策略執(zhí)行方面,X用戶針對互聯(lián)網(wǎng)應用已經建設了部署平臺,另外X用戶所有的互聯(lián)網(wǎng)應用都通過F5負載均衡器進行交付?;赬用戶現(xiàn)狀,決定采用部署平臺和負載均衡配合的方式實現(xiàn)灰度發(fā)布。在負載均衡設備上預設好灰度標志,由部署平臺通過F5的API控制負載均衡的灰度標志,當進入灰度狀態(tài)時,負載均衡設會將白名單用戶的交易請求分發(fā)至灰度版本應用服務器。
灰度標志
是由部署平臺調用負載均衡設備的API并存入負載均衡設備的表內,根據(jù)預定義,不同的灰度標志狀態(tài)代表負載均衡設備執(zhí)行不同的分流策略。
灰度標志狀態(tài)有4種狀態(tài):
客戶端+資源包模式(手機APP類應用)
總體方案如下圖:
主要分為以下幾個步驟:
·生成白名單:工作人員從應用系統(tǒng)后管導入白名單,白名單存入業(yè)務系統(tǒng),此時白名單并未生效。
·部署平臺執(zhí)行灰度發(fā)布操作:在灰度發(fā)布之前調用F5接口,更新F5灰度標志為C,此時阻止新交易發(fā)送至新版本所在服務器。
·部署平臺開始發(fā)布新版本服務,發(fā)布完成后部署平臺調用F5接口更新F5灰度標志為B,并向業(yè)務系統(tǒng)發(fā)送接口,更新白名單為可用。
·客戶端發(fā)送版本查詢交易,服務方根據(jù)白名單返回對應版本信息以及灰度特征碼COOKIE至請求方。
·F5根據(jù)客戶端請求交易中的灰度特征碼對交易進行路由。
·部署平臺執(zhí)行灰度同步操作:在灰度同步之前調用F5接口,更新F5灰度標志為D,此時新交易全部發(fā)送至灰度版所在服務器;部署平臺開始同步新版本服務,同步·完成后部署平臺調用F5接口更新F5灰度標志為A,此時F5正常分配路由。
·撤銷灰度版本:部署平臺執(zhí)行灰度撤銷操作,在灰度撤銷之前調用F5接口,更新F5灰度標志為C,此時新交易全部發(fā)送至常規(guī)版所在服務器;部署平臺開始撤銷新版本服務,撤銷完成后部署平臺調用F5接口更新F5灰度標志為A,此時F5正常分配路由。
·無客戶端模式(Web瀏覽器類應用)
·總體方案如下圖:
無客戶端模式與客戶端模式步驟基本相同,區(qū)別只是在于第四步,無客戶端模式會在用戶進行登錄交易時進行白名單匹配。
03F5 配置
以F5的視角看,X用戶灰度發(fā)布的整體邏輯如下:
灰度標示保存在F5的data_group中,部署平臺通過REST API控制F5設備上的灰度標示。
F5的分發(fā)邏輯由以下iRule實現(xiàn):
修改F5灰度狀態(tài)標示data_group的API示例如下:
API路徑:
https://x.x.x.x/mgmt/tm/ltm/data-group/internal/hd_data_group
API方法:PATCH
API Body:
04 結語
本文通過一個具體案例像大家介紹了F5灰度發(fā)布解決方案的實際應用場景,希望能對大家有所啟發(fā),如果您的企業(yè)或組織也正在或準備使用灰度發(fā)布技術,可以參考本文所提到的案例,也歡迎您聯(lián)系F5,進行更多的交流和探討。