Являются ли веб-сокеты подходящим протоколом с минимальной задержкой и надежным протоколом связи в реальном времени между двумя соседними серверами в тех же зонах доступности AWS? - PullRequest
2 голосов
/ 27 октября 2019

Подходящие технологии, о которых я знаю:

  • Веб-розетки
  • Zeromq

Пожалуйста, предложите другие, если они лучше подходят для моей проблемы.

Для этого варианта использования у меня есть только две машины, отправитель и получатель, и важно отметить, что они зафиксированы «рядом» друг с другом, поскольку они будут находиться в одной зоне доступности на AWS. Ответы, которые могут быть связаны с передачей сообщений через большие промежутки в Интернете, не обязательно применимы. Также обратите внимание, что сервер-получатель не ставит их в очередь как задачи, он просто будет пересылать избранные сообщения посетителям сайта через веб-сокет. Отправляющий сервер выполняет большую предварительную обработку и сортировку сообщений.

Для решения необходимо:

  1. Быть очень высокой пропускной способностью. В настоящее время сервер-отправитель обрабатывает около 10000 сообщений в секунду (написанных на Rust) без проблем. Бурный трафик может увеличить это до 20000 или чуть больше. Я знаю, что zeromq может справиться с этим.

  2. Надежный. Канал связи будет открыт 24/7 365 дней в году. Мой бюджет чрезвычайно ограничен с точки зрения настройки кластеров машин в качестве отказоустойчивых, поэтому я должен сделать все возможное, чтобы справиться с двумя машинами.

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

  4. Сообщения должны сохранять порядок, в котором они отправляются.

  5. Низкая задержка. Это очень важно , так как данные должны быть максимально возможными в реальном времени.

Кажется, веб-розетка выполняет эту работу от 1 до 4. Что я не делаю? Не знаю, насколько надежна веб-розетка для общения 24 часа в сутки, 7 дней в неделю. Я наблюдал, как соединения веб-сокетов теряются в сети (конечно, я напишу код повторного подключения, если потребуется, поминание сердцебиения, но все же это касается меня). Мне также интересно, не слишком ли высокая пропускная способность для веб-сокета.

У меня нулевой опыт решения подобных проблем, но у меня есть очень хорошая библиотека веб-сокетов, которую мне удобно использовать. Я исключил Apache Kafka, так как он кажется дорогим, чтобы получить высокую пропускную способность, сложно управлять с помощью dev ops (zookeeper) и кажется излишним, так как мне не нужна долговечность, и это только связь между двумя машинами. Поэтому я надеюсь на простое решение.

1 Ответ

0 голосов
/ 27 октября 2019

Похоже, вы точно объясняете, что группы размещения EC2 предоставляют: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-placementgroup.html Редактировать: у вас должна быть возможность создать группу мест размещения с 2 машинами для покрытия вашего ограниченного бюджета. Использование больших экземпляров, в соответствии с вашим бюджетом, также будет поддерживать более высокую пропускную способность сети.

Точка 4 выглядит так, как будто она будет поддерживаться SQS FIFO, несмотря на тот факт, что очереди SQS FIFO поддерживают только до 3000 сообщений в секунду. с дозированием.

Управляемое потоковое решение, такое как Kinesis Data Streams, определенно охватит ваш вариант использования в масштабе гораздо лучше, чем сырой веб-сокет. Используя клиентские библиотеки Kinesis, вы можете написать своего потребителя для чтения из потока.

В AWS также есть служба Managed Kafka для исключения накладных расходов и управления необходимыми компонентами, такими как Apache ZK: https://aws.amazon.com/msk/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...