分類
Rails

Responsible Rails 讀書摘要

斷斷續續看完了 Responsible Rails 這本小書,蠻喜歡這本書的主題,講 Production 上的實操問題。

可惜內容作者沒有完全寫完,裡面還留著很多 (TODO),不過還是有一些不錯的出錯倒站故事跟心得就是了。

一些摘要:

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

發表迴響