天天看点

第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中的数据完全同步。