您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
GOOGLE分布式数据库技术演进研究
 
作者:manny 来源:网易 发布于:2014-12-31
   次浏览      
 

1 前言

癸巳 即将过去,总得点礼物吧,思来想去,觉得写写GOOGLE分布式数据库技术发展情况,以此作为礼物献给自己,聊以自慰,由于时间有限,加之对于GOOGLE的分布式数据库理解也只能盲人摸象,难免有错误之处,敬请谅解。

GOOGLE的分布式数据库系统从BIGTABLE的正式推出后,先后对外发布了Bigtable、Dremel、 Spanner等不同的分布式数据库产品,有的是引入新的设计实现,有的是针对原有的技术进行改进和优化,用于满足不同的GOOGLE的应用场景,支持日益增加的数据量管理要求。

GOOGLE分布式数据库技术,从个人理解看,可以分为三个阶段,第一阶段以Bigtable产品为代表,实现了数据的分布式存储、行数据的事务性管理和较好的扩展性,从存储WEB页面而生,创造性提出了KEY-VALUE这种MAP数据结构,并广泛应用到GOOGLE的各种应用中,与GOOGLE的MapReduce GFS技术搭配,构成了GOOGLE分布式云计算的三架马车,对应开源社区推出HBASE产品,也在近年得到了广泛应用。

第二个阶段以Dremel产品为代表,Dremel产品采用了与Bigtable不同的数据结构,立足实时对于海量数据进行分析,据说在秒级可以完成PB级别的数据分析和处理,可以做是分布式数据库实时处理的杰作,其实时处理能力达到令人惊艳的速度。

第三阶段以Spanner数据库技术为代表,Spanner数据库在可以做到多数据表事务一致性管理,利用原子时钟(TrueTime)和Paxos协议解决了分布式数据库多表事务一致性管理的难题,打破的CAP不可三者兼得的理论神话,使得分布式数据库技术得到了革命性的进步。

严格来讲Dremel与Bigtable和Spanner解决的问题有所不同,Dremel侧重于对应海量数据的实时处理,而Bigtable和Spanner更侧重于传统的关系型数据库支持功能对齐和替换,并不是简单产品替换关系。从GOOGLE的分布式数据库技术的发展历程看,这些技术得以成功推出,有创造性的新锐视角和解决方案,更有其坚持在廉价PC服务器上面构筑海量数据处理系统的理想和情怀,更有起高超的技术实力和团队合作,这些因素的结合,使得技术难关被不断的突破,分布式数据库产品得以大成,这些产品的确值得技术人员去深入学习和体会。

为了更好的对比和分析GOOGLE的分布式数据库技术,本文从Bigtable、Dremel、Spanner数据模型、系统架构、数据查询原理、应用场景进行深入分析,最后对于其特点进行对比,从而使得读者对应GOOGLE的分布式数据库技术有一个初步的认识。

2 BIGTABLE开山壁祖

2.1 Bigtable的数据模型

2.1.1 Bigtable的Key-Value数据结构

Bigtable采用Key-Value数据结构,Key由行关键字、列关键字、时间戳组合而成,Value为对应数据内容,?行关键字和列关键字都是字符串数据类型,时间戳是一个64位的长整数,精确到毫秒的时间戳,这三个属性在一个数据库中全局唯一,由Key和Value构成的KV数据结构称为一个数据项,考虑到分布式数据库的多复本的特性,数据项会按照时间戳进行排序,并对于过期的数据项进行过期回收,其数据结构如图2-1所示。

图2-1 Bigtable KV结构示意图

2.1.2 Bigtable的数据模型层次

Bigtable数据模型由下而上,主要部件可以初分为四个层面,最底层为SSTABLE,存放在GFS分布式文件系统中,为数据存储MAP结构体,第二层TABLET结构体,一个表可以由一个或者多个Tablet构成,由一系列的SSTABLE构成,第三层TABLET服务器,管理一组TABLET数据体,最上层Bigtable数据库,由多个TABLET服务器和一个Master服务器、客户端访问连接支持软件构成,最终形成了一个分布式数据库,对外提供数据库服务,层次关系如图2-2所示。

图2-2 Bigtable各级数据模型视图

数据项基于一种叫做SSTABLE的数据格式,SSTABLE是一种持久化、排序的、不可更改的MAP数据结构,每一个SSTABLE由一系列数据块构成,在每一个SSTABLE的最后存储着块索引,SSTABLE使用这些索引来定位数据块,在每一个SSTABLE被打开时,块索引会自动加载到内存中。SSTABLE提供了二种数据访问方式,第一种方式,使用二分法查找内存中的块索引,根据对应的块索引把对应的数据块读取到内存中,此种方式只会发起一次磁盘寻址,第二种方式是把整个SSTABLE都整体加载到内存中。SSTABLE基于GOOGLE GFS全局文件系统基础上,实现对应文件系统层面的负载均衡和IO能力分担,

