故事的開(kāi)頭,是一個(gè)深夜, 窗外漆黑一片,屋里燈火通明。
辦公室里,寸頭短發(fā)的IT男們列坐兩邊,中間一兩個(gè)妹子分外顯眼。
空氣里充斥著緊張的氣氛,大家緊鎖眉頭,盯著電腦,表情異常嚴(yán)肅,深更半夜,這群人是誰(shuí),在干嘛?
原來(lái)他們是長(zhǎng)亮科技大數(shù)據(jù)團(tuán)隊(duì)駐扎在民生銀行信用卡項(xiàng)目的一組程序猿,負(fù)責(zé)該項(xiàng)目的閔工回憶起當(dāng)時(shí)的場(chǎng)景仍記憶猶新:
2020年4月,我們的項(xiàng)目團(tuán)隊(duì)接到了民生銀行卡中心的緊急需求——在2020年6月16日上線(xiàn)中國(guó)民生銀行信用卡中心夢(mèng)想值引擎項(xiàng)目。
夢(mèng)想值是啥?說(shuō)白點(diǎn)就類(lèi)似于積分的作用,用戶(hù)在民生銀行信用卡APP中通過(guò)做任務(wù)可以獲得夢(mèng)想值,再用夢(mèng)想值兌換商品。而我們負(fù)責(zé)的這個(gè)夢(mèng)想值引擎項(xiàng)目主要為夢(mèng)想值提供服務(wù)接口、數(shù)據(jù)處理,保證夢(mèng)想值賬務(wù)的正確性。
大家掐指一算,這工期滿(mǎn)打滿(mǎn)算也只有1.5個(gè)月!而且這個(gè)項(xiàng)目對(duì)穩(wěn)定性、擴(kuò)展性、性能等方面要求都非常嚴(yán)格,同時(shí)要求7X24小時(shí)線(xiàn)上運(yùn)行,真的是時(shí)間太緊了,任務(wù)太重了!
怎么辦?在長(zhǎng)亮科技技術(shù)寶寶的字典里就沒(méi)有“不可能”這仨字兒,那就擼起袖子加油干吧。
本來(lái)一切都在緊張有序的推進(jìn)中,感覺(jué)盡在掌握,直到民生銀行信用卡測(cè)試團(tuán)隊(duì)進(jìn)行集成測(cè)試。
那是6月10日,民生測(cè)試團(tuán)隊(duì)發(fā)現(xiàn)有時(shí)夢(mèng)想值未能正常調(diào)增。
看到這個(gè)現(xiàn)象,我心里咯噔一下,做這行,大家都知道夢(mèng)想值的正確性是整個(gè)項(xiàng)目的根基!如果在生產(chǎn)上出現(xiàn)該問(wèn)題,很難在短時(shí)間內(nèi)解決,后果將十分嚴(yán)重!
但距離項(xiàng)目正式上線(xiàn)只剩6天,我的心緊繃起來(lái),心里只剩下一個(gè)念頭,一定要快速找出原因,解決這個(gè)問(wèn)題!
但這個(gè)BUG最大的問(wèn)題不在于它有多難解決,而在于它是偶然性的,會(huì)不會(huì)復(fù)現(xiàn)、什么時(shí)候復(fù)現(xiàn)都不知道,根本無(wú)法準(zhǔn)確定位。
我們項(xiàng)目組立即開(kāi)會(huì),向測(cè)試團(tuán)隊(duì)了解測(cè)試場(chǎng)景,猜測(cè)可能的各種原因。
老韓說(shuō):會(huì)不會(huì)是網(wǎng)絡(luò)問(wèn)題,網(wǎng)絡(luò)有抖動(dòng)?
老劉說(shuō):是不是上游提供消息有遺漏或者消費(fèi)消息有錯(cuò)誤?調(diào)整夢(mèng)想值出現(xiàn)問(wèn)題?
云云說(shuō):會(huì)不會(huì)是redis什么地方出現(xiàn)了問(wèn)題?
還有人猜測(cè)kafka、mysql、hbase或……出現(xiàn)什么問(wèn)題?
你一言我一語(yǔ),經(jīng)過(guò)一番最大化的發(fā)散討論后,我們達(dá)成一致,考慮到BUG的不確定性,決定采用雖然最耗時(shí)但卻是最穩(wěn)妥的排查方案,從最源頭開(kāi)始逐步分段進(jìn)行排查,分析各種日志及監(jiān)控源碼。于是便出現(xiàn)了開(kāi)頭的那一幕,大家都在緊張地進(jìn)行排查,嚴(yán)陣以待,尋找BUG所在。
時(shí)間一分一秒過(guò)去,凌晨1點(diǎn),項(xiàng)目組基本定位了問(wèn)題來(lái)源,原來(lái)是因?yàn)橥毁~號(hào)相關(guān)的多條消息放入kafka,在調(diào)用調(diào)增接口后,第一條消息獲取redis鎖后短時(shí)間不釋放,而其他消息跳過(guò)等待期直接返回,導(dǎo)致這些消息丟失。
定位了問(wèn)題,大家心里都稍微松了一口氣,但絲毫不敢懈怠,立即分頭行動(dòng),云云用自己半吊子的英文加上翻譯軟件開(kāi)始翻英文版的redis官方手冊(cè),老劉、老韓則分頭查找redis鎖機(jī)制、鎖原理,鎖控制實(shí)現(xiàn)代碼,大家緊密配合。
凌晨3點(diǎn),云云終于從官方手冊(cè)找到解決方案。我們將源代碼修改(將redis鎖的等待時(shí)間設(shè)置為10s,將鎖的超時(shí)時(shí)間設(shè)置為20s)并自測(cè)完成后,立即提交行方專(zhuān)業(yè)測(cè)試團(tuán)隊(duì),最終回歸測(cè)試成功,BUG完美解決,直到這一刻,大家懸著的那顆心才真正落了下來(lái)。
奮戰(zhàn)一晚,我們卻困意全無(wú),心中充滿(mǎn)了苦戰(zhàn)一場(chǎng)、大獲全勝的痛快,離開(kāi)項(xiàng)目組已是凌晨4點(diǎn)多,新的一天即將到來(lái)。
6月16日,終于迎來(lái)了該項(xiàng)目成功上線(xiàn),不僅完美頂住了616活動(dòng)峰值壓力,也展現(xiàn)出了優(yōu)越的性能,我們項(xiàng)目組獲得了行方相關(guān)領(lǐng)導(dǎo)的高度表?yè)P(yáng),對(duì)我們來(lái)說(shuō),這不僅是對(duì)長(zhǎng)亮科技項(xiàng)目服務(wù)能力的認(rèn)可,更是對(duì)我們長(zhǎng)亮人拼搏精神的一種認(rèn)可!
后續(xù):
后來(lái)小編再次問(wèn)閔工,在這次事件中,讓他印象最深的是什么。他說(shuō):那肯定是我們的組員齊心協(xié)力,共同戰(zhàn)勝困難的樣子呀,那一刻大家沒(méi)有一個(gè)人有情緒、有抱怨,忘記時(shí)間、忘記疲倦,只是單純地奔著問(wèn)題、解決問(wèn)題,這也是大家最美的樣子……
柴靜在《看見(jiàn)》里面曾說(shuō):“每一個(gè)微笑的背后,都有一個(gè)咬緊牙關(guān)的靈魂。”