UP | HOME

Bigtable Reading notes

目录

1 思路

1.1 一致性

  • 修改时只支持单行的原子性;
  • 列族和列压缩;

1.2 table and tablet

  • Table根据KeyRange切分为多个Tablet;
  • 一个Tablet负责特定KeyRange,Tablet分裂(Split)和合并(Merge);
  • Tablet三层扩展: Root Tablet, Meta Tablet, User Tablet
    • Root Tablet记录MetaData Tablet的所有位置信息;
    • 每个MetaData Tablet包括多个User Tablet的位置信息;
    • Root Tablet的所有位置保存在Chubby里;
  • 每个Tablet维持在大约128MB,假设一行METADATA 1KB左右,三层架构能索引 2^34 UserTablet,2^61字节的User Tablet数据;

1.3 Master and TabletServer

  • 基于GFS和Chubby实现;
  • 主备Master,通过Chubby锁实现抢主;
    • 加快备机顶替速度,提前学习Log?
    • 负责Tablet Assign;
  • TabletServer
    • 向Chubby注册维护活的TableServer集合;
    • Master无法连接TabletServer,或TabletServer无法连接Chubby时,Master负责 清理Chubby锁文件防止脑裂,并把Tablet调度到其他Server;
    • 一台TabletServer处理多个Tablet;
  • Master发起Tablet创建/删除/合并,但分裂由TabletServer自行决定发起;
  • 分裂/合并期间,依然可以读写;

1.4 Client

  • Client缓存UserTablet/MetaTablet的位置;
  • 缓存过期时,逐层上升更新缓存,因此很少会访问Chubby;
  • Chubby异常时,还能服务比较长的一段时间;(1h+)

1.5 Tablet Data Structure

  • LSM Tree
  • MemTable写入Log实现Redo,每个Server一个Log文件减少文件数量;
  • 后台Compation生成SSTables,分minor compaction和major compaction;
  • BloomFilter读加速;

2 分布式块存储借鉴

分布式块可以把一个块设备拆分为多个Tablet,按照类似的方式写入和compaction。 块设备的Key是一个连续的0~N的LBA范围,可以针对这个特征做Key管理的优化。

3 遗留

  • 了解Tablet row数据结构、MVCC数据结构、内存数据结构、磁盘数据保存结构;
  • 研究SSTable的文件结构/格式;
  • 行原子性修改的实现方式;
  • 了解Hbase的做法;