天天看點

第7章 分布式系統架構 【記憶體資料庫如何保障資料安全】

13、記憶體資料庫如何保障資料安全?

13.1 Redis的主從同步方案

應用伺服器在存庫的時候,将資料存儲于Redis叢集中;整個Redis叢集通過Slot操作,将所有的資料以散列的形式均勻存儲到各個節點中。同時,為了保證資料的安全,一方面每一個Redis節點在存儲時都以鏡像的形式将資料存儲在本地磁盤中,另一方面為叢集中的每個節點提供一個備用節點。這樣,當Redis中的某個主節點失效時,可以自動通過主從切換,切換到從節點上,即能保證資料安全,又能保障系統高可用。

13.2 GemFire的節點資料複制

Redis主從同步方案,在主節點正常運作的情況下,從節點處于閑置狀态,對分擔系統壓力不能起到任何作用。這時,GemFire的即能保證資料安全、又能保證系統可用的 “多節點的資料複制” 方案被推出;GemFire被 12306網站采用。

GemFire是一個位于應用叢集和後端資料源之間的高性能、分布式的操作資料(operational data)管理基礎架構。它提供了低延遲、高吞吐量的資料共享和事件分發。GemFire充分利用網絡中的記憶體和磁盤資源,形成一個實時的資料網格(data fabric or grid)。

GemFire的主要特性有:

1)多種網絡拓撲

2)高并發的記憶體資料結構,避免鎖争奪

3)可選的ACID

4)序列化(native serialization)和智能緩沖(smart buffering)保證消息快速分發

5)同步或異步寫磁盤

6)備援記憶體拷貝

GemFire資料庫的核心是一個叫作GemFire Data Fabric的分布式存儲結構。在該存儲結構中,海量的資料以散列的形式分布存儲在多個實體節點的記憶體中,形成記憶體資源池。同時,在這個池中的每一條資料,除了存儲在主資料點上以外,還以“熱備資料點”的形式,複制在其他的多個資料點上。這樣,當其中一個實體節點當機時,就可用自動切換到其他資料點,使其中的某個“熱備資料點”自動更新成主資料點,進而保證了叢集中資料通路的安全可靠。

13.3 Redis的異步化寫資料方案

開源的Redis沒有強大而成熟的持久化方案,無法直接将資料持久化到資料庫等儲存設備中。但對于記憶體資料庫的技術方案來說這個能力是必需的。

實作Redis的資料持久化,難題就在于如果已經将資料寫入Redis了,再想通過Redis的API接口将還沒有持久化的資料讀出來,難度較大。

我們可以将寫資料庫的過程前置,提前到了與應用伺服器寫Redis同時。然而,在這個方案中我們又不希望将寫資料庫放到使用者響應的事務中,這會影響系統性能。是以,采用異步化的寫資料庫,即将寫庫請求先打包成一個消息放到消息隊列中,再由另一個守護程序從消息隊列中讀取消息,去寫庫。

這個方案采用了異步化寫庫,響應速度提高了,技術難度降低了,系統可靠性與資料安全也得到了保障。唯一的缺點就是,寫資料庫有一定的延時,不能與Redis中的資料完全同步。