Синхронизация нескольких процессов на нескольких машинах через окна файловой системы - PullRequest
0 голосов
/ 04 июля 2018

Я пишу приложение, которое получает некоторые пакеты по сети, а затем некоторые клиенты получают эти пакеты из этого приложения. Теперь я хотел бы сделать архитектуру масштабируемой. Пакеты временно хранятся в файловой системе, пока они не будут получены потребительским приложением. Если я храню готовые к отправке пакеты в какой-то папке, мне нужен какой-то способ отличить пакеты, которые обрабатываются, от пакетов, которые все еще ожидают обработки. Идея состоит в том, чтобы создать специальный файл блокировки в папке пакета и держать его заблокированным до завершения передачи пакета (по завершении удалите этот файл блокировки и саму папку пакета). Альтернативные идеи - использовать какой-то общий ресурс (например, очередь сообщений или база данных). Вопрос в том, достаточно ли безопасно использование файловой системы для такого рода межпроцессного взаимодействия?

1 Ответ

0 голосов
/ 04 июля 2018

Вы можете использовать любой носитель для хранения ваших данных (они в любом случае окажутся в файловой системе). Главный вопрос, который вам, вероятно, следует задать себе, это то, какие функции вы хотите иметь под рукой: может быть довольно проблематично масштабировать необработанные файлы, может быть сложно реализовать уровни безопасности (например, доступ на основе ролей) и т. Д.

Похоже, что ваш случай хорошо решен с помощью RabbitMQ, поскольку он обеспечивает универсальный механизм организации очередей, а также постоянство и масштабируемость. Я не знаю деталей вашего проекта, но я бы посоветовал взглянуть на Redis для аналогичной функциональности плюс возможность изменять объекты в «очереди».

В любом случае, файловое хранилище может быть хорошей идеей для экспериментов (создайте MVP), но я бы посоветовал против этого в будущем.

...