Auklet OpenStack Swift 海量小文件解决方案 Auklet

agolangf2018-07-02 15:30:00 • 4039 次点击    
这是一个分享于 2018-07-02 15:30:00 的项目,其中的信息可能已经有所发展或是发生改变。

Auklet 是 OpenStack Swift 对象服务器的重新实现,旨在解决在 OpenStack Swift 中储存海量小文件时存在的问题。Auklet 基于 OpenStack Swift 和 Hummingbird 而生,由爱奇艺开源。

OpenStack Swift 是一个开源的分布式对象存储系统,自2012年起便被用于爱奇艺的视频文件存储业务当中。随着公司业务的发展,除了视频之外,一些其他的类型的存储需求也大了起来,比如说图片,文本等。当这些类型的图片存得越来越多的时候,一些对性能非常敏感的业务就反映性能变得很差。究其原因,是由于 OpenStack Swift 底层持久层的架构所致,对于每个上传的对象,在 Swift 后台都会单独保存成一个 POSIX 文件,更糟糕的是,每个对象都会有一个多级目录,因此每次上传一个对象,都要先创建相关目录,再创建新的文件来保存对象。当文件系统上的对象越来越多,这些操作就会越来越耗时,如果对象很大,那么这部分开销相对于整个读写过程来说是可以忽略的,但是当对象很小的时候,这个问题就会被凸显出来。

Auklet 通过以下方式来解决问题:

对象数据存在大文件上

对象元数据保存在 RocksDB 中

对象在大文件中的偏移量保存到 RocksDB 中

每个 Swift partition 对应一个大文件,这样通过 hash 计算就能知道对象所在大文件的位置,避免了通过中心节点去查询大文件的位置

对象删除采用文件打洞的方式,因此删除一个对象时,空间能够实现即时回收。

Auklet pack engine(打包引擎)架构:

image

性能比较

image

项目介绍整理自:爱奇艺技术产品团队

Auklet is a high performance storage engine based on Openstack SwiftRead More

Latest commit to the master branch on 3-19-2019
Download as zip
授权协议:
Apache 2.0
开发语言:
Google Go 查看源码»
操作系统:
跨平台
4039 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传