System Design - 3
NoSQL 的發明就是為了更好解決 distributed system 的問題
不一致hash 造成遷移壓力過大,於是有「一致性 hash」
Consistent hashing: (http://blog.jobbole.com/84041/\)
簡單做法是將 data 取模一個較大的數,例如 360,資料庫的數量就分配到圓上,例如資料庫1是 0~179, 2 是 180~359 等等
當要加入一台新的資料庫,則從佔最多的兩台資料庫去分出一個新的區間,讓資料可以進到新的區間,
缺點就是依樣會有不均勻的狀況(雖然已經比不一致哈希好很多),其問題出在於我們只設定一台要佔有連續的區間,
其實是可以佔有不連續而且多個區間的
Micro-sharding (Virtual node): 一台機器可以佔有多個不連續區間
環的大小變成一個很大的數,我們將每台機器映射成很多個點(hash),灑在環上
當資料進來,也是經過 hash 算出環上的映射點,然後找出順時針離應設點最近的機器,儲存在上面,
在遷移時,例如新增一台機器,新的機器則去跟順時針的第一台機器要資料,如此一來每台都只要遷移少量資料即可,
大大減少負擔。
環上的映射的查找需要支持 range query,適合的資料結構有 TreeMap
Replica vs Backup
- backup : 週期性的備份,通常只能回到某個時間點
- replica : data 寫入時馬上複製一份,或將動作寫入 log,之後可以還原或是馬上當備用機
SQL 通常自帶 master-slave 的 replica,
NoSQL 以 Cassndra 為例是在環上順時針寫三份