В настоящий момент я работаю над новым игровым проектом, который будет состоять из интерфейса React Native и серверной части на основе Lambda. Приложению требуются некоторые функции реального времени, такие как записи активных пользователей, геозоны и т. Д.
Я смотрел на базу данных Firebase Realtime, которая выглядит как действительно элегантное решение для синхронизации данных в реальном времени, но я не думаю, что у AWS есть что-то подобное.
Я мог придумать 3 варианта "бессерверного" реального времени с использованием только сервисов AWS:
Вариант 1. Обмен сообщениями AWS IoT через WebSockets
Это совершенно очевидно: управляемое соединение WebSockets через IoT SDK. Я думал о запуске Lambdas в ответ на входящие и исходящие события и просто использовать WebSockets в качестве уровня реального времени, создавая настраиваемую логику обработки на клиенте приложения, как обычно.
Обратной стороной этого, по крайней мере, по сравнению с Firebase, является то, что мне придется самостоятельно обрабатывать данные в событиях, что добавит еще один уровень управления поверх WebSockets и должен быть стандартизирован с уровнем данных API в хранилищах приложений. .
Плюсы:
- Масштабируемое двунаправленное соединение в реальном времени
Минусы:
- Работает только когда приложение открыто
- Структура сообщения должна быть реализована
- Управление несколькими транспортными уровнями
Вариант 2. Повторная выборка, запускаемая нажатием кнопки
Другой вариант - использовать push-уведомления в качестве триггеров в реальном времени, но использовать обычный HTTP-запрос к шлюзу API, чтобы фактически получить обновленную полезную нагрузку.
Мне нравится этот подход, потому что он придерживается только одного транспортного уровня и единственного источника достоверной информации о состоянии приложения. Он также будет запускать обновления, когда приложение не открыто, поскольку это Push-уведомления.
Обратной стороной является то, что это много настраиваемой работы с потенциально сложными сопоставлениями между push-уведомлениями и данными, которые необходимо получить.
Плюсы:
- Push-уведомления работают, даже когда приложение закрыто
- Единый источник истины, транспортный уровень
Минусы:
- Наиболее индивидуальное решение
- Будет задействовано намного больше HTTP-запросов в целом
Вариант 3: Cognito Sync Это новее для меня, и я не уверен, что с ним действительно можно взаимодействовать с сервера.
Cognito Sync предлагает синхронизацию состояния пользователя. на всех устройствах с автономной поддержкой и является частью Cognito SDK, который я все равно буду использовать. Это похоже на то, что я ищу, но не смог найти убедительных доказательств того, что можно изменять или «запускать» обновления из AWS, а не только с одного из устройств.
Плюсы:
- Предоставляет абстрактную модель данных в реальном времени
- Подключено к пользовательским записям Cognito OOTB
Минусы:
- Не уверен, можно ли изменить или обновить с помощью Lambdas
Мне интересно, есть ли у кого-нибудь опыт работы в режиме реального времени на AWS в рамках архитектуры на основе Lambda и есть ли у вас мнение о том, как лучше всего действовать?