Scale out
目的:- 加機器就能應付成長的流量 (ref.)。
- Replication 可以應付大量讀取、少量寫入的情況。
- Sharding (partition) 可以應付大量寫入的情況 (各 server 應付不同段的資料)。
High availability
目的:- 網站能持續提供服務。
- Master-Slave Replication: 寫入密集的情況下, Master 和 Slave 的資料有時間差, 掛掉 Master 後需要處理資料不同步的情況。
- MMM 或 DRBD 可以確保資料同步。MMM 不需暖機, 服務中斷時間最短。 DRBD 較易設定, 但需要暖機時間。
Backup
目的:
- 可以找回舊資料。
作法:
- Replication 可以做到「差不多即時」備份, 但若誤砍資料, slave 上的資料也「差不多即時」飛了。
- 使用 replication 後, 可以在 slave 上固定間隔時間備份資料, 降低對網站效能的影響, 且不用停止服務。
- 備份方式分為 logical 和 raw backup 兩種類型, 各有優缺點。搭配支援 snapshot 的 file system 用 raw backup, 時間和空間成本都很划算。
- DB 本身要搭配 crash-safe 的方案 (如 MySQL + InnoDB), 確保 server 掛掉時, 資料有保持一致。
- 針對 InnoDB 做 logical backup 的話, 用 XtraBackup 較快。
- 一定要測 restore, 我半信半疑的測了一下, 馬上發現少備份使用者帳號的 DB ......
結論
Scale out、HA、backup 是三種不同的需求, 各自有不同的實踐手段。接下來會先:
- 做 logical backup: 易於實作, 資料量小時沒什麼缺點。
- 做 replication: 協助 backup 和為 scale out 讀取做準備。
- 將 DB 操作包在自己寫的 lib 裡: 之後需要 scale out 時比較好套。
剩下的東西, 待之後有更深的需求再來細讀吧。
參考資料
- LiveJournal's Backend: A history of scaling, 五年前的文章, 了解作者機器架構的轉變仍很有收獲
- MySQL 的 DRBD 與 MMM (1)
- MySQL Master-Master Replication Manager(1)
- MySQL HA、MySQL HA 與 Slave 的關係
- MySQL (MyISAM) 的備份
- XtraBackup:線上備份 InnoDB 的好東西
- High performance mysql 2e (太厚了, 只讀了一部份)
沒有留言:
張貼留言