Подходящие технологии, о которых я знаю:
Пожалуйста, предложите другие, если они лучше подходят для моей проблемы.
Для этого варианта использования у меня есть только две машины, отправитель и получатель, и важно отметить, что они зафиксированы «рядом» друг с другом, поскольку они будут находиться в одной зоне доступности на AWS. Ответы, которые могут быть связаны с передачей сообщений через большие промежутки в Интернете, не обязательно применимы. Также обратите внимание, что сервер-получатель не ставит их в очередь как задачи, он просто будет пересылать избранные сообщения посетителям сайта через веб-сокет. Отправляющий сервер выполняет большую предварительную обработку и сортировку сообщений.
Для решения необходимо:
Быть очень высокой пропускной способностью. В настоящее время сервер-отправитель обрабатывает около 10000 сообщений в секунду (написанных на Rust) без проблем. Бурный трафик может увеличить это до 20000 или чуть больше. Я знаю, что zeromq может справиться с этим.
Надежный. Канал связи будет открыт 24/7 365 дней в году. Мой бюджет чрезвычайно ограничен с точки зрения настройки кластеров машин в качестве отказоустойчивых, поэтому я должен сделать все возможное, чтобы справиться с двумя машинами.
Устойчивость сообщений не требуется или не беспокоит,принимающий сервер не обязан ничего хранить, ему просто нужны все данные. Сервер отправителя асинхронно записывает 5-секундную сводную информацию о данных в базу данных и в кеш.
Сообщения должны сохранять порядок, в котором они отправляются.
Низкая задержка. Это очень важно , так как данные должны быть максимально возможными в реальном времени.
Кажется, веб-розетка выполняет эту работу от 1 до 4. Что я не делаю? Не знаю, насколько надежна веб-розетка для общения 24 часа в сутки, 7 дней в неделю. Я наблюдал, как соединения веб-сокетов теряются в сети (конечно, я напишу код повторного подключения, если потребуется, поминание сердцебиения, но все же это касается меня). Мне также интересно, не слишком ли высокая пропускная способность для веб-сокета.
У меня нулевой опыт решения подобных проблем, но у меня есть очень хорошая библиотека веб-сокетов, которую мне удобно использовать. Я исключил Apache Kafka, так как он кажется дорогим, чтобы получить высокую пропускную способность, сложно управлять с помощью dev ops (zookeeper) и кажется излишним, так как мне не нужна долговечность, и это только связь между двумя машинами. Поэтому я надеюсь на простое решение.