В настоящий момент я работаю над новым игровым проектом, который будет состоять из интерфейса 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 и есть ли у вас мнение о том, как лучше всего действовать?
Ответы:
Я задал аналогичный вопрос службе поддержки AWS, и это был их ответ.
Мой вопрос к ним:
Их ответ:
Также, исследуя этот ответ, я обнаружил, что это выглядит интересно:
https://aws.amazon.com/blogs/database/how-to-build-a-chat-application-with-amazon-elasticache-for-redis/
Интересны и комментарии к этой статье.
источник
Ознакомьтесь с некоторыми из этих функций в реальном времени и офлайн с помощью AWS AppSync с использованием различных источников данных, включая поиск в базах данных и вычисления.
источник
AWS Amplify - это современный ответ AWS на Firebase.
источник
Похоже, AWS Serverless - наиболее подходящая альтернатива.
Также интересно: AWS против Firebase - это даже честный бой?
источник
Я знаю, что это старый вопрос, но в настоящее время AWS предлагает AppSync ... службу, которая разрушает Firebase RDB во всех аспектах.
источник