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的做法;