Каковы преимущества и недостатки использования файла для межпроцессного взаимодействия? Позвольте мне рассказать о контексте, в котором я задаю этот вопрос.Связь между процессами
Проблема заключается в проблеме классического производителя потребительских товаров с некоторыми ограничениями. Производители настроены на совместный процесс, выполняющийся на кластере машин и взаимодействуя друг с другом с помощью широковещательных передач. Каждый процесс имеет локальных пользователей, о которых он знает, а также позволяет другим процессам знать о них с помощью вышеупомянутого механизма вещания. До сих пор информация, передаваемая/передаваемая государством, не сохранялась, но теперь она должна быть.
Эта система работает на производстве уже много лет, поддерживая тысячи пользователей, и люди понимают, что очень опасаются добавления дополнительной зависимости к этому, чтобы добавить поддержку настойчивости. Путь, который мы выбрали, состоял в том, чтобы создать новый поток в существующем процессе, который записывает локальный трафик в файл в файловой системе, который затем считывается новым процессом (позволяет назвать его потребителем) и сохраняется. Преимуществами такого подхода являются:
- Мы получаем постоянство бесплатно. В случае возникновения нового процесса возникают проблемы, когда мы не теряем какой-либо локальный трафик, когда мы пишем его в файловую систему. Пока потребитель знает, где он остановился, всякий раз, когда он появляется, он может начать обработку данных.
- Нет учебной кривой для использования библиотек очередей, ее обычного старого файла unix IO.
- Самый большой профессионал в том, что мы не затрагиваем текущий процесс производителя вообще, кроме нового потока для записи файлов.
Некоторые из проблем, с этим подходом являются: замок
- файла и сварливость и его влияние на производительность.
- Убедитесь, что буферы записи сброшены, и производитель только освобождает блокировку файла после того, как в файл было записано полное событие. Потребитель должен прочитать неполные записи.
Мысли? Является ли этот подход наивным и нужно ли нам просто заплатить первоначальные затраты на время нарастания времени для использования постоянной библиотеки очереди? Главное, что мы хотим иметь минимально возможное влияние на текущий процесс и не добавлять к нему никаких зависимостей.