Bigtable---分布式的结构化数据存储系统

Bigtable---分布式的结构化数据存储系统,第1张

sina

Bigtable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的PB 级的数据。Google 的很多项目使用Bigtable 存储数据,包括Web 索引、GoogleEarth、Google Finance。这些应用对Bigtable 提出的要求差异非常大,无论是在数据量上(从URL到网页到卫星图像)还是在响应速度上(从后端的批量处理到实时数据服务)。
Bigtable 已经实现了下面的几个目标:适用性广泛、可扩展、高性能和高可用性,Bigtable 是一个稀疏的、分布式的、持久化存储的多维度排序Map。

图一:一个存储Web 网页的例子的表的片断。行名是一个反向URL。contents 列族存放的是网页的内容,anchor 列族存放引用该网页的锚链接文本(alex 注:如果不知道HTML 的Anchor,请Google一把)。CNN 的主页被Sports Illustrater和MY-look 的主页引用,因此该行包含了名为“anchor:cnnsicom”和“anchhor:mylookca”的列。每个锚链接只有一个版本(alex 注:注意时间戳标识了列的版本,t9 和t8 分别标识了两个锚链接的版本);而contents 列则有三个版本,分别由时间戳t3,t5,和t6 标识。


Bigtable 通过行关键字的字典顺序来组织数据。表中的每个行都可以动态分区。每个分区叫做一个”Tablet”,Tablet 是数据分布和负载均衡调整的最小单位。

列族
Webtable 有个列族language,language 列族用来存放撰写网页的语言。
我们在language 列族中只使用一个列关键字,用来存放每个网页的语言标识ID。Webtable 中另一个有用的列族是anchor;这个列族的每一个列关键字代表一个锚链接,如图一所示。Anchor 列族的限定词是引用该网页的站点名;Anchor 列族每列的数据项存放的是链接文本。访问控制、磁盘和内存的使用统计都是在列族层面进行的。

时间戳
不同版本的数据通过时间戳来索引。Bigtable 时间戳的类型是64 位整型。
Bigtable 可以给时间戳赋值,用来表示精确到毫秒的“实时”时间;用户程序也可以给时间戳赋值。如果应用程序需要避免数据版本冲突,那么它必须自己生成具有唯一性的时间戳。数据项中,不同版本的数据按照时间戳倒序排序,即最新的数据排在最前面。为了减轻多个版本数据的管理负担,我们对每一个列族配有两个设置参数, Bigtable 通过这两个参数可以对废弃版本的数据自动进行垃圾收集。用户可以指定只保存最后n 个版本的数据,或者只保存“足够新”的版本的数据(比如,只保存最近7 天的内容写入的数据)。

Bigtable支持的其他特性
1、Bigtable 支持单行上的事务处理,利用这个功能,用户可以对存储在一个行关键字下的数据进行原子性的读-更新-写 *** 作。
2、Bigtable 允许把数据项用做整数计数器。
3、Bigtable 允许用户在服务器的地址空间内执行脚本程序
4、Bigtable 可以和MapReduce一起使用,MapReduce 是Google 开发的大规模并行计算框架。我们已经开发了一些Wrapper 类,通过使用这些Wrapper 类,Bigtable 可以作为MapReduce 框架的输入和输出。

Bigtable依赖于google的几项技术。用GFS来存储日志和数据文件;按SSTable文件格式存储数据;用Chubby管理元数据:
Bigtable是建立在其它的几个Google基础构件上的。BigTable 使用Google 的分布式文件系统(GFS)存储日志文件和数据文件。BigTable 集群通常运行在一个共享的机器池中,池中的机器还会运行其它的各种各样的分布式应用程序,BigTable 的进程经常要和其它应用的进程共享机器。BigTable 依赖集群管理系统来调度任务、管理共享的机器上的资源、处理机器的故障、以及监视机器的状态。
BigTable 内部存储数据的文件是Google SSTable 格式的。SSTable 是一个持久化的、排序的、不可更改的Map 结构,而Map 是一个key-value 映射的数据结构,key 和value 的值都是任意的Byte串,从内部看,SSTable 是一系列的数据块(通常每个块的大小是64KB,这个大小是可以配置的)。。SSTable 使用块索引(通常存储在SSTable 的最后)来定位数据块;在打开SSTable的时候,索引被加载到内存。每次查找都可以通过一次磁盘搜索完成:首先使用二分查找法在内存中的索引里找到数据块的位置,然后再从硬盘读取相应的数据块。也可以选择把整个SSTable 都放在内存中,这样就不必访问硬盘了。

BigTable 还依赖一个高可用的、序列化的分布式锁服务组件,叫做Chubby。Chubby有五个活跃副本,同时只有一个主副本提供服务,副本之间用Paxos算法维持一致性,Chubby提供了一个命名空间(包括一些目录和文件),每个目录和文件就是一个锁,Chubby的客户端必须和Chubby保持会话,客户端的会话若过期则会丢失所有的锁。

