小猿日記(16) - 出現線上事故了怎麼辦

口水記

今天和朋友聊天,他說,今天出了一個事故,由於以前的一個設計問題,今天在線上操作了某個需要消耗服務器和數據庫大量資源的動作(稱爲a操作吧),暴露出了設計和性能的問題,導致接口的後續響應超時,從而出現了線上問題。

聽了朋友的全程描述,我精簡一下導致出現問題的原因:

  • 當初數據庫未考慮到後續功能的一個迭代,導致業務實現複雜,每一次操作a都需要大量的資源
  • 在幾個月前,有想過優化,但是由於業務等原因,擱置了
  • 當初和操作人約定過不在白天高峯期操作,但是隨着人員的流動,口頭約定並沒有交接

事故已經發生,無法避免,那麼我先讓我朋友先將事故產生的髒數據進行處理

然後再總結一下事故

事故總結至少應該包含以下幾點

  • 事故導致的現象
  • 責任人
  • 產生的原因
  • 優化方案
  • 後續如何避免

關於前面所說的三個原因,在這裏,我分別講一下方案,當然,我也是給我朋友的建議,不一定是最好的,所以歡迎大家來提出更好的建議

關於設計的一個缺陷,導致a操作需要大量的資源,那麼這種情況首先應該考慮的是去重構,改進設計,而不是其他邊邊角角的優化,很簡單,這個設計缺陷不改動,一旦隨着後續業務迭代,人員流動,出現致命的宕機纔想改動時,這個代價,實在是太大了。

其次,在當時如果真的是業務很忙,來不及,那麼很簡單,給a操作限流,加大配置(這裏有一個比較有意思的地方,我那朋友的數據庫最大活躍連接數當時配置的是20,明顯是不夠的,具體需要多大,按照公司業務峯值來計算,參考磁盤的I/O讀寫來評估)。通過限流(只限制a操作),其實可以很大程度解決一個其他請求過來超時的情況。

那麼第三點,口頭約定,這個就比較迷了,在工作上的事情,口頭約定不靠譜,不靠譜,不靠譜。
如果在需求上沒有做,那麼就要做一個硬性的控制,例如在接口上控制a操作的一個次數,時間等,加上硬性限制。也花不了多少時間。

最後,大家在設計之初,就要考慮全面一點,否則不是給自己留坑,就是給他人埋雷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章