斷斷續續看完了 Responsible Rails 這本小書,蠻喜歡這本書的主題,講 Production 上的實操問題。
可惜內容作者沒有完全寫完,裡面還留著很多 (TODO),不過還是有一些不錯的出錯倒站故事跟心得就是了。
一些摘要:
- 強調 Responsible Software Developer 的重要性
- 軟體開發的整個流程,到實際部署給 end-user 後,又是新的世界: 各種 bugs、意外倒站、DevOps 問題等等
- Say No! To regressions 以及要專業處理 bugs, failure 和各種意外
- Production 的意外處理
- 要立即讓相關人等知道情況
- 給出預估修復時間
- 事後 post-mortem 分析
- 對外的 integrations 要紀錄所有 input 和 output,有助於事後分析
- 除了 happy path,也要問客戶什麼是 business-critical failure paths,要重點處理
- 各種 Service 的 integration 要 fail fast, 要設定 timeout
- 關於 Domain Event (也適用於API設計) 小心修改、Mutable messages 是 anti-pattern、傳遞 generic attributes 也是 anti-pattern
- MySQL 要用 utf8_bin,這樣字串比較才會精準
- 網路相關的 integration 應該要考慮拆開或其他容錯處理,例如用 background job, 設定 timeout, 用 service object 包錯誤處理等
- 作者碰到的問題是 Elastic Search 因為 AWS 掛了,造成全站都掛。但理想上應該只影響 全文搜尋 就好
- 推薦讀 Release It! 這本書
- 推薦可用 feature flag 來做 高頻次的小變更部署,提早發現錯誤,要修復也快
- External JS 會拖慢 CI,在 capybara 裡面有設定可以關掉
- 記得加 DB indexes,作者有次跑 rake script 跑了 20hr,加了 index 後只要幾分鐘
- 寫 Script 顯示完成百分比沒用,建議多顯示每處理 1000 筆花了多久時間
- 小心套件升級: 可能會有 bug,若不急可以等等。即時是安全性升級也可能有 bug,可以多了解細節再決定要不要趕著升級。
- 刪除 production data 要萬分小心
- 不要刪
- 真的要刪,code 請同事幫忙 review
- 把資料搬到別處,而不是直接刪除
- 真的要刪,先手動備份
- 寫驗收測試降低 regression 可能性
- 要成為 responsible developer 必須了解 devOps