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 為例是在環上順時針寫三份

results matching ""

    No results matching ""