我代表編程導(dǎo)航,向大家道歉!
對(duì)不起,我代表編程導(dǎo)航,向大家道歉!

大家最近訪問網(wǎng)站可能會(huì)遇到很多莫名其妙的 Bug。

幸運(yùn)的話,還可能會(huì)看到 “薛定諤的網(wǎng)站”!
誒,一會(huì)兒新頁面、一會(huì)兒老頁面、一會(huì)兒又來個(gè)報(bào)錯(cuò),不知道你們遇到?jīng)]有?
具體的 Bug 表現(xiàn)可以看:https://bilibili.com/video/BV1NgpqzQETJ

怎么回事兒呢?
最近我們網(wǎng)站前端正在進(jìn)行技術(shù)升級(jí),為了保險(xiǎn)起見,我們選擇 灰度發(fā)布,先讓一小部分用戶使用新版本,而不是全量上線。

但是無奈我們目前使用的項(xiàng)目部署平臺(tái)不支持按比例灰度發(fā)布。

為了降低灰度的實(shí)現(xiàn)成本,團(tuán)隊(duì)心生一計(jì):既然用戶訪問網(wǎng)站時(shí),要先通過 DNS 服務(wù)器解析域名為 IP 地址。

那我只需要在 DNS 解析這邊動(dòng)動(dòng)手腳,給同一個(gè)域名配置 2 條相同類型的解析記錄,一條指向新網(wǎng)站、一條指向老網(wǎng)站,再設(shè)置不同的權(quán)重,這樣就通過 DNS 輪詢的方式分配了流量。

過程如圖:

結(jié)果翻車了!
哪怕是同一個(gè)用戶、同一臺(tái)電腦訪問我們的網(wǎng)站,都有可能出現(xiàn)一會(huì)兒新頁面、一會(huì)兒老頁面的情況,用戶體驗(yàn)很差;而且由于新老網(wǎng)站技術(shù)棧不兼容,還出現(xiàn)了一些奇奇怪怪的 Bug。

這是因?yàn)?DNS 輪詢本質(zhì)上是 隨機(jī)分配,無法綁定用戶身份。哪怕同一臺(tái)電腦,DNS 緩存過期后再次解析,也可能拿到新網(wǎng)站服務(wù)器的 IP,導(dǎo)致版本切換。

不過目前這個(gè)問題應(yīng)該已經(jīng)解決了,大家可以幫我試試看。
編程導(dǎo)航:

解決辦法很簡(jiǎn)單,我們臨時(shí)更改了 DNS 解析規(guī)則的線路類型,將某一運(yùn)營(yíng)商(比如電信)的用戶統(tǒng)一解析到新版本,其他用戶解析到老版本。這樣避免了完全隨機(jī)的情況,解決了同一用戶反復(fù)切換的問題,達(dá)到了按用戶群體灰度的效果。

我承認(rèn)基于 DNS 實(shí)現(xiàn)灰度并不優(yōu)雅,也導(dǎo)致了一些線上 Bug。理想情況下應(yīng)該根據(jù)用戶 ID、Cookie 等標(biāo)識(shí)進(jìn)行一致性分流,可以利用網(wǎng)關(guān)、容器編排、或者 CDN 等技術(shù)實(shí)現(xiàn)灰度。

但標(biāo)準(zhǔn)的灰度方案需要更復(fù)雜的基礎(chǔ)設(shè)施和更高的成本,對(duì)于俺們小團(tuán)隊(duì)來說,在資源有限的情況下,還是選擇了一個(gè) “看似可行” 的簡(jiǎn)單方案,結(jié)果聰明反被聰明誤了。

把這次的事故分享出來,也是希望能給同樣是小團(tuán)隊(duì)的朋友們一些參考。
你們遇到過類似的情況嗎?有什么更好的方案推薦?


大家最近訪問我們網(wǎng)站可能會(huì)遇到很多莫名其妙的 Bug。這是因?yàn)樽罱覀兙W(wǎng)站前端正在進(jìn)行技術(shù)升級(jí),為了保險(xiǎn)起見,我們選擇 灰度發(fā)布,結(jié)果翻車了。
浙公網(wǎng)安備 33010602011771號(hào)