Доброго дня. Возможно я изобретаю колесо, но требуется создать сервис для сбора
и обработки частых событий. События прибывают REST/POST запросом и несут в себе
немного данных в JSON. Периодически группа рабочих задач бежит по собранным
событиям и строит свои расчеты.
Требуется некий сервис/БД, оптимизированная под запись логов. В идеале такой
сервис должен представлять собой большое полотно, на котором размещены два
курсора. Один курсор только пишет, позади него курсор только читает. Казалось
бы, это простейшая работа с файлом, но есть требования:
* Курсор на запись должен писать крайне быстро, желательно без реального I/O,
сразу возвращая управление. Редкая потеря событий не проблема. Некоторым
асинхронным способом база должна регулярно сбрасывать накопленное на диск.
* В буквальном смысле сотни процессов могут одновременно писать события.
Т.к. база пишется только на добавление, никакие блокировки не допустимы.
* Чтение выполняется большими блоками и сразу после чтения данные
автоматически удаляются. Читают не более десятка процессов одновременно.
Один процесс всегда читает один блок или должен быть механизм, согласно
которому два процесса могут узнать, что прочли пересекающиеся данные.
* Данных может быть очень много. С точки зрения будущего, если такой сервис
можно собрать в кластер, то было бы совсем идеально. Иначе придется читать
чаще.
* Так как данных много, то их совсем не за чем держать в памяти попусту,
кроме как для буфера записи.
Может кто–то сталкивался с подобной задачей и может посоветовать как/куда
сбрасывать полотно с логами?
Можно, но хотелось бы готовое решение. Главная проблема - это обеспечить одновременную запись с большого множества процессов без блокировок. Может приходить 50к сообщений в секунду, в пиковые моменты много больше. При этом сами сообщения не надо выстраивать в каком либо порядке и редкие потери не страшны. Главное очень краткое О(1) время записи.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.