《大规模分布式存储系统》——基础篇

时间:2021-07-11 23:08:47

分布式存储系统分类:

《大规模分布式存储系统》——基础篇


一、单机存储系统:

《大规模分布式存储系统》——基础篇




1)、哈希存储引擎——Bitcask系统结构:

Bitcask以哈希表为存储引擎,仅支持追加操作,及所有的写操作只追加而不修改原有数据。在Bitcask中每个数据文件有大小限制,当文件增加到限制大小时,就产生一个新的活跃数据文件,而原文件变为老数据文件。 老数据文件只读不写,所有的写操作都在活跃数据文件中进行。  支持定期合并,删除数据文件中的冗余数据;系统掉电时,支持快速恢复,即直接读取以保存的索引文件恢复到哈希表中即可,而不用扫描所有的数据文件。


《大规模分布式存储系统》——基础篇

《大规模分布式存储系统》——基础篇

2)、关系数据库(B树存储引擎)——缓存算法

LRU缓存算法:

基本的LRU将近期访问的item存到一个链表中,每次新访问的item加到链表头部,同时淘汰掉链表尾部item(即最近最少访问到的item被淘汰掉)。

问题1(缓存锁)如每次访问item都要更新一次LRU链表,都需要对整个LRU加锁

问题2:若果一次查询中扫描了大量的item数据,则会导致缓存池LRU链表中的大部分或者全部数据被替换掉,从而污染缓存池。


改进的LRU:

对问题1:主要解决思路是“牺牲精度来减小锁粒度”,如:

分段LRU链表(如Mysql:将LRU链表分为前后两部分,如果访问的item在前部分则不进行任何操作,即不用将该item移动到  头部。只有在后半部分时才加锁,移动到头部。

计时LRU链表(如memcached):链表的每个节点item都存储一个最近访问时间,每次访问该item时,只有当距离上次访问时间 操作某个设定值才会移动该item到链表头部。

块LRU链表(如OceanBase)链表的每个节点不是单独的一个item数据记录而是以块比如2MB的内存块。每次移动或者淘汰都 以块为基本单位。每个块保存一个访问计数和最近访问时间,每次访问块中的任何一个item都会将该块的访问计数加1,当该块的访问计数达到某个设定值(比如所有块的平均访问次数)时就更新该块的最近访问时间。按块的最近访问时间来淘汰块。

对问题2:基本思想是“分级缓存

LIRS算法(如MySQL InnoDB):LIRS将数据分为两部分:LIR(Low Inner-reference Recency)和HIR(High Inner-reference Recency),其中,LIR中的 数据是热点,在较短的时间内被访问了至少两次。LIRS可以看成是一种分级思想:第一级是HIR,第二级是LIR,数据先进入到第一级,当数据在较短的时间内被访问两次时成为热点数据则进入LIR,HIR和LIR内部都采用LRU策略。这样,LIR中的数据比较稳定。类似的,如可以实现两级cache,cache元素先进入第一级cache,当访问频率达到一定值(比如2)时升级到第二级,第一级和第二级均内部采用LRU进行替换。


3)、LSM树存储引擎——Google LevelDB

    LSM的基本思想就是将的数据的修改增量保存在内存中,当内存达到大小限制后将这些增量数据批量写入磁盘,读取时需要合并磁盘中的历史数据和内存中的增量数据。(这与OceanBase的思想类似:基线数据存放在chunk Server中,增量数据放在Update Server中,读取是合并基线与增量数据再返回给客户端)。LSM的优势在于,以批量写入规避了磁盘的随机写入。

    LevelDb是一个持久化的K_V存储系统,其基本架构可参考LevelDB源码分析系列文章

《大规模分布式存储系统》——基础篇



二、分布式系统:


数据分布:

《大规模分布式存储系统》——基础篇


复制协议:

《大规模分布式存储系统》——基础篇

一致性与可用性:

《大规模分布式存储系统》——基础篇


容错:

《大规模分布式存储系统》——基础篇


分布协议:

两阶段提交协议2PC

保证跨多个节点操作的原子性,即要么全部成功,要么全部失败,用于实现分布式事务。  在两阶段协议中,系统包含两类节点:一个协调者(coordinator),和多个事务参与者(workers)。其执行过程如图所示。   两阶段协议为阻塞协议,执行过程中需要加锁,不能被其他事务中断,且不能容错,大多数分布式系统都放弃该协议。

Paxos协议:

分布式系统设计领域,Paxos是及其重要的一致性算法。有人如是说:All working protocols for asynchronous consensus we have so far encountered have Paxos at their core.”,因此后续将给出专门分析文章

Paxos协议用于解决多个节点间的一致性问题。主节点将操作日志同步到其他备节点。如当主节点出现故障时,备节点(Propser)会提议自己成为主节点,而Paxos协议就是保证所有的节点达成一致意见,选举出唯一的新主节点。

参考:http://blog.csdn.net/anderscloud/article/details/7175209

*:http://zh.wikipedia.org/zh-cn/Paxos%E7%AE%97%E6%B3%95

《大规模分布式存储系统》——基础篇



(转载请注明出处http://blog.csdn.net/yuyixinye/article/details/43318993