Быстрый на запись сервис/БД для логов?

Доброго дня. Возможно я изобретаю колесо, но требуется создать сервис для сбора
и обработки частых событий. События прибывают REST/POST запросом и несут в себе
немного данных в JSON. Периодически группа рабочих задач бежит по собранным
событиям и строит свои расчеты.

Требуется некий сервис/БД, оптимизированная под запись логов. В идеале такой
сервис должен представлять собой большое полотно, на котором размещены два
курсора. Один курсор только пишет, позади него курсор только читает. Казалось
бы, это простейшая работа с файлом, но есть требования:

* Курсор на запись должен писать крайне быстро, желательно без реального I/O,
сразу возвращая управление. Редкая потеря событий не проблема. Некоторым
асинхронным способом база должна регулярно сбрасывать накопленное на диск.
* В буквальном смысле сотни процессов могут одновременно писать события.
Т.к. база пишется только на добавление, никакие блокировки не допустимы.
* Чтение выполняется большими блоками и сразу после чтения данные
автоматически удаляются. Читают не более десятка процессов одновременно.
Один процесс всегда читает один блок или должен быть механизм, согласно
которому два процесса могут узнать, что прочли пересекающиеся данные.
* Данных может быть очень много. С точки зрения будущего, если такой сервис
можно собрать в кластер, то было бы совсем идеально. Иначе придется читать
чаще.
* Так как данных много, то их совсем не за чем держать в памяти попусту,
кроме как для буфера записи.

Может кто–то сталкивался с подобной задачей и может посоветовать как/куда
сбрасывать полотно с логами?
  • Вопрос задан
  • 3520 просмотров
Решения вопроса 1
egor_nullptr
@egor_nullptr
Могу посоветовать Scribe.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
sajgak
@sajgak
elasticsearch + logstash.
При количестве сообщений больше 10к в секунду - желательно спереди поставить очередь.
Плюсы: эластик - поисковый индекс поверх апачевской люсины, с соответствующими возможностями поиска и фильтрации. logstash - сервис, позволяющий фильтровать проходящие через него данных по динамически генерируемому набору фильтров. очень удобно для обогащения / обеднения сообщений
Ответ написан
begemot_sun
@begemot_sun
Программист в душе.
Можно написать самим на Erlang в том числе распределенную на несколько машин. Каковы ваши требования по объему\производительности ?
Ответ написан
@portfelio
Кластер из 2+ машин с Riak. Запись в кластер через PB (en.wikipedia.org/wiki/Protocol_Buffers) если есть реализация на вашем ЯП или через REST.
Ответ написан
@portfelio
Альтернативный вариант - опять таки кластер, но на основе Tarantool (tarantool.org)
Ответ написан
@deep_orange
InfluxDB
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы