Сценарий: У нас есть несколько узлов, распределенных географически, на которых мы хотим иметь очереди, собирающие сообщения для этого местоположения. А затем мы хотим отправить эти собранные данные из каждой очереди на каждом узле в соответствующие им очереди в центральном расположении. В центральном узле мы будем вытягивать данные, собранные в очередях (из других узлов ), обрабатывать их и сохранять персистентно.
Ограничения:
Наше решение Мы рассмотрели несколько решений, из которых я собираюсь перечислить то, которое, по нашему мнению, будет лучшим. Возможное решение (, по нашему мнению ), состоит в том, чтобы использовать Redis для поддержки очередей повсюду, поскольку Redis обеспечивает постоянное хранилище.Затем, возможно, запустите демон на всех географически разделенных узлах, который считывает данные из очереди и отправляет их на центральный узел. Центральный узел при получении данных отправляет ACK узлу, от которого он получил данные (, поскольку данные очень важны для нас ), а затем, получив ACK, узел удаляет данные из очереди. Конечно, будет период ожидания, в течение которого должен быть получен ACK.
Проблема Приведенное выше решение (по нашему )будет работать нормально, но проблема в том, что мы не хотим реализовывать весь протокол синхронизации самостоятельно по той простой причине, что здесь мы можем ошибаться. Нам не удалось найти именно этот способ синхронизации в Redis. Таким образом, мы открыты для других очередей на основе AMQP, таких как RabbitMQ, ZeroMQ и т. д. Мы снова не смогли выяснить, можем ли мы сделать это с этими решениями.