最近做了一個(gè)許愿活動,由于入口是在支付寶,主要針對大學(xué)生,沒想到活動效果特別好,每天有將近100w pv,加上運(yùn)營做了推廣,在同一個(gè)時(shí)間點(diǎn)推了10w短信,瞬間高并發(fā),數(shù)據(jù)庫連接達(dá)到2000。加上我寫的一個(gè)SQL三張表做了關(guān)聯(lián),關(guān)聯(lián)字段沒有索引,產(chǎn)生了慢查詢,導(dǎo)致數(shù)據(jù)庫連接池的資源被沾滿,數(shù)據(jù)庫被拖垮。服務(wù)不可用。
事故主要是因?yàn)榈腟QL引起的,我做了一些總結(jié)和反思:
1 對數(shù)據(jù)庫的索引一直沒有引起重視認(rèn)為可有可無
2 對連表查詢沒有想過風(fēng)險(xiǎn),沒有做過執(zhí)行計(jì)劃分析
3 沒有做相關(guān)壓測,也沒有考慮性能和壓力問題
4 沒有合理使用緩存,沒有對緩存做很好的測試
5 過于樂觀,盲目的樂觀,代碼質(zhì)量不高,代碼健壯性不夠
6 自測不夠全面,過于依賴測試,認(rèn)為流程跑通就可以,沒有覆蓋到所有測試點(diǎn),對緩存的測試不夠全面
7 不夠仔細(xì),不夠細(xì)心不是一個(gè)程序員應(yīng)該有的毛病
反思:
1 加強(qiáng)數(shù)據(jù)庫這邊知識學(xué)習(xí),每次創(chuàng)建表的時(shí)候必須考慮索引,每次需要做連接的時(shí)候必須做SQL分析,考慮連接是否走索引。
2 ?每一個(gè)接口,每一個(gè)功能都要考慮到并發(fā)問題,對高并發(fā)有相應(yīng)的處理措施。
3 規(guī)范的打印日志,需要有入?yún)⒑统鰠ⅲP(guān)鍵點(diǎn)日志情況,以及Linux查詢線上日志,學(xué)習(xí)Linux命令。快速定位線上問題。
4 對緩存的使用需要特別的謹(jǐn)慎,在自己測試的時(shí)候需要,第一次無緩存的裸奔測試,加上緩存的測試,加上緩存和緩存過期的測試。
5 ?認(rèn)真仔細(xì),細(xì)心,不盲目樂觀。
對于一個(gè)工作兩年多的程序員了,我覺得這些錯(cuò)誤真的是不應(yīng)該犯得低級錯(cuò)誤,我覺得這次的錯(cuò)誤對我的信心是極大的打擊,我以前覺得自己技術(shù)很不錯(cuò),現(xiàn)在看來我還是很初級的水平,我那些自信都是盲目的,希望這次教訓(xùn)會讓我深深的記住。
接下來我需要加強(qiáng),MySQL這塊的學(xué)習(xí)(特別重要),Linux的學(xué)習(xí)(特別重要),redis,memcache的學(xué)習(xí)(特別重要)。