Как я могу предотвратить параллельное использование приложением на нескольких серверах одного и того же документа mongodb для работы? - PullRequest
0 голосов
/ 07 января 2019

Так что вопрос длинный, но довольно понятный. У меня есть приложение, которое работает на нескольких серверах, которое использует параллельные циклы для обработки объектов, поступающих из коллекции MongoDB. Так как MongoDB вынуждает меня разрешить множественный доступ для чтения, я не могу помешать нескольким процессам и / или серверам получать один и тот же документ из коллекции и дублировать работу.

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

Я не думаю, что пессимист - это то, что я ищу, но, возможно, я неправильно понял концепцию. Также, если для решения той же проблемы используются альтернативные настройки, я бы хотел услышать, что может быть использовано.

Спасибо!

1 Ответ

0 голосов
/ 19 февраля 2019

Что я надеюсь достичь, так это то, что если бы я мог предотвратить одновременный доступ к документам

Самый простой способ достичь этого - ввести dispatch архитектуру процесса. Добавьте выделенный процесс, который просто следит за изменениями, а затем делегирует или распределяет задачи среди нескольких работников.

В процессе может использоваться MongoDB ChangeStreams для доступа к изменениям данных в реальном времени для одной коллекции, базы данных или всего развертывания. Как только он получает поток / документ, просто отправляет работнику для обработки.

Это также должно уменьшить количество рабочих, пытающихся получить доступ к одним и тем же задачам, и иметь логику для отказа.

...