`
thecloud
  • 浏览: 880515 次
文章分类
社区版块
存档分类
最新评论

NoSQL学习笔记(三)之BigTable

 
阅读更多

对于学习NoSQL的人来说,Google的BigTable的论文是必不可少要阅读的。在NoSQL领域,BigTable算是比较早的也是比较成熟的运用在应用上的产品。Google这么多年的稳定性能足以说明BigTable的优秀。于是最近我也看了BigTable的论文和网上一些关于BigTable的文章,对BigTable有了初步的了解。



1.简单说说BigTable

BigTable是Google提出的一个分布式的海量数据存储系统。Google将其运用在一些数据量较大的应用中。众所周知,对于一个大型的具有海量PV和海量数据的系统来说,其分布式服务是可以通过简单的增加节点进行扩展,但是底层的海量数据则因其单点和需要保持一致性等特点,成为一些大型系统的瓶颈。Google的BigTable就是底层海量数据的一个很好解决方案。从CAP理论来看的话,BigTable的思想是通过在一定程度上放弃底层数据的高可用性,主要加强的数据一致性和可扩展性。



2.BigTable的作用

每一个系统的设计都是为了实现一个问题的解决方案。那么BigTable的作用是什么,是为了解决什么问题的呢?BigTable的设计是为了对海量的数据进行快速存取,相对与普通的数据库而言,BigTable更加注重的是高效的存取性能,而不需要复杂的SQL逻辑。BigTable中无论是数据采用key-value的形式来进行存储,还是采用B+树的数据结构都是为了实现一个高性能的存取为目标的。BigTable用于海量数据,就比如google搜索引擎,google地图这样的操作相对简单的海量数据。而对于一些经常要改变的非海量数据,则使用传统的SQL数据比较合适。



3.BigTable的实现

BigTable将数据存在一个三维有序的表中,这个表除了传统二维表的row,column以外还增加了第三维TimeStamp,用来表示版本。这样rowid,colume family和timestamp就构成了一个三维有序的大表,数据就存储在这张大表中(当然这里的3维存储的格式和传统的数据库有一些不同)。

从上层来看的话,一个数据表就是一个三维有序的表的样子,而在底层来说,这个大表的实现方式则比较巧妙。每个大表被切分成若干个部分称为tablet,各个tablet分布在各个不同的tablet服务器上,这些tablet服务器都包含了缓存,日志和持久存储(这里的持久存储是将数据存储到GFS(Google File System)上去)。在每个服务器上缓存,日志和持久存储相互协作,最大程度的保证了数据的存取性能和安全性能。tablet服务器之间的负载均衡是通过合并与切分tablet来动态实现的,保证了服务器的高效利用。

当然为了提高性能和提高安全性,BigTable有一些其他机制。除了Tablet服务器以外还有Root服务器和Meta服务器,从Root服务器到Meta服务器再到Tablet服务器使用了B+树的数据结构,使得PV性能提高。在Tablet服务器之间存在一个Mater服务器用于统筹管理所有服务器的状态。BigTable还与Chubby紧密联系,添加了BigTable的安全性能。



4.关于BigTable客户端

对于使用BigTable的人来说,需要有一个BigTable的客户端来对BigTable进行调用,通过调用客户端的API来进行操作。BigTable集群中有一个Master服务器用来管理所有的tablet服务器,但是客户端几乎不和Master打交道,客户端存取数据的时候是通过Root-Meta-Tablet服务器的顺序找到相应的tablet,进而直接与tablet进行交互,并且将该tablet的位置缓存在客户端本地,后面则可以跳过Root-Meta服务器直接与tablet服务器交互。



5.BigTable和Google File System(GFS),MapReduce等

BigTable的设计者是SanjayGhemawat,他是Google公司在分布式系统方面很有成就的一个专家,他设计出了Google的这一套产品,包括GFS,MapReduced等等,这就导致了这一套产品之间是有着很大联系的,BigTable的设计很大程序上受到了其他几个产品的影响。BigTable的底层数据存储是建立在GFS之上的,其分布式的特点和GFS有着极其重大的联系。对于BigTable来说,如果要提高系统的PV性能的话需要扩展其tablet服务器,以减少每个tablet服务器的负载,而要提高系统存储性能的话需要扩展其底层的GFS服务器,扩展其数据的规模。这样将PV的扩展和数据量的扩展分离,使得整个系统更便于管理。另一方面,BigTable与MapReduce可以无缝的连接,不需要将数据从BigTable系统中取出来跑在独立的MapReduce的机器上进行MapReduce的job,可以直接在BigTable的服务器上进行MapReduce的计算。

以下是BigTable和Google其他产品的一些联系:

§GFS. Bigtable uses theGoogle FileSystemto store data and log files. Regular StorageMojo.com readers knowGFS imparts all kinds of performance and availability advantages without costlyRAID arrays.

§Cluster management. Google has aclustermanagement systemwhich so far seems publicly undocumented (maybethey’re embarrassed) that schedules, monitors and manages the Bigtable’scluster.

§SSTable. This is the underlying fileformat used to store Bigtable data. SSTables are designed so that a data accessrequires, at most, a single disk access. An SSTable, once created, is neverchanged. If new data is added, a new SSTable is created. Once an old SSTable isno longer needed, it is set out for garbage collection. SSTable immutability isat the core of Bigtable’s data checkpointing and recovery routines.

§Chubby. Cute name, huh? Chubby is thedistributed lock server that allows a multi-thousand node Bigtable cluster tostay coordinated. Chubby itself is a cluster app that maintains five activereplicas, one of which is the master. Like GFS’s master node, Chubby isarchitected to keep lock management traffic very light. Chubby also rules overtablet server life and death, stores access control lists, data schemas and thebootstrap location of Bigtable data.



6.关于BigTable的数据持久化

BigTable的数据存储持久化在GFS上,在每个tablet服务器上都有缓存,当缓存的数据达到一定的条件的时候即将数据以SSTable的形式持久化到GFS上去,在持久化的时候可以选择使用哪种方式进行压缩以提高压缩率。在GFS上的数据通常会有3个备份,这样就保证的数据的可用性。虽然说GFS是有3个备份,具有高可用性,为什么还说BigTable的数据是单点的,可用性不高呢?因为BigTable的数据存取入口是在tablet服务器上的,每个数据只可能存在于一个tablet服务器上,这就是所谓的单点,而一旦这个唯一的服务器挂了以后,在一段时间内这个数据就是无法访问的,这就限制了其高可用性。



7.来看看BigTable的运行情况

The tabletservers were configured to use 1 GB of memory and to write to a GFS cellconsisting of 1786 machines with two 400 GB IDE hard drives each. . . . Each[client]machine had two dual-core Opteron 2 GHz chips, enough physical memoryto hold the working set of all running processes, and a single gigabit Ethernetlink. The machines were arranged in a two-level tree-shaped switched networkwith approximately 100-200 Gbps of aggregate bandwidth available at the root.All of the machines were in the same hosting facility and therefore theround-trip time between any pair of machines was less than a millisecond.



8.关于机器的利用

下面是服务器的一份配置

The tabletservers and master, test clients, and GFS servers all ran on the same set ofmachines. Every machine ran a GFS server. Some of the machines also ran eithera tablet server, or a client process, or processes from other jobs that wereusing the pool at the same time as these experiments.

可见在一台机器上可以同时运行GFS服务器和BigTable服务器,而且还可以运行一些进程。其实,对于机器的利用,需要的是不同种类进程之间的互补,像GFS这样的服务器,比较多的消耗的是磁盘I/O,而对于CPU和内存来说则有很多空闲,BigTable主要消耗内存和磁盘I/O,客户端进程则主要消耗CPU,这样将几个进行互补,则可以充分的利用机器,使其最大程度的为我们服务。


9.BigTable的启示

(1)打破旧框框。对于计算机领域来说,没有什么是真理,一切都是人为创造出来的,而我们所学习所使用的东西只是在一段时间内能够适应需求而已,再过一段时间,或许他们都会被淘汰,而这其中也必然包括了这篇文章提高的BigTable。对于传统数据库不能有效的提供海量数据的存储,Google提出了BigTable的NoSQL方案是一种颠覆性的创造,打破了原有的数据库旧框框,实现了一种可以适应需求的新的系统。这是我们需要学习和提倡的。当然,敢于创造新的事物也是需要付出相当大的努力的,你无法想象BigTable背后有多少辛酸苦辣。

(2)简单即使美。从整体来说BigTable的整体结构是简单的,而简单的方法往往也是最有效的方法。听淘宝的放翁前辈说过,很多设计出来的系统起初很简单,但是为了解决存在的问题使得系统越来越复杂,而结果往往是引入了更多的问题,这样一个复杂的系统就是由于人为的创造问题而产生的。而简单,不仅仅是一种美,更多的是一种睿智和优雅的体现。



参考文献:

http://labs.google.com/papers/bigtable-osdi06.pdf

http://storagemojo.com/2006/09/07/googles-bigtable-distributed-storage-system-pt-i/

http://storagemojo.com/2006/09/08/google%E2%80%99s-bigtable-distributed-storage-system-pt-ii/


分享到:
评论
1 楼 mxdxm 2014-05-28  
总结不错,赞

相关推荐

Global site tag (gtag.js) - Google Analytics