首页 > 云计算 > 正文

YunTable的架构

2010-12-24 11:10:29  来源:it168

摘要:YunTable架构上,主要可分为Region、Master和Client这三个模块,而且这三个模块都是独立的,并负责各自的业务逻辑。首先,介绍一下Master节点。
关键词: YunTable架构

  在架构上,主要可分为Region、Master和Client这三个模块,而且这三个模块都是独立的,并负责各自的业务逻辑。首先,介绍一下Master节点。

  Master节点

  随着项目的发展,Master节点的作用也在不断地变化中,特别是0.2版中引入了BigTable中轻Master的理念,也就是说,0.2版中的Master已经不像之前版本那样负责在Region和Client之间对请求和数据进行分发,而只负责维护Table和Region节点之间的对应关系,实际数据的查询和输入则都通过Region节点和Client端之间的交互完成,和Master无关,这样能有效地减轻Master的负担,使得其能支撑百台服务器以上的集群。举个例子,比如,当一个Client端需要处理某个Table的时候,它只需在第一次处理时候,向Master请求和这个Table相关的Region节点的地址,当之后再次处理到这个Table的时候,Client端无需再和Master节点进行沟通,而是直接和相关的Region节点进行交互即可。

  Region节点

  Region节点,也就是上面所提到的子节点,其作用是负责来自Client端的数据处理请求,并存储和管理大量的数据,Region节点非常类似BigTable论文中所提到的Tablet服务器。每个Region服务器管理多个Tablet,每个Tablet对应一个Column Family,并负责存储属于这个Column Family的数据。除了管理多个Tablet之外,Region服务器还自带WAL日志,全称为“Write-Ahead Log”,主要用于暂存那些最新的数据更新请求,以避免当Tablet中的Memstore被意外关闭时所造成的数据丢失,而当Memstore完成对数据的写入之后,WAL也会清空那些对应的请求。

  Tablet,就像上面所说的那样,每个Tablet对应一个column family,而一个Table会有多个Column Family组成,所以一个Table也是由多个有可能分布在不同机器上的Tablet组成。Tablet的实际存储形式为一个以“Tablet”为前缀的目录。Tablet主要有两大部分组成:其一是Memstore:其是缓存在内存的数据文件,主要存储最新添加的数据,当Memstore存储的数据接近限定值时,在Memstore上缓存的数据都将会被冲刷(Flush)到YFile中;其二是YFile,他是主要用于存储数据的持久化文件,在格式上,它是一连串经过排序的键值对,并在文件的末尾加入相应的索引,并且在写入之后是不可修改(Immutable)的,YFile只会在当Memstore被触发冲刷时创建,平时常被顺序读,这样能有效地利用硬盘顺序读性能好的特性。YFile在实现方面参考了HBase的HFile格式和Google的SSTable格式,并做了相应的简化,文件的位置在其所属Tablet的目录中。

  Client端

  现在Client端基本等同于前面提到的命令行,主要用于让用户输入与数据处理相关的命令,并与后端的Master节点和Region节点进行交互,但随着时间的发展,在形式上,Client端有可能是类似JDBC的驱动等。

\

  工作流程

  在流程方面,将介绍一下YunTable数据的添加和查询这两个流程,以让大家进一步理解YunTable架构

  添加流程:

  用户在Client端输入添加命令,比如:“put table:people row:me address.homeaddress:"sh"”。

  Client会查找其缓存是不是有和命令中提到的“people”Table相对应的Region(可以对应多个)的信息,如果没有的话,Client会去访问Master节点去获取相关信息。

  当Client得到对应Region的地址时,并会将这个命令发送出去。

  之后,Region先将这个请求记录到WAL中,接着会将根据请求中数据所属Table和Column Family来传递给对应的Tablet,比如,在上面例子中,应该传递给属于“People”这个Table,并且Column Family为“address”的Tablet。

  Tablet会将这个请求添加至Memstore中,并返回Region添加成功的信息,最后,Region会把这个信息传回给Client端。

  查询流程:

  用户在Client端输入添加命令,比如:“get table:people row:me”。

  与上面第2步一致。

  与上面第3步一致。

  Region会轮询本地所有属于“People”这个Table 的Tablet。

  每个Tablet都会查询其Memstore和所有YFile,得到所有Row Name为”me”的数据,并将这些数据访问Region。

  Region接着把这些数据返回给Client,之后Client会通过返回数据的Timestamp来去掉其中那些过期的数据,并留下的最新的数据,将它们显示在命令行中。


第三十六届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:sr130

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。