背景
我們的一個服務(wù)模塊使用websocket技術(shù)褂傀,通過長鏈接來協(xié)同廣播用戶的操作行為,但是服務(wù)職責不單一编检,邊界劃分不清晰胎食,承載了很多職責之外的業(yè)務(wù),所以決定對服務(wù)進行徹底重構(gòu)允懂,差不多是重寫厕怜。
經(jīng)過一個多月的努力,服務(wù)重構(gòu)完成蕾总,包括架構(gòu)粥航、集群方式調(diào)整,數(shù)據(jù)存儲生百、操作模型設(shè)計等递雀,經(jīng)過嚴格測試后上線,雖然核心業(yè)務(wù)可用蚀浆,但還是出現(xiàn)很多本不該出現(xiàn)的問題缀程,現(xiàn)總結(jié)一下搜吧,權(quán)當做最近一段時間工作的總結(jié),和對問題的反思杨凑,以后的工作中要引以為戒滤奈。
一、不要忽視簡單的業(yè)務(wù)邏輯撩满、代碼
無論業(yè)務(wù)多簡單蜒程,都不要小覷它,必須要有單元測試鹦牛,且要盡量覆蓋到每一個分支搞糕、每一行代碼勇吊,據(jù)說行業(yè)中行覆蓋率達到60%以上曼追,就已經(jīng)很好了,最好的是68%汉规。
刪除確認無用的代碼礼殊,問題往往出現(xiàn)在這些不經(jīng)意的地方,可有可無的代碼不僅給業(yè)務(wù)的理解帶來困難针史,給維護者增加維護成本晶伦,甚至影響整個代碼的質(zhì)量。因為你感覺這些代碼不重要啄枕,從而意識上就不會過多的關(guān)注它婚陪,結(jié)果往往就是因為這些代碼造成系統(tǒng)難用,或者不可用频祝,影響整個服務(wù)泌参。
二、重視偶發(fā)的常空、不起眼的exception
對于偶發(fā)的錯誤沽一,也要引起足夠重視,刨根問底漓糙,找到根本原因并解決它铣缠。否則,一旦上線昆禽,就會放大這些問題蝗蛙,造成整個服務(wù)不可用。有時只要在平時開發(fā)醉鳖、測試的過程中稍稍關(guān)注一下發(fā)現(xiàn)的問題捡硅,就能很快的解決它。
這次重構(gòu)后辐棒,在自測的過程中病曾,偶發(fā)出現(xiàn)一個序列化錯誤牍蜂,簡單看了一下錯誤拋出的地方,是調(diào)用第三方服務(wù)的泰涂,所以就沒有放在心上鲫竞,當時就感覺是第三方服務(wù)可能偶爾出現(xiàn)的返回數(shù)據(jù)格式問題,另外第三方服務(wù)也沒有修改逼蒙,一直在線上穩(wěn)定運行从绘,所以就沒有過多的關(guān)注。上線后是牢,該錯誤頻繁拋出僵井,就進行了回滾,經(jīng)查證原因是在解析第三方服務(wù)返回的數(shù)據(jù)時候驳棱,一個符號寫錯了批什,造成序列化失敗,如果在開發(fā)社搅、自測的過程中對這個問題關(guān)注一下驻债,根本就不會把它帶到線上,也不會造成服務(wù)回滾形葬,浪費了很多時間與精力合呐。
三、碰到的疑問要立即驗證確認
平時在開發(fā)笙以、自測的過程中淌实,會碰到一些自己不確定的地方,無論是業(yè)務(wù)猖腕,還是技術(shù)拆祈,都要及時確認驗證,不要想著隨后有時間了再說谈息,一旦有了這個想法缘屹,即便以后有時間了,你也不會去處理侠仇,這也許就是拖延癥吧轻姿,那么問題隨后就會進一步放大,導(dǎo)致服務(wù)不可用逻炊。
四互亮、多關(guān)注測試日志
服務(wù)提測后,多數(shù)RD會認為此時重點在QA余素,而自己相對來說就會輕松一些(*^__^*) 豹休,實際上此時RD也確實是比開發(fā)時的時候時間多一點。但是桨吊,如果你的想法是現(xiàn)在終于有時間來放松一下了威根,聊聊天凤巨、刷刷微信、微博洛搀,看看新聞啥的敢茁,等著QA來告訴你問題,那就大錯特錯了留美,千萬不要浪費此時的空閑時間彰檬。
此時,如果QA問題不多谎砾、或者沒有匯報問題的時候逢倍,RD的時間還是比較空余的,此時對RD來說是很好的時機景图,因為現(xiàn)在問題不多较雕,沒人打擾,才能夠真正的靜下心來好好想一想症歇,回顧一下還有沒有什么問題自己沒有注意到庆亡;一些棘手的問題當時考慮的是否全面鸯屿,是否有遺漏;一些邏輯是否能夠更加嚴謹?shù)瘸萏摇U驹谝粋€更高的層面看看是否還有能夠優(yōu)化激捏、完善的地方设塔,多看看測試日志,利用好這段時間远舅,能夠發(fā)現(xiàn)并解決很多問題闰蛔,不要等到上線后出問題讓自己后悔不已⊥及兀回過頭來看序六,上線的問題,其實測試日志中都出現(xiàn)過蚤吹,上線前有人關(guān)注一下例诀,就不會導(dǎo)致上線后問題的發(fā)生。畢竟QA是對功能進行測試裁着,很多不明顯的異常他們是不知道的繁涂,QA不反饋,不代表沒有問題二驰,QA也會有遺漏扔罪,也不能察覺到所有的錯誤,所以在QA測試過程中桶雀,RD也要多測試矿酵、多關(guān)心日志唬复,多思考,將問題殺死在搖籃之中全肮。
本次上線前盅抚,有2天時間,QA在進行整體的回歸測試倔矾,而RD都在放松妄均、浪費自己的時間,沒有一人去看測試日志哪自,結(jié)果上線后丰包,一堆錯誤日志,導(dǎo)致回滾壤巷,下來再看邑彪,這些錯誤在測試日志中早已經(jīng)存在,如果2天內(nèi)多多關(guān)注測試日志胧华,就不會將錯誤帶到線上寄症,造成上線失敗。
五矩动、不要抱任何僥幸心理
對于任何問題有巧,都不要抱有僥幸心理,說可能是環(huán)境的差異才導(dǎo)致的悲没,如果確實是環(huán)境問題導(dǎo)致的篮迎,也要拿出確實可信的理由,不要認為現(xiàn)在的問題上到線上就沒事了示姿,一定要刨根問底甜橱,找到根源,如果確實是環(huán)境的問題栈戳,要看看線上環(huán)境有沒有該問題岂傲,該問題是如何發(fā)生的等。通常情況下子檀,你感覺有問題的地方镊掖,也確實是有問題,無論什么環(huán)境命锄。
總得來說堰乔,這次重構(gòu)學(xué)會了很多東西,也讓自己對事物脐恩、對人的看法與以往有了很大不同镐侯,無論開始你認為多么復(fù)雜的事情,只要一步步認真的去思考、去動手苟翻,都會慢慢的明朗起來韵卤,最終解決它。