All Projects → iqiyi → auklet

iqiyi / auklet

Licence: other
Auklet is a high performance storage engine based on Openstack Swift

Programming Languages

go
31211 projects - #10 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to auklet

Juicefs
JuiceFS is a distributed POSIX file system built on top of Redis and S3.
Stars: ✭ 4,262 (+4855.81%)
Mutual labels:  distributed-systems, object-storage
Sfs
The distributed object storage server used by PitchPoint Solutions to securely store billions of large and small files using minimal resources. Object data is stored in replicated volumes implemented like Facebooks Haystack Object Store. Object metadata which essentially maps an object name to a volume position is stored in an elasticsearch index.
Stars: ✭ 78 (-9.3%)
Mutual labels:  distributed-systems, object-storage
Dsync
A distributed sync package.
Stars: ✭ 377 (+338.37%)
Mutual labels:  distributed-systems, object-storage
Storj
Ongoing Storj v3 development. Decentralized cloud object storage that is affordable, easy to use, private, and secure.
Stars: ✭ 1,278 (+1386.05%)
Mutual labels:  distributed-systems, object-storage
Cortx
CORTX Community Object Storage is 100% open source object storage uniquely optimized for mass capacity storage devices.
Stars: ✭ 426 (+395.35%)
Mutual labels:  distributed-systems, object-storage
Seaweedfs
SeaweedFS is a fast distributed storage system for blobs, objects, files, and data lake, for billions of files! Blob store has O(1) disk seek, cloud tiering. Filer supports Cloud Drive, cross-DC active-active replication, Kubernetes, POSIX FUSE mount, S3 API, S3 Gateway, Hadoop, WebDAV, encryption, Erasure Coding.
Stars: ✭ 13,380 (+15458.14%)
Mutual labels:  distributed-systems, object-storage
consistent-hashing
an implementation of Consistent Hashing in pure Ruby using an AVL tree
Stars: ✭ 40 (-53.49%)
Mutual labels:  distributed-systems
coolbeans
Coolbeans is a distributed work queue that implements the beanstalkd protocol.
Stars: ✭ 56 (-34.88%)
Mutual labels:  distributed-systems
traffic
Massively real-time traffic streaming application
Stars: ✭ 25 (-70.93%)
Mutual labels:  distributed-systems
golearn
🔥 Golang basics and actual-combat (including: crawler, distributed-systems, data-analysis, redis, etcd, raft, crontab-task)
Stars: ✭ 36 (-58.14%)
Mutual labels:  distributed-systems
Gauntlet
🔖 Guides, Articles, Podcasts, Videos and Notes to Build Reliable Large-Scale Distributed Systems.
Stars: ✭ 336 (+290.7%)
Mutual labels:  distributed-systems
reacted
Actor based reactive java framework for microservices in local and distributed environment
Stars: ✭ 17 (-80.23%)
Mutual labels:  distributed-systems
file management sys
file_management_sys 是一个文件共享系统,包括前端文件展示系统和后台管理系统,基于SpringBoot + MyBatis实现。前端文件展示系统包括文件分类和展示界面,文件搜索和文件上传等模块。后台管理系统包含文件管理,权限管理等模块。
Stars: ✭ 60 (-30.23%)
Mutual labels:  distributed-systems
IoTPy
Python for streams
Stars: ✭ 24 (-72.09%)
Mutual labels:  distributed-systems
pixie
Instant Kubernetes-Native Application Observability
Stars: ✭ 3,238 (+3665.12%)
Mutual labels:  distributed-systems
MIT6.824-2017-Chinese
A Chinese version of MIT 6.824 (Distributed System)
Stars: ✭ 67 (-22.09%)
Mutual labels:  distributed-systems
asparagus
An easy to use task scheduler for distributed systems
Stars: ✭ 14 (-83.72%)
Mutual labels:  distributed-systems
nkn-shell-daemon
NKN shell daemon
Stars: ✭ 29 (-66.28%)
Mutual labels:  distributed-systems
b-rabbit
A thread safe library that aims to provide a simple API for interfacing with RabbitMQ. Built on top of rabbitpy, the library make it very easy to use the RabbitMQ message broker with just few lines of code. It implements all messaging pattern used by message brokers
Stars: ✭ 15 (-82.56%)
Mutual labels:  distributed-systems
sworm
A user-friendly distributed process registry and process supervisor
Stars: ✭ 20 (-76.74%)
Mutual labels:  distributed-systems

Table of Contents

Created by gh-md-toc

Introduction

Slack

Auklet is an reimplementation of OpenSwift Swift object server and aims at solving the problem when serving lots of small files in OpenStack Swift.

It is based on 2 existing projects

It does not change any API of OpenStack Swift which means there is no need to change any code of existing clients.

Features

  • Keep most of OpenStack Swift feature list
  • Address LOSF problem efficiently
  • Optimization for large object storage. Behaviour like replication engine when object is large.
  • Lazy migration for replication engine(experimental). ZERO migration effort from existing Swift replication engine!

