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

agolangf • 3886 次点击    
这是一个分享于 的项目,其中的信息可能已经有所发展或是发生改变。
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](https://oscimg.oschina.net/oscnet/9582fb68fa19e25d91535bd59837076367a.jpg) 性能比较 ![image](https://oscimg.oschina.net/oscnet/f569089069eaf6fa882bfa079ef5d411b9c.jpg) 项目介绍整理自:[爱奇艺技术产品团队](https://mp.weixin.qq.com/s/YTiEJLWMjkv-8hScR3nf6w)
授权协议:
Apache 2.0
开发语言:
Google Go 查看源码»
操作系统:
跨平台
3886 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传