У меня есть некоторые события приложения.
Я хочу, чтобы эти события доставлялись в несколько мест: периодически поворачиваемый файл (в моем собственном формате TSV), шина сообщений (в моем случае Kafka) для архивирования в сетевом ресурсе (в моем случае - Amazon Glacier).
У меня есть то, что я думаю, должно быть очень фундаментальной проблемой. Я хочу, чтобы мои приложения просто отправляли байты, которые они хотят отправить в несколько приемников, и чтобы у них был другой процесс, задачей которого является убедиться, что:
- сообщения достигают места назначения
- если пункт назначения недоступен, они буферизуются в памяти в течение некоторого периода времени
- если память заполнена, они буферизуются на диске в течение некоторого периода времени
- если мы застреваем, сообщения начинают отбрасываться, но когда вся сеть не работает, у нас есть возможность заметить, что мы начинаем отбрасывать сообщения.
Я хотел бы иметь возможность настроить поведение, описанное выше, с помощью нескольких простых параметров, определяющих объем выделяемой памяти, насколько важно, чтобы конкретное сообщение достигло своего пункта назначения (например, число повторных попыток и т.д.).
Для меня это звучит как довольно "основная" общая проблема (трудная, без сомнения, но я бы вообразил что-то существующее для этого). Я хочу записать байты в сокет Unix или что-то из моих приложений, и чтобы агент отвечал за буферизацию и повторную попытку доставить их в мои пункты назначения.
Существует ли такая вещь? Это то, для чего люди используют (r)syslog или journald?