終于有人把灰度發(fā)布架構(gòu)設(shè)計(jì)講明白了
共 3378字,需瀏覽 7分鐘
·
2024-05-23 14:43
?? 歡迎加入小哈的星球 ,你將獲得: 專屬的項(xiàng)目實(shí)戰(zhàn) / Java 學(xué)習(xí)路線 / 一對(duì)一提問(wèn) / 學(xué)習(xí)打卡 / 每月贈(zèng)書
新項(xiàng)目:仿小紅書(微服務(wù)架構(gòu))正在更新中... , 全棧前后端分離博客項(xiàng)目 2.0 版本完結(jié)啦, 演示鏈接:http://116.62.199.48/ 。全程手摸手,后端 + 前端全棧開發(fā),從 0 到 1 講解每個(gè)功能點(diǎn)開發(fā)步驟,1v1 答疑,直到項(xiàng)目上線。目前已更新了261小節(jié),累計(jì)41w+字,講解圖:1806張,還在持續(xù)爆肝中.. 后續(xù)還會(huì)上新更多項(xiàng)目,目標(biāo)是將Java領(lǐng)域典型的項(xiàng)目都整一波,如秒殺系統(tǒng), 在線商城, IM即時(shí)通訊,Spring Cloud Alibaba 等等,戳我加入學(xué)習(xí),已有1400+小伙伴加入(早鳥價(jià)超低)
今天這篇文章給大家分享一下灰度發(fā)布系統(tǒng)的架構(gòu)設(shè)計(jì),內(nèi)容非常干
灰度發(fā)布的定義
互聯(lián)網(wǎng)產(chǎn)品需要快速迭代開發(fā)上線,又要保證質(zhì)量,保證剛上線的系統(tǒng),一旦出現(xiàn)問(wèn)題可以很快控制影響面,就需要設(shè)計(jì)一套灰度發(fā)布系統(tǒng)
灰度發(fā)布系統(tǒng)的作用,可以根據(jù)配置,將用戶的流量導(dǎo)到新上線的系統(tǒng)上,來(lái)快速驗(yàn)證新的功能,而一旦出現(xiàn)問(wèn)題,也可以馬上的修復(fù),簡(jiǎn)單的說(shuō),就是一套A/B Test系統(tǒng)。
灰度發(fā)布允許帶著bug上線,只要bug不是致命的,當(dāng)然這個(gè)bug是不知道的情況下,如果知道就要很快的改掉
簡(jiǎn)單灰度發(fā)布系統(tǒng)的設(shè)計(jì)
灰度簡(jiǎn)單架構(gòu)如上圖所示,其中的必要組件如下:
-
策略的配置平臺(tái),存放灰度的策略 -
灰度功能的執(zhí)行程序 -
注冊(cè)中心,注冊(cè)的服務(wù)攜帶 ip/Port/name/version
有了上面三個(gè)組件,才算一個(gè)完整的灰度平臺(tái)
灰度的策略
灰度必須要有灰度策略,灰度策略常見的方式有以下幾種
-
基于Request Header進(jìn)行流量切分 -
基于Cookie進(jìn)行流量切分 -
基于請(qǐng)求參數(shù)進(jìn)行流量切分
舉例:根據(jù)請(qǐng)求中攜帶的用戶uid進(jìn)行取模,灰度的范圍是百分之一,那么uid取模的范圍就是100,模是0訪問(wèn)新版服務(wù),模是1~99的訪問(wèn)老版服務(wù)。
灰度發(fā)布策略分為兩類,單策略和組合策略
單策略:比如按照用戶的uid、token、ip進(jìn)行取模
組合策略:多個(gè)服務(wù)同時(shí)灰度,比如我有A/B/C三個(gè)服務(wù),需要同時(shí)對(duì)A和C進(jìn)行灰度,但是B不需要灰度,這個(gè)時(shí)候就需要一個(gè)tag字段,具體實(shí)現(xiàn)在下文詳述
灰度發(fā)布具體的執(zhí)行控制
在上面的簡(jiǎn)單灰度發(fā)布系統(tǒng)架構(gòu)中我們了解到,灰度發(fā)布服務(wù)分為上游和下游服務(wù),上游服務(wù)是具體的執(zhí)行灰度策略的程序,這個(gè)服務(wù)可以是nginx,也可以是微服務(wù)架構(gòu)中的網(wǎng)關(guān)層/業(yè)務(wù)邏輯層,下面我們就來(lái)分析一下不同的上游服務(wù),如何落地
Nginx
如果上游服務(wù)是nginx,那么就需要nginx通過(guò)Lua擴(kuò)展nginx實(shí)現(xiàn)灰度策略的配置和轉(zhuǎn)發(fā),因?yàn)閚ginx本身并不具備灰度策略的執(zhí)行
通過(guò)lua擴(kuò)展實(shí)現(xiàn)了灰度策略的執(zhí)行,但是問(wèn)題又來(lái)了,nginx本身并不具備接收配置管理平臺(tái)的灰度策略,這個(gè)時(shí)候應(yīng)該怎么辦呢?
解決方案:本地部署Agent(需要自己開發(fā)),接收服務(wù)配置管理平臺(tái)下發(fā)的灰度策略,更新nginx配置,優(yōu)雅重啟Nginx服務(wù)
網(wǎng)關(guān)層/業(yè)務(wù)邏輯層/數(shù)據(jù)訪問(wèn)層
只需要集成配置管理平臺(tái)客戶端SDK,接收服務(wù)配置管理平臺(tái)下發(fā)的灰度策略,在通過(guò)集成的SDK進(jìn)行灰度策略的執(zhí)行即可
灰度發(fā)布復(fù)雜場(chǎng)景
下面舉例兩個(gè)稍微復(fù)雜的灰度發(fā)布場(chǎng)景,灰度策略假設(shè)都按照uid取模灰度百分之一的用戶,看一下如何實(shí)現(xiàn)。
場(chǎng)景1:調(diào)用鏈上同時(shí)灰度多個(gè)服務(wù)
功能升級(jí)涉及到多個(gè)服務(wù)變動(dòng),網(wǎng)關(guān)層和數(shù)據(jù)訪問(wèn)層灰度,業(yè)務(wù)邏輯層不變,這個(gè)時(shí)候應(yīng)該如何進(jìn)行灰度?
解決方案:
經(jīng)過(guò)新版本網(wǎng)關(guān)層的請(qǐng)求,全部打上tag T,在業(yè)務(wù)邏輯層根據(jù)tag T進(jìn)行轉(zhuǎn)發(fā), 標(biāo)記Tag T的請(qǐng)求全部轉(zhuǎn)發(fā)到新版數(shù)據(jù)訪問(wèn)層服務(wù)上,沒有tag T的請(qǐng)求全部轉(zhuǎn)發(fā)到老版數(shù)據(jù)訪問(wèn)層上。
場(chǎng)景2:涉及數(shù)據(jù)的灰度服務(wù)
涉及到數(shù)據(jù)的灰度服務(wù),一定會(huì)使用到數(shù)據(jù)庫(kù),使用到數(shù)據(jù)庫(kù)就會(huì)涉及到你使用數(shù)據(jù)庫(kù)前后的表字段不一致,我老版本是A/B/C三個(gè)字段,新版本是A/B/C/D四個(gè)字段。這時(shí)新版的灰度,就不能往老版的數(shù)據(jù)庫(kù)進(jìn)行修改了,這個(gè)時(shí)候就需要把數(shù)據(jù)copy一份出來(lái)做這個(gè)事情了
數(shù)據(jù)庫(kù)其實(shí)并沒有灰度的概念,這個(gè)時(shí)候我們只能把數(shù)據(jù)重新拷貝一份出來(lái)進(jìn)行讀和寫,因?yàn)檫@時(shí)你的寫必須是全量的(雙寫),不能說(shuō)90%的數(shù)據(jù)寫入到老版本,10%的數(shù)據(jù)寫入到新版本,因?yàn)檫@個(gè)時(shí)候你會(huì)發(fā)現(xiàn)兩個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)都不是全量的。
離線全量復(fù)制數(shù)據(jù)的過(guò)程中一定會(huì)有數(shù)據(jù)丟失,這個(gè)時(shí)候就需要業(yè)務(wù)邏輯層寫一份數(shù)據(jù)到MQ中,等數(shù)據(jù)同步完成之后,新版的數(shù)據(jù)訪問(wèn)層再將MQ的數(shù)據(jù)寫入到新版本的DB中,實(shí)現(xiàn)數(shù)據(jù)的一致性,這個(gè)也是引入MQ的主要目的。
灰度過(guò)程中需要對(duì)兩個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行對(duì)比,觀察數(shù)據(jù)是否一致。這樣不管是灰度失敗,放棄新版DB,還是灰度成功切換到新版DB,數(shù)據(jù)都不會(huì)產(chǎn)生丟失。
?? 歡迎加入小哈的星球 ,你將獲得: 專屬的項(xiàng)目實(shí)戰(zhàn) / Java 學(xué)習(xí)路線 / 一對(duì)一提問(wèn) / 學(xué)習(xí)打卡 / 每月贈(zèng)書
新項(xiàng)目:仿小紅書(微服務(wù)架構(gòu))正在更新中... , 全棧前后端分離博客項(xiàng)目 2.0 版本完結(jié)啦, 演示鏈接:http://116.62.199.48/ 。全程手摸手,后端 + 前端全棧開發(fā),從 0 到 1 講解每個(gè)功能點(diǎn)開發(fā)步驟,1v1 答疑,直到項(xiàng)目上線。目前已更新了261小節(jié),累計(jì)41w+字,講解圖:1806張,還在持續(xù)爆肝中.. 后續(xù)還會(huì)上新更多項(xiàng)目,目標(biāo)是將Java領(lǐng)域典型的項(xiàng)目都整一波,如秒殺系統(tǒng), 在線商城, IM即時(shí)通訊,Spring Cloud Alibaba 等等,戳我加入學(xué)習(xí),已有1400+小伙伴加入(早鳥價(jià)超低)
2. 面試官:Spring Boot 的啟動(dòng)原理是什么?
最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊(cè)》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù) Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
PS:因公眾號(hào)平臺(tái)更改了推送規(guī)則,如果不想錯(cuò)過(guò)內(nèi)容,記得讀完點(diǎn)一下“在看”,加個(gè)“星標(biāo)”,這樣每次新文章推送才會(huì)第一時(shí)間出現(xiàn)在你的訂閱列表里。
點(diǎn)“在看”支持小哈呀,謝謝啦
