Auklet

OpenStack Swift 海量小文件解决方案
授权协议 Apache 2.0
开发语言 Google Go
所属分类 服务器软件、 分布式应用/网格
软件类型 开源软件
地区 国产
投 递 者 申炳
操作系统 跨平台
开源组织 爱奇艺
适用人群 未知
 软件概览

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

功能特性

  • 保留大部分 OpenStack Swift 特性

  • 有效解决 LOSF 问题

  • 对大型的对象存储进行优化

  • 针对复制引擎的惰性迁移(lazy migration),可从现有的 Swift 复制引擎进行零迁移工作。不过仍处于实验性阶段

限制

  • 不支持 EC

OpenStack Swift 是一个开源的分布式对象存储系统,爱奇艺自从2012年便开始使用 Swift,其所具有的简单易运维等特点,非常适合爱奇艺的业务,因此其在爱奇艺发挥了非常重要的作用。

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

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

  • 对象数据存在大文件上

  • 对象元数据保存在 RocksDB 中

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

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

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

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


性能比较


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

 相关资料
  • 本文向大家介绍rsync备份海量文件时占用大量内存的解决方法,包括了rsync备份海量文件时占用大量内存的解决方法的使用技巧和注意事项,需要的朋友参考一下 linux发行版中大多都自带rsync,不过版本比较低,一般都是2.6.X 在2.X的版本中,rsync备份时都是先列表再备份(添加或者删除),在处理大量文件时,会耗费比较多的内存。 备份的时候,rsync扫描到的每个文件(目录也一样),在它的

  • 本文向大家介绍asp.net批量多选文件上传解决方案,包括了asp.net批量多选文件上传解决方案的使用技巧和注意事项,需要的朋友参考一下 多选文件上传,已经非常多了,选择性多了可能有时候要比较下哪个更合适,结合到项目中使用更方便才是最重要的。很多的多选上传基本上都是调用的swf文件,确实用flash 或flex开发一个多选上传的功能很方便,比如flex里内置的FileReferenceList对

  • 问题内容: 对于小型项目,是否有内置的SQLite(或类似方法)保持SQL / NoSQL的优点,即: 存储 在 像SQLite这样 的(平面)文件中 (没有客户端/服务器方案,没有要安装的服务器;更精确的是:除了,无需安装其他任何东西) 可以将行存储为, 而 无需为每行都具有通用的结构,例如NoSQL数据库 支持简单查询 例子: 注意:这些年来,我一直惊讶于SQLite在几行代码中实际上有多少有

  • 我有一个包含多个项目的解决方案,其中一个项目是 Web 应用程序,我希望在使用 MSBuild 构建解决方案时能够使用 web.release.config 转换 web.config。当我打电话时 MSBuild"WebProject.csproj" /t:TransformWebConfig /p:配置=发布 在 Web 项目上,我将转换后的 web.config 输出为 ...\obj\Re

  • 问题内容: 我仍在全神贯注地了解Java中并发的工作方式。我知道(如果您订购的是OO Java 5并发模型)则分别实现a 或with 或or 方法,并且它应该使您尽可能多地并行实现该方法。 但是我仍然不了解Java并发编程的内在知识: 一个是怎样的方法分配给执行工作的同时适量的? 作为一个具体的例子,如果我有一个I / O绑定的方法,该方法将从本地系统上的文件中读取Herman Melville的

  • 本文向大家介绍Linux中文件/文件夹无法删除的解决方案,包括了Linux中文件/文件夹无法删除的解决方案的使用技巧和注意事项,需要的朋友参考一下 前言 最近我们的服务器被黑客攻击,然后有些文件的属性被修改,导致我们无法删除病毒文件,同时采用 root 用户也无法删除,现在把解决方案记录下来。 普通删除 如果文件是当前用户的,那么使用 rm 命令就可以删除 如果无法删除,则尝试使用 root 用户

  • 问题内容: 我正在使用AngularJS与Web服务进行交互,用于提取公开的各种实体。其中一些实体是图像,因此我需要能够使用“对象” 的动作在同一请求中发送二进制数据和文本字段。 如何在单个请求中使用AngularJS的服务发送数据并将图像上传到宁静的Web服务? 问题答案: 我进行了无数次搜索,尽管可能会错过它,但找不到该问题的解决方案:使用$ resource操作上传文件。 让我们举个例子:R

  • 本文向大家介绍ASP.NET对大文件上传的解决方案,包括了ASP.NET对大文件上传的解决方案的使用技巧和注意事项,需要的朋友参考一下 首先,我们需要下载这个名为 RanUpLoad 的组件。 下载完成之后,两个 dll 文件添加到项目的引用中区,xml 文件也要复制在项目中的 bin 文件夹下,也就是最后三个文件都要存在于 bin 文件夹中。 接着,上传控件还是用 ASP.NET 中自带的 Fi