从特点看,BIGTABLE不直接支持对应数据的修改操作,通过时间戳方式来间接支持数据修改。数据读取方式,提供了二种不同的机制,二分法的块索引定位加载,类似于ORACLE提供的索引访问方式;SSTABLE的全部加载,类似于ORACLE提供的全表扫描机制,从技术角度看,不管分布式数据库技术本身如何发展,对小粒度数据精确加载和整体数据加载的场景,从这点看,所有的数据库存储结构应该都是殊途同归。

一个TABLET由TABLET Log存储TABLET的提交数据的Redo 记录数据,MEMTABLE是内存缓存,存储最近访问的记录数据,数据持久化到一组SSTABLE文件中。

最上层Bigtable数据库服务层,对外提供Bigtable的数据库服务功能,为Bigtable的最顶层结构。

2.2 Bigtable的系统架构

Bigtable由客户端连接库、Master服务器、TABLET服务器组构成,客户端链接库提供数据库客户端访问功能,提供服务端访问,比如对于数据寻址的缓存信息; Master服务器负责TABLET服务器组的管理,根据负载情况,可以动态的增加和删除TABLET服务器,维护TABLET服务器组;TABLET服务器管理该服务器上面的TABLET集合,完成TABLET数据读取和写入操作,当TABLET太大时,对TABLET进行拆分,在一个Bigtable中只能有一个Master服务器,通过Chubby保证Master服务器的唯一性;Chubby服务提供了TABLET根信息服务、系统Master管理和TABLET服务出错的善后处理任务,保存Bigtable数据库Schema信息。Bigtable整个系统架构如图2-3所示。

图2-3 Bigtable系统架构图

2.3 Bigtable的数据查询

2.3.1 Bigtable的数据定位

Bigtable数据查询,首先是对于数据所在tablet进行定位,Bigtable的位置定位,分为三个步骤。

第一步,客户端程序在缓存中查找tablet位置是否在缓存中存在,如果在缓存中存在就直接读取,如果不存在,通过Chubby服务器查询tablet的根节点,取到Bigtable根节点tablet信息;

第二步,根据Bigtable根节点的tablet信息,找到数据对应METADATA的数据表,该数据表中存储着所有的用户数据tablet的位置信息;

第三步,根据METADATA的数据表存储的用户数据tablet信息,找到数据对应tablet信息,根据该位置信息,读取到tablet数据到客户端。

2.3.2 Bigtable的数据读取

Bigtable数据读取时以Tablet为单位,必须读取到构成该Tablet所有涉及到SSTABLE,发起读取操作时,首先要对操作完整性和权限做检查,检查通过后,首先在Tablet服务器所在的缓存里面查找,Bigtable提供二级缓存缓存,一种是以Key-Value形式的一级数据缓存,如果在这种级别中的缓存中无法找到,访问二级数据缓存,二级数据是SSTABLE的BLOCK数据缓存,对于热点局部性数据来讲,这种BLOCK环境命中率很高,对于系统性能改善更加有效。

在数据缓存中如果没有找到对应的读取数据,启动数据定位的三个步骤,完成对于TABLET的位置信息读取,TABLET信息读取转换为对应SSTABLE数据,根据SSTABLE数据是否进行了压缩,对于涉及到该TABLET的SSTABLE进行解压操作,完成读取后返回到客户端。

2.3.3 Bigtable的数据写入

Bigtable数据写入时,首先是坚持该操作数据格式是否正确,并判断该操作发起者是否有该操作的权限,权限判断是通过存储在Chubby服务器上面的权限控制表来判断。判断操作发起者具备该操作的权限后,会发起具体写入数据动作,该动作是一个事务操作,操作必须保证对于Tablet中数据写入成功,否则不会写入TABLET,如果写入成功后,会把提交该操作修改到Tablet对应的Redo日志中,同时该写入内容会插入到MEMTABLE中。

2.4 应用场景

2.4.1 应用场景

Bigtable从数据存储特点看,属于行式数据库存储模型,虽然Bigtable具备把列分配到不同的SSTABLE,形成不同的列簇的情况。由于Bigtable采用按照行存储模型,因此对于数据表中的一行可以实现事务性操作,实现数据单表上的事务控制,虽然Bigtable提供了批量数据的访问接口,但是还不支持跨行的事务操作。

而Bigtable采用的KV结构,可以按照Key中的行关键字和列关键字,对于海量数据进行列维度和行维度的切片管理,分别到同步到TABLET服务器上面。在一个BIGTABLE系统中,TABLET服务器的数量可以根据负载要求,做动态的调整,对于TABLET服务器数量无上限,这样就可以支持对于数据库负载的水平扩展,根据GOOGLE提供的数据,单TABLET服务器在BLOCK为64KB时,KEY-VALUE中的VALUE为1K的长度是,可以支持1200次请求,一个TABLET服务器可以处理75M数据读取,当TABLET服务器数量增加后,其读取数据的能力可以提升,当并不会严格的遵循线性关系,可以从GOOGLE在BIGTABLE中提供的测试数据看出,TABLET服务器增加和整体系统吞吐能力提升的关系,参见图2-4。