Bigtable 包括了三个主要的组件:链接到客户程序中的库、一个Master主服务器和多个Tablet片 服务器。
Bigtable会将表(table)进行分片,片(tablet)的大小维持在100-200MB范围,一旦超出范围就将分裂成更小的片,或者合并成更大的片。每个片服务器负责一定量的片,处理对其片的读写请求,以及片的分裂或合并。片服务器可以根据负载随时添加和删除。这里片服务器并不真实存储数据,而相当于一个连接Bigtable和GFS的代理,客户端的一些数据 *** 作都通过片服务器代理间接访问GFS。主服务器负责将片分配给片服务器,监控片服务器的添加和删除,平衡片服务器的负载,处理表和列族的创建等。注意,主服务器不存储任何片,不提供任何数据服务,也不提供片的定位信息。

客户端需要读写数据时,直接与片服务器联系。因为客户端并不需要从主服务器获取片的位置信息,所以大多数客户端从来不需要访问主服务器,主服务器的负载一般很轻。

Master 服务器主要负责以下工作:为Tablet 服务器分配Tablets、检测新加入的或者过期失效的Table 服务器、对Tablet 服务器进行负载均衡、以及对保存在GFS 上的文件进行垃圾收集。除此之外,它还处理对模式的相关修改 *** 作,例如建立表和列族。

我们使用一个三层的、类似B+树的结构存储Tablet 的位置信息。

第一层是一个存储在Chubby 中的文件,它包含了Root Tablet 的位置信息。这个Chubby文件属于Chubby服务的一部分,一旦Chubby不可用,就意味着丢失了root tablet的位置,整个Bigtable也就不可用了。
第二层是root tablet。root tablet其实是元数据表(METADATA table)的第一个分片,它保存着元数据表其它片的位置。root tablet很特别,为了保证树的深度不变,root tablet从不分裂。
第三层是其它的元数据片,它们和root tablet一起组成完整的元数据表。每个元数据片都包含了许多用户片的位置信息。

片的数据最终还是写到GFS里的,片在GFS里的物理形态就是若干个SSTable文件。下图展示了读写 *** 作基本情况。

BigTable和GFS的关系
集群包括主服务器和片服务器,主服务器负责将片分配给片服务器,而具体的数据服务则全权由片服务器负责。但是不要误以为片服务器真的存储了数据(除了内存中memtable的数据),数据的真实位置只有GFS才知道,主服务器将片分配给片服务器的意思应该是,片服务器获取了片的所有SSTable文件名,片服务器通过一些索引机制可以知道所需要的数据在哪个SSTable文件,然后从GFS中读取SSTable文件的数据,这个SSTable文件可能分布在好几台chunkserver上。
一个简化的Bigtable结构图:

结构图以Webtable表为例,表中存储了网易、百度和豆瓣的几个网页。当我们想查找百度贴吧昨天的网页内容,可以向Bigtable发出查询Webtable表的(combaidutieba, contents:, yesterday)。

假设客户端没有该缓存,那么Bigtable访问root tablet的片服务器,希望得到该网页所属的片的位置信息在哪个元数据片中。使用 METADATAWebtablecombaidutieba 为行键在root tablet中查找,定位到最后一个比它大的是 METADATAWebtablecombaidu>

国内可以尝试阿里云腾讯云这两家,稳定性、品牌力度、速度、售后、技术都是很不错的。

1、注册域名
2、选购服务器
3、网站备案
4、搭建网站环境
5、安装网站程序
6、充实网站内容

不一定,淘宝上实现自动发货的方式有很多种,其中一种方式是通过购买自动化软件来实现,而不一定需要购买服务器。一些自动化软件可以集成到淘宝店铺的后台系统中,用户可以通过简单的设置实现自动发货的功能。但是如果需要处理高并发量的订单数据,那么购买服务器可能是一个更好的选择。无论选择哪种方式,都需要注意确保信息安全和数据安全,保护用户账户及交易信息。不一定,淘宝上实现自动发货的方式有很多种,其中一种方式是通过购买自动化软件来实现,而不一定需要购买服务器。一些自动化软件可以集成到淘宝店铺的后台系统中,用户可以通过简单的设置实现自动发货的功能。但是如果需要处理高并发量的订单数据,那么购买服务器可能是一个更好的选择。无论选择哪种方式,都需要注意确保信息安全和数据安全,保护用户账户及交易信息。

jumpserver堡垒机官方地址:
>FastDFS是一个开源的轻量级分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。 FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
FastDFS是一个开源的轻量级分布式文件系统,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。
FastDFS系统结构如下图所示:

跟踪器和存储节点都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为 了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就 是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负 载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。

FastDFS file upload
上传文件交互过程:
1 client询问tracker上传到的storage,不需要附加参数;
2 tracker返回一台可用的storage;
3 client直接和storage通讯完成文件上传。
FastDFS file download
下载文件交互过程:
1 client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2 tracker返回一台可用的storage;
3 client直接和storage通讯完成文件下载。
需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。
google code地址:>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13311152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-12
下一篇 2023-07-12

发表评论

登录后才能评论

评论列表(0条)

保存