Сейчас я работаю над новым игровым проектом, который будет состоять из внешнего интерфейса React Native и внутреннего интерфейса на основе Lambda. Приложению требуются некоторые функции реального времени, такие как активные пользовательские записи, геозоны и т.д.
Я смотрел на базу данных Firebase Realtime Database, которая выглядит как действительно элегантное решение для синхронизации данных в реальном времени, но я не думаю, что в AWS есть что-то подобное.
3 варианта, которые я мог бы придумать для "безсерверного" реального времени с использованием только сервисов AWS:
Вариант 1. Обмен сообщениями IoT через веб-сокеты
Это совершенно очевидно, управляемое соединение 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 в режиме реального времени как части архитектуры на основе лямбды, и если у вас есть мнение о том, как лучше поступить?