All Projects → rabbitmq → Rabbitmq Msg Store Index Eleveldb

rabbitmq / Rabbitmq Msg Store Index Eleveldb

LevelDB-based message store index for RabbitMQ

Programming Languages

erlang
1774 projects

Projects that are alternatives of or similar to Rabbitmq Msg Store Index Eleveldb

Amqp
EventMachine-based RabbitMQ client. Prefer Bunny: http://rubybunny.info. See documentation guides at http://rubyamqp.info.
Stars: ✭ 631 (+3843.75%)
Mutual labels:  rabbitmq
Simplemall
基于SpringCloud的微服务架构实战案例项目,以一个简单的购物流程为示例,融合spring cloud 相关组件,如spring-cloud-netflix、swagger等
Stars: ✭ 687 (+4193.75%)
Mutual labels:  rabbitmq
Nodock
Docker Compose for Node projects with Node, MySQL, Redis, MongoDB, NGINX, Apache2, Memcached, Certbot and RabbitMQ images
Stars: ✭ 734 (+4487.5%)
Mutual labels:  rabbitmq
Node Celery
Celery client for Node.js
Stars: ✭ 648 (+3950%)
Mutual labels:  rabbitmq
Leveldown
Pure C++ Node.js LevelDB binding. An abstract-leveldown compliant store.
Stars: ✭ 678 (+4137.5%)
Mutual labels:  leveldb
Bifrost
Bifrost ---- 面向生产环境的 MySQL 同步到Redis,MongoDB,ClickHouse,MySQL等服务的异构中间件
Stars: ✭ 701 (+4281.25%)
Mutual labels:  rabbitmq
Rabbitmq Tutorials
Tutorials for using RabbitMQ in various ways
Stars: ✭ 5,643 (+35168.75%)
Mutual labels:  rabbitmq
Goodskill
🐂基于springcloud +dubbo构建的模拟秒杀项目,模块化设计,集成了分库分表、elasticsearch🔍、gateway、mybatis-plus、spring-session等常用开源组件
Stars: ✭ 786 (+4812.5%)
Mutual labels:  rabbitmq
Rawrabbit
A modern .NET framework for communication over RabbitMq
Stars: ✭ 682 (+4162.5%)
Mutual labels:  rabbitmq
Nano Sql
Universal database layer for the client, server & mobile devices. It's like Lego for databases.
Stars: ✭ 717 (+4381.25%)
Mutual labels:  leveldb
Jboot
一个优雅的微服务框架,SpringCloud 之外的另一个选择,已经使用在用户量过亿的商业产品上,有超过1000家公司在使用Jboot做极速开发...
Stars: ✭ 655 (+3993.75%)
Mutual labels:  rabbitmq
Pmacct
pmacct is a small set of multi-purpose passive network monitoring tools [NetFlow IPFIX sFlow libpcap BGP BMP RPKI IGP Streaming Telemetry].
Stars: ✭ 677 (+4131.25%)
Mutual labels:  rabbitmq
Pitstop
This repo contains a sample application based on a Garage Management System for Pitstop - a fictitious garage. The primary goal of this sample is to demonstrate several software-architecture concepts like: Microservices, CQRS, Event Sourcing, Domain Driven Design (DDD), Eventual Consistency.
Stars: ✭ 708 (+4325%)
Mutual labels:  rabbitmq
Practical.cleanarchitecture
Asp.Net Core 5 Clean Architecture (Microservices, Modular Monolith, Monolith) samples (+Blazor, Angular 11, React 17, Vue 2.6), Domain-Driven Design, CQRS, Event Sourcing, SOLID, Asp.Net Core Identity Custom Storage, Identity Server 4 Admin UI, Entity Framework Core, Selenium E2E Testing, SignalR Notification, Hangfire Tasks Scheduling, Health Checks, Security Headers, ...
Stars: ✭ 639 (+3893.75%)
Mutual labels:  rabbitmq
Mall Swarm
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。
Stars: ✭ 7,874 (+49112.5%)
Mutual labels:  rabbitmq
Aio Pika
AMQP 0.9 client designed for asyncio and humans.
Stars: ✭ 611 (+3718.75%)
Mutual labels:  rabbitmq
Spring Boot Examples
about learning Spring Boot via examples. Spring Boot 教程、技术栈示例代码,快速简单上手教程。
Stars: ✭ 26,812 (+167475%)
Mutual labels:  rabbitmq
Springcloud Learning
Spring Cloud基础教程,持续连载更新中
Stars: ✭ 6,839 (+42643.75%)
Mutual labels:  rabbitmq
Spring Cloud Netflix Example
spring-cloud-netflix-example is an example for microservices system
Stars: ✭ 760 (+4650%)
Mutual labels:  rabbitmq
Fw Cloud Framework
基于springcloud全家桶开发分布式框架(支持oauth2认证授权、SSO登录、统一下单、微信公众号服务、Shardingdbc分库分表、常见服务监控、链路监控、异步日志、redis缓存等功能),实现基于Vue全家桶等前后端分离项目工程
Stars: ✭ 717 (+4381.25%)
Mutual labels:  rabbitmq

