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