iT邦幫忙

DAY 6
0

今天來談談資料複製吧

資料複製是維持可用性的方法,因為資料複製好幾份到不同機器,所以只要有一台機器還在,資料就拿的到。

但只要有資料複製,就一定會有延遲的狀況,也就是在資料複製完成前,多台機器的資料是不一致的。

有的系統對於資料一致性讀很要求,就會採同步複製,要複製完成後資料寫入才會完成。但這樣會很慢,尤其是副本越來越多的時候。

所以比較有效率的作法是非同步複製,但一定會有一段時間不一致。

那有沒有折衷作法呢。有的,Quorum就是一個折衷的作法,R+W>N,你可以控制要write-efficient還是read-efficient,然後犧牲另一個operation的效率來換資料的一致性。

另外呢,每更新一筆資料就發一次複本更新是很沒有效率的,通常要累積一些更新或隔一段時間才會batch update。

常見的複製是有三個副本,除了原本的資料之外,同一個rack或data center一個副本,另一個rack或data center再一個。

那副本允不允許寫入呢?多數資料系統是不允許的,也就是說,副本純粹只是增加read concurrency/efficiency/availabilty。同樣是副本,同時只有一個master副本負責寫入,其他的slave副本只負責read request。

也有允許副本寫入的系統,像是cassandra。多個互相衝突的寫入會以寫入的timestamp訂輸贏 (所以NTP是必須的,但NTP也不能保證多台機器的時間完全一樣),Last write win。當然在還沒協調前會存在有資料不一致的時間,那這就是應用必須要忍受的。


上一篇
Day 5: 資料切割的metadata管理
下一篇
Day 7: 無強一致性 及 無法決定執行順序 帶來的問題
系列文
分散式資料處理,以Stream Computing為例30

尚未有邦友留言

立即登入留言