Twitter的跨数据中心图片存储系统Blobstore

Twitter一直没有自己的图片存储系统,此前系统从2011年6月开始内置采用Photobucket的服务,另外,也支持Instagram等第三方图片应用上传到Twitter系统中。随着Twitter整体由开放转向封闭,切断第三方图片上传,同时自行提供图片系统是势所必然的。

12月11日,Twitter工程博客发表文章,介绍了9月份已经上线使用的图片存储系统Blobstore的底层架构。其中比较引人注目的是,Blobstore支持多数据中心同步。GigaOM的文章指出,这与Google Spanner是异曲同工的。

文章如下:

Blobstore的设计目标

Blobstore是由Twitter开发的一个低成本和可扩展的的存储系统,可以用来存储图片以及其他的二进制对象(称为“blob”)。在开始构建Blobstore时,Twitter有三个设计目标:

  • 低成本:可以大大减少花费在添加图片到Tweet中的时间和成本。

  • 高性能:图片延迟保持在几十毫秒之内,同时保证每秒上千万张吞吐量的图片请求。

  • 易于操作:随着Twitter基础设施的不断增长,能够扩展操作开销。

 

Blobstore是如何进行工作的?

当用户推送一张照片,就会把照片发送到一组Blobstore前端的服务器。前端服务器解析后会给该照片一个特定的写地址,接下来将其转发到具体的服务器进行实际的数据存储。其实可以把这些存储服务器称之为存储节点,它们把照片信息存储到一个磁盘上,然后通知元数据存储——图像已经存储完毕并记录所需要的信息以便进行照片检索。元数据存储库,这是一个非关系型键/值存储集群,它可以自动的进行多数据中心(multi-data-center)的同步功能,更重要的是可以跨所有的Twitter的数据中心,进而在Blobstore上提供的一致性的视图数据。

Blobstore核心是Blob Manager,它运行在前端,用于存储节点以及索引集群。Blob Manager充当系统中心“协调员”的角色,对集群进行管理。它是所有前端信息(决定应该把文件存储到哪个地方)的源。不仅如此,它还负责更新映射,在增加存储节点或者由于添加失败节点被移除时,协调数据的迁移。

还有一点比较重要,就是依靠Kestrel。这是Twitter现有的异步队列服务器,主要用来处理任务,比如说复制图像以及确保数据中心中数据的完整性。

Twitter确保一旦图像上传成功,用户就可以立即从数据中心中进行读取,而且绝对是最原始的图像。而且在如此之短的时间内,图像已经复制到Twitter所有其他的数据中心之内,并且可以从这些数据中心进行读取。此功能主要依赖于Blobstore内的多数据中心元数据存储对文件的中央索引。Twitter高度关注短时间内一个图像是否被已经被写入它最初的数据中心,他们使用路由请求,确保该Kestrel队列能够进行数据复制。