All Projects → bogdanovich → Siberite

bogdanovich / Siberite

Licence: other
Siberite is a simple, lightweight, leveldb backed message queue written in Go.

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Siberite

Taskq
Golang asynchronous task/job queue with Redis, SQS, IronMQ, and in-memory backends
Stars: ✭ 555 (-4.8%)
Mutual labels:  queue, message-queue
microq
Micro job queue built on mongo
Stars: ✭ 67 (-88.51%)
Mutual labels:  queue, message-queue
Bull
Premium Queue package for handling distributed jobs and messages in NodeJS.
Stars: ✭ 11,748 (+1915.09%)
Mutual labels:  queue, message-queue
Kubemq
KubeMQ is Enterprise-grade message broker native for Docker and Kubernetes
Stars: ✭ 58 (-90.05%)
Mutual labels:  queue, message-queue
orkid-node
Reliable and modern Redis Streams based task queue for Node.js 🤖
Stars: ✭ 61 (-89.54%)
Mutual labels:  queue, message-queue
Php Fpm Queue
Use php-fpm as a simple built-in async queue
Stars: ✭ 103 (-82.33%)
Mutual labels:  queue, message-queue
Redis Smq
A simple high-performance Redis message queue for Node.js.
Stars: ✭ 230 (-60.55%)
Mutual labels:  queue, message-queue
Message Bus
Go simple async message bus
Stars: ✭ 166 (-71.53%)
Mutual labels:  queue, message-queue
Nsq
A realtime distributed messaging platform (forked from https://github.com/nsqio/nsq)
Stars: ✭ 476 (-18.35%)
Mutual labels:  queue, message-queue
dynamic-queue
The dynamic queue
Stars: ✭ 17 (-97.08%)
Mutual labels:  queue, message-queue
Toro
Multithreaded message processing on Postgres
Stars: ✭ 39 (-93.31%)
Mutual labels:  queue, message-queue
Xxl Mq
A lightweight distributed message queue framework.(分布式消息队列XXL-MQ)
Stars: ✭ 358 (-38.59%)
Mutual labels:  queue, message-queue
Storage Based Queue
Javascript queue library with persistent storage based queue mechanism for the browsers environments. Specially designed for offline.
Stars: ✭ 33 (-94.34%)
Mutual labels:  queue, message-queue
Rsmq
Redis Simple Message Queue
Stars: ✭ 1,556 (+166.9%)
Mutual labels:  queue, message-queue
fs
[READ-ONLY] Enterprise queue solutions for PHP. Filesystem transport.
Stars: ✭ 32 (-94.51%)
Mutual labels:  queue, message-queue
jrsmq
A lightweight message queue for Java that requires no dedicated queue server. Just a Redis server.
Stars: ✭ 28 (-95.2%)
Mutual labels:  queue, message-queue
Nsq
A realtime distributed messaging platform
Stars: ✭ 20,663 (+3444.25%)
Mutual labels:  queue, message-queue
Coding Interview Gym
leetcode.com , algoexpert.io solutions in python and swift
Stars: ✭ 451 (-22.64%)
Mutual labels:  queue
Plumber
A swiss army knife CLI tool for interacting with Kafka, RabbitMQ and other messaging systems.
Stars: ✭ 514 (-11.84%)
Mutual labels:  message-queue
Jocko
Kafka implemented in Golang with built-in coordination (No ZK dep, single binary install, Cloud Native)
Stars: ✭ 4,445 (+662.44%)
Mutual labels:  queue

Siberite

License Build Release Go Walker

Siberite is a simple leveldb backed message queue server
(twitter/kestrel, wavii/darner rewritten in Go).

Siberite is a very simple message queue server. Unlike in-memory servers such as redis, Siberite is designed to handle queues much larger than what can be held in RAM. And unlike enterprise queue servers such as RabbitMQ, Siberite keeps all messages out of process, using goleveldb as a persistent storage.

The result is a durable queue server that uses a small amount of in-resident memory regardless of queue size.

Siberite is based on Robey Pointer's Kestrel - simple, distributed message queue. Like Kestrel, Siberite follows the "No talking! Shhh!" approach to distributed queues: A single Siberite server has a set of queues identified by name. Each queue is a strictly-ordered FIFO, and querying from a fleet of Siberite servers provides a loosely-ordered queue. Siberite also supports Kestrel's two-phase reliable fetch: if a client disconnects before confirming it handled a message, the message will be handed to the next client.

Compared to Kestrel and Darner, Siberite is easier to build, maintain and distribute. It uses an order of magnitude less memory compared to Kestrel, and has an ability to consume queue multiple times (using durable cursors feature).

Features

  1. Siberite clients can consume single source queue multiple times using get <queue>.<cursor_name> syntax.
  • Usually, with get <queue> syntax, returned message gets expired and deleted from queue.
  • With cursor syntax get <queue>.<cursor_name>, a durable cursor gets initialized. It shifts forward with every read without deleting any messages in the source queue. Number of cursors per queue is not limited.
  • If you continue reads from the source queue with usual syntax again, siberite will continue deleting already serverd messages from the head of the queue. Any existing cursor that is internally points to an already expired message will start serving messages from the current queue head on the next read.
  • Durable cursors are also support two-phase reliable reads. All failed reliable reads for each cursor get stored in cursor's own small persistent queue and get served to other cursor readers.
  1. Fanout queues
  • Siberite allows you to insert new message into multiple queues at once by using the following syntax set <queue>+<another_queue>+<third_queue> ...

Benchmarks

Siberite performance benchmarks

Build

Make sure your GOPATH is correct

go get github.com/bogdanovich/siberite
cd $GOPATH/src/github.com/bogdanovich/siberite
go get ./...
go build siberite.go
mkdir ./data
./siberite -listen localhost:22133 -data ./data
2015/09/22 06:29:38 listening on 127.0.0.1:22133
2015/09/22 06:29:38 initializing...
2015/09/22 06:29:38 data directory:  ./data

or download darwin-x86_64 or linux-x86_64 builds

Protocol

Siberite follows the same protocol as Kestrel, which is the memcache TCP text protocol.

List of compatible clients

Telnet demo

telnet localhost 22133
Connected to localhost.
Escape character is '^]'.

set work 0 0 10
1234567890
STORED

set work 0 0 2
12
STORED

get work
VALUE work 0 10
1234567890
END

get work/open
VALUE work 0 2
12
END

get work/close
END

stats
STAT uptime 47
STAT time 1443308758
STAT version siberite-0.4.1
STAT curr_connections 1
STAT total_connections 1
STAT cmd_get 2
STAT cmd_set 2
STAT queue_work_items 0
STAT queue_work_open_transactions 0
END

# other commands:
# get work/peek
# get work/open
# get work/close/open
# get work/abort
# get work.cursor_name
# get work.cursor_name/open
# get work.my_cursor/close/open
# set work+fanout_queue
# flush work
# delete work
# flush_all
# quit

Not supported

  • Waiting a given time limit for a new item to arrive /t= (allowed by protocol but does nothing)
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].