這起事件的分析橘原,會寫得比較長籍铁。因此分成幾部分發(fā)出來涡上。這是第一部分。
01一碼通崩潰事件復(fù)盤
12月20日星期一拒名,也就是筆者撰寫本文的日子吩愧,西安一碼通崩了。具體一碼通是幾點開始崩的靡狞,并沒有一個準確的說法耻警。有人說是7點40左右開始。不過我個人感覺要早一點甸怕。我大概早上7點20左右開車經(jīng)過南三環(huán)繞城高速雁塔收費站入口時甘穿,發(fā)現(xiàn)那里排了大量的車進不去高速。當時沒多想梢杭,后來到了單位后才發(fā)現(xiàn)一碼通打不開∥录妫現(xiàn)在想想,7點多的非高峰期武契,高速進不去募判,估計也是因為司機進高速時無法打開一碼通和核酸結(jié)果。
崩潰的系統(tǒng)其實不止一碼通咒唆,西安的核酸查詢系統(tǒng)届垫,包括疫苗接種系統(tǒng)都崩潰了。當然后兩者可能是因為和一碼通存在強關(guān)聯(lián)所以崩潰的全释。一直到下午兩三點以后装处,一碼通和相關(guān)系統(tǒng)才開始陸續(xù)恢復(fù)。但是樣式回滾到了之前沒有接種標識的樣子浸船。
到了下午大概七點多妄迁,一碼通系統(tǒng)又崩潰了。也是那會李命,很多人說核酸檢測系統(tǒng)也崩潰了登淘。可見這些系統(tǒng)是有一些強關(guān)聯(lián)的封字。
02一碼通崩潰的影響
一碼通不能使用黔州,對于處于疫情漩渦中的西安來說,無異于雪上加霜周叮。
就在12月19日(星期日)辩撑,西安高新區(qū)發(fā)布通知,要求周一員工必須持48小時內(nèi)核酸陰性結(jié)果才能進出辦公場所仿耽。西安的公交合冀、地鐵也在周日發(fā)通知說要求乘客拿48小時的核酸陰性結(jié)果才能乘坐公共交通工具。周一當天筆者大概7點40多到了西安軟件園项贺,結(jié)果因為一碼通無法打開君躺,核酸結(jié)果無法查證峭判,物業(yè)和大廈保安沒有辦法放行。軟件園里每個大樓下面都聚集了好多無法進入的員工棕叫。根據(jù)一些微信群里描述林螃,很多公交車站,地鐵站也都排了長隊俺泣。上午10點多疗认,筆者經(jīng)過一個核酸檢測點時,發(fā)現(xiàn)排隊長度超過1公里伏钠。
由于西安這些天一直有新冠確診患者横漏,政府和整個社會都在加大核酸檢測和防疫政策的力度。而作為防疫政策核心支撐系統(tǒng)的一碼通崩潰熟掂,直接影響了整個西安市幾乎所有市民的生活和工作缎浇。造成的影響應(yīng)該是很大的。
03一些分析結(jié)論
在這里我們還是從軟件開發(fā)的角度來分析一下這起事件赴肚。為了便于大家閱讀素跺,我先直接說一下關(guān)于這起事件個人的一些分析結(jié)論:
一碼通崩潰不是因為網(wǎng)絡(luò)擁堵導致的
一碼通系統(tǒng)的容災(zāi)和備份機制存在缺陷
一碼通系統(tǒng),核酸查詢系統(tǒng)和核酸檢測系統(tǒng)之間的強關(guān)聯(lián)是設(shè)計上的失誤
西安市到現(xiàn)在都沒有把自己的核酸檢驗報告系統(tǒng)和國家的核酸報告系統(tǒng)打通誉券,是決策上的失誤指厌,也是政府信息化建設(shè)中的失誤
未來各地『一碼通』需要逐漸走向互聯(lián)互通
由于話題比較多,考慮到公眾號閱讀的特性踊跟。我打算分成幾篇文章發(fā)布仑乌。這是這一系列文章的第一篇。在這一系列文章的最后琴锭,借著這個機會,我希望談一下軟件系統(tǒng)如何在設(shè)計衙传,開發(fā)和運營中確保系統(tǒng)穩(wěn)定性决帖。
04是擁堵引起的嗎?
一碼通是因為什么原因崩潰的蓖捶?大數(shù)據(jù)局曾經(jīng)對媒體說是網(wǎng)絡(luò)擁堵導致(參見陜西交通廣播微博)地回。今天下午新聞發(fā)布會也說是擁堵導致的。坦率地說俊鱼,這種說法我是不相信的刻像。原因有二:
1.?西安一碼通上線已經(jīng)很長時間了。這期間大部分時候還是很穩(wěn)定的并闲。西安的上班高峰期细睡,也就是掃碼高峰期大體上應(yīng)該在8點到9點之間。但是一碼通崩潰是從7點多開始的帝火,當時大部分人都還沒出門溜徙,更談不上掃一碼通了湃缎。網(wǎng)絡(luò)根本不可能在那個時候擁堵。更不可能因為擁堵造成系統(tǒng)崩潰蠢壹。實際上最近因為疫情嗓违,很多人出門會避開高峰期,高峰期一碼通系統(tǒng)的網(wǎng)絡(luò)流量應(yīng)該是沒有平時大的图贸。
2.?如果真的是網(wǎng)絡(luò)擁堵導致系統(tǒng)崩潰蹂季,那么解決是很容易的。解決網(wǎng)絡(luò)擁堵大體上有兩種手段:一是限流疏日,二是擴容偿洁。限流就是把一部分網(wǎng)絡(luò)請求阻擋住,只讓部分網(wǎng)絡(luò)請求通過制恍。這樣系統(tǒng)負荷就小了父能。擴容就是增加服務(wù)器的硬件,比如增加服務(wù)器的內(nèi)存净神,CPU何吝,如果服務(wù)器有集群,則可以在集群中增加更多服務(wù)器鹃唯,之后通過負載均衡將大流量分布到更多的服務(wù)器去爱榕,進而降低單個服務(wù)器的負荷。
如果為不太懂計算機技術(shù)的朋友們打個比方坡慌,擁堵導致崩潰可以用“小馬拉大車”來理解黔酥。本來小馬只能拉一輛車,現(xiàn)在要求它同時拉兩輛車洪橘,那小馬肯定身體撐不住跪者。解決辦法中的“限流”可以理解為先扔下一輛車,拉走另外一輛車熄求,之后再來拉扔下的那個車渣玲。“擴容”則可以理解為調(diào)來更多的小馬弟晚,本來只有一個小馬忘衍,現(xiàn)在有兩個小馬拉了,自然就可以拉動了卿城。
需要說明的是枚钓,當今的計算機系統(tǒng),基本上都部署在云上瑟押。而在云計算平臺上搀捷,“限流”和“擴容”都是非常容易實現(xiàn)的。甚至夸張一點說勉耀,點幾下鼠標指煎,動一動鍵盤蹋偏,很快可能就搞定了。一碼通系統(tǒng)據(jù)說部署在阿里云上至壤,無論是搞限流還是擴容威始,應(yīng)該都不難,更不至于花了大半天都沒有恢復(fù)像街。
另外一個關(guān)于一碼通問題是程序問題的佐證是黎棠,一碼通的樣式在今天進行了回滾。
下面這個圖是10月份時候健康碼的樣子镰绎,注意10月底的時候二維碼就有了邊框注明疫苗接種狀態(tài)脓斩,比如下面這個是金黃色的,標明完成了第二針接種畴栖。
直到昨天随静,這個邊框也是存在的。但是今天下午系統(tǒng)恢復(fù)以后卻消失了吗讶。變成了下面這個好幾個月之前的樣子:
所以我們判斷系統(tǒng)進行了回滾燎猛。
另外,周日進行了核酸的一部分人也發(fā)現(xiàn)他們的結(jié)果一直沒出來照皆。但按照常理重绷,應(yīng)該是出來的。我個人的猜想是數(shù)據(jù)庫也進行了回滾膜毁≌炎浚回滾到了周日的某個時間點。這比程序回滾的時間跨度要小很多瘟滨。
如果僅僅是流量太大候醒,正如我上面所說,直接優(yōu)化網(wǎng)絡(luò)杂瘸,優(yōu)化硬件就可以火焰。為什么要把程序回滾到2個月以前的樣子呢?回答只能是胧沫,程序出了問題,一時又改不好占业。所以只能把程序回滾了绒怨。有可能回滾了很多次,直到找到這一個版本能運行谦疾,結(jié)果已經(jīng)是很久以前的程序了南蹂。。念恍。而網(wǎng)絡(luò)擁堵六剥,明顯只是一個借口晚顷。。疗疟。
需要注意的是该默,在程序下午回滾以后,晚上七點多又崩潰了策彤。原因是什么呢栓袖?很可能是數(shù)據(jù)和程序存在不匹配的情況〉晔或者是數(shù)據(jù)庫里面的存儲過程之類出了問題裹刮。
05系統(tǒng)崩潰的真實原因
那么系統(tǒng)崩潰真實原因是什么呢?目前看起來庞瘸,當事的企業(yè)和大數(shù)據(jù)局都傾向于用”網(wǎng)絡(luò)擁堵“的接口來說事捧弃。他們?nèi)绻桓嬖V我們真實原因。我們就只能從一些表象進行猜測擦囊。當然這些猜測可能對违霞,也可能不對。下面是我個人的分析霜第。
系統(tǒng)之前運行地很穩(wěn)定葛家,突然就崩潰了。這樣的情況泌类,如果不是網(wǎng)絡(luò)問題癞谒,那么大體可以分為兩種:
修改了一部分程序代碼,結(jié)果這部分代碼有問題刃榨,把系統(tǒng)搞崩了。
或者代碼沒怎么變枢希。但是一些新的數(shù)據(jù)進來以后桌吃,引發(fā)了以前沒有運行過的一些情況,系統(tǒng)崩了苞轿。
或者就是上面1和2所說的情況兼具茅诱。
筆者認為:最大的可能是周日晚上一碼通經(jīng)歷了代碼更改,但是上線的版本出現(xiàn)了 bug導致的搬卒。從后面程序回滾以后依然崩潰的現(xiàn)象來看瑟俭,崩潰的原因和數(shù)據(jù)有一定關(guān)系∑跹可能是錯誤的代碼修改了數(shù)據(jù)庫摆寄,導致程序回滾以后依然有崩潰現(xiàn)象。也有可能是存儲過程等保存在數(shù)據(jù)庫中的代碼出了問題導致的。
06一點感想
一碼通有多重要微饥。相信今天大家都體會到了逗扒。然而從這一起事件看起來,一碼通的系統(tǒng)欠橘,明顯缺乏足夠好的容災(zāi)和備份機制矩肩。如果他們?nèi)轂?zāi)和備份機制做得足夠好的話,是完全可以在短時間內(nèi)恢復(fù)到昨天或者前天的狀態(tài)的简软。但是從今天系統(tǒng)反反復(fù)復(fù)的表現(xiàn)看蛮拔。顯然目前的系統(tǒng)雖然有一定的備份機制,但是備份機制不夠完善痹升,甚至比較混亂建炫。這個話題比較長,在后面我會再寫一篇文章來分析疼蛾。
歡迎大家在簡書關(guān)注我的公眾號肛跌。或者在微信搜索同名公眾號“軟件開發(fā)與挖掘機技術(shù)” (softdive)也可以找到我察郁。謝謝大家