我們的灰度發(fā)布方案

1 背景與解決思路

做灰度發(fā)布,主要有兩個(gè)大的方向

  1. 在代碼中做。一套線(xiàn)上環(huán)境部念,代碼中做開(kāi)關(guān),對(duì)于不同的用戶(hù)走不同的邏輯
  2. 在接入層做氨菇。多套(隔離的)線(xiàn)上環(huán)境儡炼,接入層針對(duì)不同用戶(hù)轉(zhuǎn)發(fā)到不同的環(huán)境中

來(lái)分別看下這兩種方案的優(yōu)缺點(diǎn)

方案 優(yōu)點(diǎn) 缺點(diǎn)
在代碼中做 靈活,粒度細(xì)查蓉;一套代碼(環(huán)境)運(yùn)維成本低 灰度邏輯侵入代碼
在接入層做 無(wú)需(少)侵入代碼乌询;風(fēng)險(xiǎn)小 多套線(xiàn)上環(huán)境,運(yùn)維成本高

脫離具體的應(yīng)用場(chǎng)景談解決方案都是耍流氓豌研。具體到我們的業(yè)務(wù)場(chǎng)景:

  1. 對(duì)線(xiàn)上的質(zhì)量要求高妹田,目前無(wú)單測(cè),QA黑盒測(cè)試鹃共,無(wú)自動(dòng)化
  2. 變更周期長(zhǎng)(可接受)鬼佣,單次迭代功能點(diǎn)多
  3. 流量低峰期在22點(diǎn)后,整體回歸時(shí)間長(zhǎng)霜浴,且存在漏測(cè)情況

可以看到我們要做灰度發(fā)布的主要訴求是保證線(xiàn)上的質(zhì)量晶衷,盡量降低因迭代帶來(lái)的服務(wù)問(wèn)題。而非要針對(duì)于不同的用戶(hù)做AB Test坷随》棵考慮到如果灰度的方案涉及到修改代碼驻龟,則可能引入其他不確定的風(fēng)險(xiǎn)温眉,在此,我們采用第二種翁狐,也就是在接入層做分流的策略类溢。

2 具體實(shí)現(xiàn)方案

2.1 接入層 -> Web層

接入層采用nginx,可以基于IP或cookie的方式進(jìn)行分流露懒,由于我們是商業(yè)ERP系統(tǒng)闯冷,有用戶(hù)登錄的邏輯,自然選擇基于cookie的策略懈词。
就基于cookie的分流策略而言蛇耀,又有兩種實(shí)現(xiàn)方案

  1. nginx維護(hù)Cookie名單文件,每來(lái)一個(gè)請(qǐng)求看Cookie是否在名單中坎弯,做不同的轉(zhuǎn)發(fā)
  2. nginx不維護(hù)Cookie名單文件纺涤,根據(jù)Cookie的特征進(jìn)行轉(zhuǎn)發(fā)

第一種方案的缺點(diǎn)顯而易見(jiàn)译暂,每次請(qǐng)求判斷是否是灰度用戶(hù)時(shí)間復(fù)雜度為O(N);且變更名單撩炊,需要操作接入層服務(wù)外永。我們采用第二種方案,具體的實(shí)現(xiàn)策略

  1. 業(yè)務(wù)中維護(hù)白名單文件(存放在數(shù)據(jù)庫(kù)中)
  2. 在登陸時(shí)拧咳,如果用戶(hù)在名單中則給用set特定標(biāo)識(shí)的Cookie伯顶;退出或Session過(guò)期后Cookie失效
  3. nginx匹配特定Cookie,做轉(zhuǎn)發(fā)

這樣骆膝,調(diào)整灰度的范圍祭衩,只需要操作數(shù)據(jù)庫(kù)即可,無(wú)需重啟服務(wù)谭网。

2.2 Web層 -> 核心層模塊

目前兩層模塊之間的解耦方式是通過(guò)Zookeeper汪厨,對(duì)這部分的灰度發(fā)布的實(shí)現(xiàn),是通過(guò)caller, callee約定一個(gè)固定的節(jié)點(diǎn)名稱(chēng)(可以把具體的版本號(hào)寫(xiě)進(jìn)去)來(lái)實(shí)現(xiàn)愉择。

3 運(yùn)維上的升級(jí)

3.1 維護(hù)灰度的機(jī)器

我們采用${index}.${platform}.${module}來(lái)管理模塊和機(jī)器的對(duì)應(yīng)關(guān)系劫乱,多了一個(gè)灰度的機(jī)器,在${platform}中增加一個(gè)stage平臺(tái)名锥涕,代表實(shí)驗(yàn)環(huán)境衷戈。

實(shí)驗(yàn)環(huán)境也屬于線(xiàn)上環(huán)境,需要增加對(duì)應(yīng)的監(jiān)控层坠。

全流量的機(jī)器不包含實(shí)驗(yàn)環(huán)境的機(jī)器殖妇,獨(dú)立部署,轉(zhuǎn)全后全流量的流量也不會(huì)落到stage機(jī)器上(nginx的upstream.conf文件不用動(dòng))

3.2 建立灰度編譯打包破花、部署任務(wù)

全流量的編譯打包谦趣,和灰度的打出來(lái)的包,是一樣的座每,版本號(hào)也一樣前鹅。

只在灰度部署的任務(wù)中,自動(dòng)更新注冊(cè)節(jié)點(diǎn)名稱(chēng)峭梳。

由于要固定caller, callee的ZK節(jié)點(diǎn)名稱(chēng)舰绘,所以,強(qiáng)制在灰度部署任務(wù)中葱椭,增加一個(gè)stage的標(biāo)記邏輯捂寿。

3.3 nginx的轉(zhuǎn)發(fā)邏輯

增加對(duì)于帶cookie的請(qǐng)求轉(zhuǎn)發(fā)

location / {
    # ...
    if ($http_cookie ~* "SPECIALID.*|$") {
        proxy_pass http://stage-cluster;
    }

    proxy_pass http://default-cluster;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市孵运,隨后出現(xiàn)的幾起案子秦陋,更是在濱河造成了極大的恐慌,老刑警劉巖治笨,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驳概,死亡現(xiàn)場(chǎng)離奇詭異粪小,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)抡句,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)探膊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人待榔,你說(shuō)我怎么就攤上這事逞壁。” “怎么了锐锣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵腌闯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我雕憔,道長(zhǎng)姿骏,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任斤彼,我火速辦了婚禮分瘦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘琉苇。我一直安慰自己嘲玫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布并扇。 她就那樣靜靜地躺著去团,像睡著了一般。 火紅的嫁衣襯著肌膚如雪穷蛹。 梳的紋絲不亂的頭發(fā)上土陪,一...
    開(kāi)封第一講書(shū)人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音肴熏,去河邊找鬼鬼雀。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扮超,可吹牛的內(nèi)容都是我干的取刃。 我是一名探鬼主播蹋肮,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼出刷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了坯辩?” 一聲冷哼從身側(cè)響起馁龟,我...
    開(kāi)封第一講書(shū)人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎漆魔,沒(méi)想到半個(gè)月后坷檩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體却音,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年矢炼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了系瓢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡句灌,死狀恐怖夷陋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胰锌,我是刑警寧澤骗绕,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站资昧,受9級(jí)特大地震影響酬土,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜格带,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一撤缴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叽唱,春花似錦腹泌、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至侦铜,卻和暖如春专甩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钉稍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工涤躲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贡未。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓种樱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親俊卤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嫩挤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容