Wiki Index | All wiki pages | Raw text

总体结构

根据总体介绍文档,tair是一个分布式的key-value存储系统,并且支持不同存储引擎的体系结构,但系统同时只能用一种存储引擎。整个系统主要包括了config_server模块,data_server 模块,storage模块

以及其他公用的模块等。其中config_server是做为元数据管理的服务器,代码主要在config_server目录中,主要管理数据的分布和复制,以及迁移;data_server是数据存储的节点,代码在data_server目录,主

要和不同存储引擎交互,管理数据的操作;storage是实现了不同存储引擎,代码在storage目录,主要是根据存储引擎接口,实现了两种存储引擎。

config_server

config_server模块主要包括config_server目录。实现了从配置文件中load进节点的信息,然后根据配置的数据分布的桶的数量和需要建立的数据的备份数,建立一张数据的分布表。该表其实是一个数组,元素为数据存储的节点的信息,长度为桶数乘以数据的备份数。比如,现在有1023个桶,备份数是3,那就是一个长度为1023 * 3数组。其中前1023个数组元素就是数据要存储的主节点信息,数组下标就是相应的桶号。后面1023*2个元素就是数据存储的备份节点信息。这样就是说一个主节点对应了两个备份节点,比如在前1023个元素中,有一个下标为2的元素,说明该桶号是2,该元素就是桶2的主桶所在的节点信息,那么1023*1+2和1023*2+2,这两个下标所对应的元素就是桶2的备份桶所在节点信息。

同时,为了负载均衡,主桶会尽量均匀分布到所有节点上。备份桶分布可以根据不同策略分布,主要是根据不同的数据中心,或者不同位置的来分布。不同位置主要指主桶和备份桶不能在同一节点上(当然这里可能在同一的物理机器上)。不同的数据中心主要指必须有一份数据是在异地的数据中心,这个主要为了容灾的需要,当一个机房停电或者失火等,系统仍能继续服务。

其他config_server还负责对数据节点故障检测,主要通过心跳来确定数据节点的状态,但数据节点发生变化(比如增加服务器),就会把前面所描述的数据分布表发送给数据节点。同时数据节点通过心跳来上报一些统计信息等数据。

data_server

data_server为数据节点提供服务,主要处理客户端的请求,还支持了数据的复制,根据前面所描述的数据分布表,会把负责的主桶的数据发送到对应的备份桶所在节点。同时为了支持迁移,比如当数据节点发生

变化,需要迁移出或者迁移进数据,迁移以桶为单位。迁移过程是先迁移原先数据,在迁移过程中的产生的更新,进行日志记录,然后在不加锁的情况下,进行日志的redo;当还需要redo的日志比较少时候,会加锁,把

剩下的日志redo 完成,然后通知config_server,该桶已经迁移完成。

storage模块

这里主要实现两种存储引擎,其中mdb目录中实现了内存型的存储引擎,fdb目录中实现持久化的存储引擎。存储引擎的基本接口定义在storage_manager.hpp。

mdb主要是使用在需要cache的系统中,为了减少系统down的影响,采用共享内存的方式,这样当系统down后,重新启动后数据还存在。

fdb是采用类似Tokyo Cabinet实现方式,但这里为了性能考虑,会把索引和数据分文件存放,同时把索引文件放在内存中(在部署文档中可以看到可以配置大小)。

plugin

tair支持热插拔的插件式服务,可以开发自己的插件,然后通知config_server,需要支持这个插件,让节点进行load。比如在需要一些性能统计信息时候,你可以需要的时候进行启动统计信息插件,让节点进行

一定数据统计,并记录到一定的地方,到不在需要的时候,可以让该插件停止。

client

client目录实现了c++的客户端。

common等公用模块

common目录提供基础数据结构和组件。packets目录提供了通信协议中各种数据包的实现。

基础库

基础库主要包括tbsys和tbnet,其中tbsys是主要的数据结构和文件操作的实现,包括排它锁和读写锁实现,对线程的包装,以及配置文件读写和分析等。tbnet是主要实现了单线程的网络读写数据流,采用了

epoll的模式。


All wiki pages | Raw text

Attachments

ruohai | 2011-09-29 23:55:12 | tair-2.3.tar.gz | 588.3 KB
ruohai | 2011-09-29 23:55:12 | tair-2.3-46.el5.x86_64.rpm | 1.6 MB
ruohai | 2011-09-29 23:55:12 | interface.jpg | 31.8 KB
ruohai | 2011-09-29 23:55:12 | structure.jpg | 44.2 KB