可以看出对于TABLET的扫描和在TABLET中内存中的随机读,提升效率最为明显,这是由于在TABLET服务器增加过程中,此类操作都是在内存中进行,因此服务器越多,支持吞吐量就会更大。顺序读、随机写、顺序写提升比率低于前两种操作,顺序读由于读取SSTABLE到TABLET服务器时,一个BLOCK被读取时,SSTABLE中相邻接的BOLCK会被加载到BLOCK缓存中,后续会在缓存中被读取到该BLOCK,不在需要在从SSTABLE中读取。随机写和序列写在采用了批量提交的方式,通过数据流的方式来进行处理,此种操作方式随TABLET的增加,提升效果还是比较明显。谁TABLET服务器提升效果最低的为随机读,原因是随机读取时,为了访问KEY-VALUE值中,VALUE为1K的数据时,会同步把整个SSTABLE中一个BLOCK都读取出来,当随机读取请求数量增加时,整个网络带宽会急剧上升,导致每个TABLET服务器吞吐能力下降,整个系统能够处理的随机请求数量变少。

图2-4 tablet 服务器与系统IO吞吐量关系图

2.4.2 应用场景下技术难题

从Bigtable应用场景看,BIGTABLE系统设计需要解决下面的核心技术

1.技术难题一系统鲁棒性

对于分布式环境,对于网络受损、内存数据损坏、时间误差,机器硬件损坏这这种常见的问题出现后,系统的容错处理能力,要求Bigtable系统具有较强的鲁棒性和容错性。

2.技术难题二 系统容错和负载与效率的平衡

TABLET副本数量增加会增加系统容错能力,但是会增加系统管理代价和同步成本,效率就会相应的下降;系统负载和效率增加,有限制了数据副本数量、副本数量下降会导致系统容错性减低,GOOGLE具体处理算法,这些在GOOGLE对外公布的论文中没有进行详细的描述,在开源产品HBASE遇到问题看,这些都是一些技术难点。

3.技术难题三 不同查询特点的应对

由于系统不同查询特点,数据特点,对于BIGTABLE中的各种关键配置参数的配置方式,比如SSTABLE中BLOCK大小的选择、缓存算法设计细节。

上面的这些技术难题相信已经被GOOGLE很好的解决,不过这些解决经验和具体技术细节GOOGLE并没有进行公开。

2.4.3 BIGTABLE后续发展

Bigtable做为GOOGLE公布的第一代分布式数据库技术,结合下层的GFS文件系统,上结合MAP-REDUCE框架完成数据的分片计算,构成了GOOGLE的分布式计算体系。而BIGTABLE目前只有在一个系统只支持一个Master服务器,同时对于多表事务性无法支持,这些都是Bigtable后续要解决的技术问题。对于不同特点数据库查询请求,不同特点存放数据,BIGTABLE的关键参数应该如何配置,是否有一种完美的配置参数,可以完全满足各种不同特点的查询场景,从目前来看,还不能做到的,还必须根据数据特点,对BIGTABLE的参数做相应定制,包括一些BIGTABLE要使用的GFS文件配置参数、网络配置参数,这些都成为使用Bigtable数据库过程中一些较为复杂问题,整个Bigtable数据库使用技术门槛仍然比较高。

   
次浏览       
相关文章

基于EA的数据库建模
数据流建模(EA指南)
“数据湖”:概念、特征、架构与案例
在线商城数据库系统设计 思路+效果
 
相关文档

Greenplum数据库基础培训
MySQL5.1性能优化方案
某电商数据中台架构实践
MySQL高扩展架构设计
相关课程

数据治理、数据架构及数据标准
MongoDB实战课程
并发、大容量、高性能数据库设计与优化
PostgreSQL数据库实战培训
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

MySQL索引背后的数据结构
MySQL性能调优与架构设计
SQL Server数据库备份与恢复
让数据库飞起来 10大DB2优化
oracle的临时表空间写满磁盘
数据库的跨平台设计
更多...   


并发、大容量、高性能数据库
高级数据库架构设计师
Hadoop原理与实践
Oracle 数据仓库
数据仓库和数据挖掘
Oracle数据库开发与管理


GE 区块链技术与实现培训
航天科工某子公司 Nodejs高级应用开发
中盛益华 卓越管理者必须具备的五项能力
某信息技术公司 Python培训
某博彩IT系统厂商 易用性测试与评估
中国邮储银行 测试成熟度模型集成(TMMI)
中物院 产品经理与产品管理
更多...