ElevelDB Message Store Index for RabbitMQ

This plugin provides a message store index implementation (module) for RabbitMQ, based on ELevelDB.

The goal of the plugin is to provide "infinite" (limited by disk size only) message store index with constant memory usage. Default message store index implementation in RabbitMQ is RAM only.

Supported RabbitMQ Versions

This plugin targets RabbitMQ 3.7.

Installation

There are no binary builds of this plugin yet. Build it from source like any other plugin.

Configuration

To configure RabbitMQ to use the index module:

[{rabbit, [{msg_store_index_module, rabbit_msg_store_eleveldb_index}]}].

To set ElevelDB memory limit to 100MB:

[{rabbit,   [{msg_store_index_module, rabbit_msg_store_eleveldb_index}]},
 {eleveldb, [{total_leveldb_mem, 104857600}]}].

To set ElevelDB memory limit to 100MB and bloom filter size to 10 million messages (will consume ~ 23MB), so the total index memory consumption will be ~ 123MB:

[{rabbit, [{msg_store_index_module, rabbit_msg_store_eleveldb_index}]},
 {rabbitmq_msg_store_index_eleveldb, [{bloom_filter_size, 10000000}]},
 {eleveldb, [{total_leveldb_mem, 104857600}]}].

LevelDB supports several configuration options, which can be configured for the index:

[{rabbit, [{msg_store_index_module, rabbit_msg_store_eleveldb_index}]},
 {rabbitmq_msg_store_index_eleveldb, [
    % Set the write buffer size to 50MB to have less disk flushes and bigger
    % initial file size.
    {open_options, [{write_buffer_size, 52428800}]},
    % Will verify all read data. Can use more CPU and make reads slower.
    % False by default.
    {read_options, [{verify_checksums, true}]},
    % Will sync all writes to disk.
    % Disabled by default, because index is being recalculated if message store
    % wasn't stopped gracefully.
    {write_options, [{sync, true}]}
    ]}].

Implementation Details

The plugin uses a rotating bloom filter to detect entries which weren't added, or were removed from the index. This reduce a throughput for messages that are consumed before being synced to disk.

Bloom filter is based on ebloom library

Message store index serves as a synchronization point of a message store process and a message store GC process. This plugin uses a gen_server process to provide this synchronization.

Memory Usage

RabbitMQ relies on message store index to keep track of messages reference counting and locating message position on disk. Each message location record takes approximately 128 bytes. This means that 1 million messages in the default ETS-backed index will consume ~ 120MB of memory, 10 million will require a little over 1GB, and so on.

The amount of memory consumed by the ElevelDB-based index depends on several settings. You can configure total_leveldb_mem application environment variable to set memory limit for LevelDB itself. Increasing the limit can increase the throughput for large message stores.

Bloom Filters

A pair of Bloom filters used by this implementation will consume 2.28 MB per million messages and its size should be configured using bloom_filter_size application environment variable. The default value for this variable is 1 million.

If there are more messages in a message store, false positives rate will increase and throughput will drop.

The effective bloom filter is being rotated when messages are deleted. If the number of messages added since the last rotation is higher than 60% of prediceted size, and number of messages removed is higher than 30% of that size - the filter will be rotated to reflect the new set of messages.

LICENSE

See the LICENSE file.

Copyright

(c) Pivotal Software Inc., 2007-2018.

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].