结构化数据的分布式存储系统 bigtable
摘要:
bigtable在google公司内部的多种应用场景,无论是大数据规模,还是实时性高的场景,都能灵活的提供解决方案。应对的是PB级别以上的数据。下面介绍具体的bigtable架构
1.introduction:
将bigtable与数据库进行比较,有很多实现策略都很相似。并行数据库和主存数据库都实现了扩展性和高性能。不同的是,bigtable与数据库的接口不同,不提供一个完全的关系数据模型,相反它提供给用户对数据结构和格式的动态控制。而且bigtable可以让用户决定是从磁盘中还是内存中存放数据,以及数据存放的物理位置(应该是机架)。
第二节描述数据模型的细节,第三节提供用户api,第四节描述bigtable以来的google底层框架,第五节描述bigtable实现的基本原理。第六节为可以对bigtable做出的优化。之后几节与技术关系不大,就省略不看
2.data model
bigtable是一个松散的,分布的,一致的多维排序的字典。a按照行key,列key,时间戳进行索引。每个值为raw string。
文中举了一个webpage的例子。
rowrange tablet 相近的row所在的机器也相近,webpage,html倒过来,相似的网页存放在一起。
column family ,access control,
timestamp 每个cell不同version由新到旧排列。可以进行垃圾回收
3.API
基本读写,原子性修改一行,与sawzell,mapreduce的互动
4.building blocks
bigtable基于google已有的基础框架搭建,其中,GFS用来存储日志和数据文件。bigtable通常是在机器共享池中与其他很多分布式应用一起运行。bigtable内部使用google sstable来存储数据,它提供持久化,排序的不可变的kv map(leveldb中sstable),允许查找一个key,也可以range query。
bigtable还依赖于高可用性和持久化的分布式锁chubby(比zookeeper更简单,但扩展性差。基本上是分布式小文件系统+rpc+paxos)。
5.implementation
基本由三个组件构成,client lib,master server,多个tablet server。tablet server可以动态添加,是扩展性的保证。
master的任务很繁重,包括管理tablet和tablet server的映射,tablet server的负载均衡,垃圾回收,tablet的动态添加和删除。
而tablet server负责响应具体的读写请求,以及tablet server过大时进行分支。
这种单master的分布式系统,很多时候client并不需要与master进行通讯(本地缓存等),所以master的负载并不高。
tablet location为b+树结构,减少了磁盘访问次数。
tablet server是用chubby的文件系统来管理的。
master为了监控tablet server的状态,需要不断与她们通信,如果tablet server停止服务,需要转移其上的tablet。
master在执行tablet assignment时如下:
1.在chubby获取一个唯一锁,防止并行master同时操作
2.master在server目录扫描寻找live的server
3.master扫描所有live的 tablet server,确认他们现在tablet的对应状态
4.master扫描元数据表了解tablet的集合(如果由未assigned的tablet,也加入到待完成队列中)
一个持久化状态的tablet被存储在GFS中,
读写的时候会进行权限检查,而权限检查一般是用chubby file实现,这个file一般都会在client 的cache被击中。
compaction,这类似于leveldb的LSM结构,从memtable到多级sstable。
6.refinement
基于之前一节的实现细节,有以下优化方向:
1.locality groups
多个column family合并为一个locality groups(类似webpage中,元数据在一个locality group,网页内容在一个locality groups),而不同的locality group在不同的sstable中。同时可以指定locality group在内存中还是在磁盘中进一步优化读写性能。
2.compression
sstable部分压缩,读取的时候不用解压缩整个文件。
3.cache for read performance
tablet server提供两级缓存,blockcache缓存sstable中的block,scancache缓存kv对。
4.布隆过滤器
类似于leveldb中的filter(metablock),在bigtable中变成了可配置的。
5.commit-log implementation
排序读操作,是磁盘随机读取变为顺序读取。排序用的归并排序。