Limitation

  • No EC support

Why Auklet

So why implement a new object server when there are Swift and Hummingbird?

Well, in iQIYI, we have tons of images and text files to save into Swift every day and some use cases are very sensitive to request latency. As we know, Swift supports 2 storage engines, namely erasure coding and replication. Unfortunely, neither of them is adequate to serve lots of small files(LOSF).

Hummingbird tries to reimplement OpenStack Swift in Golang but it does not address the LOSF problem yet.

Some other open source projects such asLinkedIn Ambry are good choices for small files. But at iQIYI, we have already run so many businesses upon Swift that there would be a big bit gap for us to switch to a new storage platform.

Why build Auklet upon Swift and Hummingbird

Why not just build Auklet upon single one platform like Swift or Hummingbird?

The essential idea to address LOSF problem is packing small objects into a single POSIX file which has been proved in Facebook's Haystack and LinkedIn Ambry.

As we know, Swift uses multiple concurrent WSGI servers to serve requests which makes it is not suitable to implement the idea mentioned above because extra complex concurrent coordination is required.

About Hummingbird, it is not mature yet so we cannot use it to replace Swift completely in our infrastructure at the moment. But it has at least implemented a nearly full feature prototype.

Then we decided to implement a new storage engine to address LOSF problem by leveraging the code base of Hummingbird. And initially, the new storage engine will work together with Swift to provide a full feature object storage platform. In fact, the new storage engine is just another implementation of replication engine but in order to make the transfer smoothly, we decides to give it a new name, pack engine.

Finally, we decided to release the project as open source so that any one encountes the same issue could benefit from it. Up to now, it has already run for more than 1 year in our production environment and it does solve the problem as expected.

License

This project is licensed under Apache License 2.0. See the LICENSE file.

This project may include a number of subcomponents with separate copyright notices and license terms. Your use of these subcomponents is subject to the terms and conditions of the subcomponent's license, as noted in the LICENSE file.

Getting Started

Since Auklet only implement part of the features of OpenStack Swift, an existing Swift environment is required.

Prepare a native Swift environment

NOTE: Only kilo version of OpenStack Swift is well tested at the moment!

Auklet may not work properly in SAIO, so we recommend installing a minimal Swift environment following our Tiny Swift guide which is more lightweight than SAIO.

Patch the existing Swift

There is a workaround to run Auklet with OpenStack Swift without touching the code of Swift. But it is dangerous since it could cause data deleted by Swift object replicator if you are not careful enough. Thus we provide a patch to get the job simple.

NOTE: Here we assume that you install Swift environment following our tiny Swift guide exactly.

cp $GOPATH/src/github.com/iqiyi/patches/pack-policy.patch /tmp/
cd /opt/openstack/swift-kilo/lib/python2.7/site-packages/swift
sudo patch -p5 < /tmp/pack-policy.patch
sudo su -c "source /opt/openstack/swift-kilo/bin/activate && swift-init reload all"

Deploy Auklet

  • Build Auklet following the dev guild.

  • Install binary

sudo mv bin/auklet /usr/local/bin
sudo mkdir -p /var/run/auklet
  • Change policy type by modifying /etc/swift/swift.conf.
[swift-hash]
swift_hash_path_prefix = changeme
swift_hash_path_suffix = emegnahc

[storage-policy:0]
default = yes
name = gold
policy_type = pack

[swift-constraints]
# Limit maximum object size to 5G
max_file_size = 5368709120
  • Configure log
sudo cp $GOPATH/src/github.com/iqiyi/auklet/etc/zap.yml /etc/swift/
sudo mkdir -p /var/log/auklet
sudo chown swift:swift -R /var/log/auklet

Have fun

  • Make sure Swift object server is stopped
sudo /opt/openstack/swift-kilo/bin/swift-init stop object
  • Start Auklet object server
sudo /usr/local/bin/auklet start object -l /etc/swift/zap.yml
  • Create a contaienr
curl -v -X PUT http://127.0.0.1:8080/v1/iqiyi/auklet
  • Upload an object
curl -v -X PUT -H "Content-Type: text/plain" -d "Hello World" http://127.0.0.1:8080/v1/iqiyi/auklet/hi

Contact

Contributing

Any form of contribution is welcomed. Check the dev doc to see how to setup a dev environment and begin to play with the code.

Acknowledgments

As mentioned before, Auklet is built upon many existing projects. We want to say thanks for those authors for the help.

  • The authors of OpenStack Swift for bring up a simple, scalable object storage platform
  • The authors of Hummingbird for guide us to find a shortcut to achieve the goal
  • The authors of RocksDB to provide such as high performance KV
  • Romain and Alex from OVH for the idea of reclaiming space by file hole punch
  • All the authors of projects list under vendor dir
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].