¿Cuál sería el equivalente de AWS a Firebase Realtime Database?

82

Estoy trabajando en un nuevo proyecto de juego en este momento que consistirá en un front-end React Native y un back-end basado en Lambda. La aplicación requiere algunas funciones en tiempo real, como registros de usuarios activos, geofencing, etc.

Estaba viendo la base de datos en tiempo real de Firebase que parece una solución realmente elegante para la sincronización de datos en tiempo real, pero no creo que AWS tenga nada parecido.

Las 3 opciones que se me ocurren para "sin servidor" en tiempo real usando solo servicios de AWS son:

Opción 1: mensajería de AWS IoT a través de WebSockets

Este es bastante obvio, una conexión WebSockets administrada a través del SDK de IoT. Estaba pensando en activar Lambdas en respuesta a eventos entrantes y salientes y simplemente usar WebSockets como capa en tiempo real, creando una lógica de manejo personalizada en el cliente de la aplicación como lo haría normalmente.

La desventaja de esto, al menos en comparación con Firebase, es que tendré que manejar los datos en los eventos yo mismo, lo que agregará otra capa de administración además de WebSockets y tendrá que estandarizarse con la capa de datos API en las tiendas de la aplicación. .

Pros:

  • Conexión bidireccional escalable en tiempo real

Contras:

  • Solo funciona cuando la aplicación está abierta
  • La estructura del mensaje debe implementarse
  • Varias capas de transporte para gestionar

Opción 2: Recuperación activada por push

Otra opción es utilizar notificaciones push como activadores en tiempo real, pero utilizar una solicitud HTTP regular a API Gateway para obtener la carga útil actualizada.

Me gusta este enfoque porque se adhiere a una sola capa de transporte y una única fuente de verdad para el estado de la aplicación. También activará actualizaciones cuando la aplicación no esté abierta, ya que son notificaciones automáticas.

La desventaja es que se trata de una gran cantidad de trabajo personalizado con asignaciones potencialmente difíciles entre las notificaciones push y los datos que deben buscarse.

Pros:

  • Las notificaciones push funcionan incluso cuando la aplicación está cerrada
  • Fuente única de verdad, capa de transporte

Contras:

  • La solución más personalizada
  • Implicará muchas más solicitudes HTTP en general

Opción 3: Cognito Sync Esto es más nuevo para mí y no estoy seguro de si realmente se puede conectar desde el servidor.

Cognito Sync ofrece sincronización del estado del usuario. en todos los dispositivos con soporte sin conexión y es parte del SDK de Cognito que usaré de todos modos. Suena como lo que estoy buscando, pero no pude encontrar ninguna evidencia concluyente sobre si es posible modificar o "activar" actualizaciones de AWS y no solo de uno de los dispositivos.

Pros:

  • Proporciona un modelo de datos abstraído en tiempo real
  • Conectado a registros de usuario de Cognito OOTB

Contras:

  • No estoy seguro si se puede modificar o actualizar desde Lambdas


Me pregunto si alguien tiene experiencia haciendo tiempo real en AWS como parte de una arquitectura basada en Lambda y si tiene una opinión sobre cuál es la mejor manera de proceder.

BarakChamo
fuente
¿Ha considerado implementar el juego en una aplicación web de Firebase , por ejemplo, usando ReactFire , en lugar de implementar "funciones de Firebase" en AWS?
matsev
Sí, pero estamos usando muchos servicios que AWS proporciona como parte de nuestra infraestructura y Firebase resuelve solo la capa de transporte, el resto lo maneja mejor AWS en este caso; de lo contrario, ReactFire sería una gran opción.
BarakChamo
No estoy seguro de si esto es aplicable a su caso de uso, pero Elasticache Redis tiene el servicio PubSub que puede usar. Probablemente mucha lógica personalizada.
Adam Owczarczyk
Cognito Sync es bueno para el almacenamiento de datos personalizados del usuario y puede usar el disparador AWS Lambda con él, que funciona absolutamente bien para su caso de uso.
Ankit Pise
Encontré este artículo de Google Cloud que compara AWS Mobile Hub y Firebase muy útil: cloud.google.com/docs/compare/aws/mobile
MatthewThomasGB

Respuestas:

43

Le hice una pregunta similar a AWS Support, y esta fue su respuesta.

Mi pregunta para ellos:

¿Cuál es el grupo de servicios de AWS (si es posible) para que ese mismo DBaaS en tiempo real en el navegador se sienta como Firebase?

AWS Cognito parece ser excelente para cuentas de usuario. ¿Hay algo similar para WebSockets / parte de base de datos en tiempo real?

Su respuesta:

A su pregunta, Firebase es el más cercano al servicio AWS AWS MobileHub. Puede ver más detalles a continuación sobre mobilehub desde el siguiente enlace.

https://aws.amazon.com/mobile/details/ https://aws.amazon.com/mobile/getting-started/

"AWS Cognito parece ser excelente para las cuentas de usuario. ¿Hay algo similar para la parte WebSockets / DB en tiempo real?"

Amazon Dynamodb es un servicio de base de datos NoSQL rápido y flexible para todas las aplicaciones que necesitan una latencia constante de milisegundos de un solo dígito a cualquier escala. Es una base de datos en la nube completamente administrada y es compatible con modelos de tienda de valor clave y de documentos. Su modelo de datos flexible, rendimiento confiable y escalamiento automático de la capacidad de rendimiento lo hace ideal para dispositivos móviles, web, juegos, tecnología publicitaria, IoT y muchas otras aplicaciones.

Amazon Dynamodb se puede optimizar aún más con Amazon DynamoDB Accelerator (DAX), que es una caché en memoria totalmente administrada y de alta disponibilidad que puede reducir los tiempos de respuesta de Amazon DynamoDB de milisegundos a microsegundos, incluso a millones de solicitudes por segundo.

Para obtener más información, consulte la siguiente documentación.

https://aws.amazon.com/dynamodb/getting-started/ https://aws.amazon.com/dynamodb/dax/

Si tiene más preguntas, no dude en hacérmelo saber.

Gracias.

Atentamente,

Tayo O. Amazon Web Services

Consulte el Centro de conocimientos de AWS Support, una base de conocimientos de artículos y videos que responden a las preguntas de los clientes sobre los servicios de AWS: https://aws.amazon.com/premiumsupport/knowledge-center/?icmpid=support_email_category

Además, mientras investigaba esta respuesta, también encontré esto, parece interesante:

https://aws.amazon.com/blogs/database/how-to-build-a-chat-application-with-amazon-elasticache-for-redis/

Los comentarios a ese artículo también son interesantes.

Jacob Wakeem: ¿Qué ventaja tiene este enfoque sobre el uso de aws iot? Parece que iot tiene todas estas funciones sin escribir una sola línea de código y con una arquitectura sin servidor.

Sam Dengler: La función PubSub administrada en el servicio AWS IoT también es un buen enfoque para las aplicaciones basadas en mensajes, como la que se muestra en el artículo. Con Elasticache (Redis), los clientes que usan Pub / Sub generalmente también usan Redis como un almacén de datos para otros casos de uso, como almacenamiento en caché, tablas de clasificación, etc. Dicho esto, también puede usar ElastiCache (Redis) con el servicio AWS IoT. activando una función de AWS Lambda a través del motor de reglas de AWS IoT. Dependiendo de cómo se diseñe la aplicación basada en mensajes y cómo se aprovechen los datos, una solución puede ser mejor que la otra.

Quang Van
fuente
14

Consulte AWS AppSync para conocer algunas de estas funciones en tiempo real y sin conexión utilizando diferentes fuentes de datos, incluida la búsqueda y el cálculo de bases de datos.

Ricardo
fuente
6

AWS Amplify es la respuesta moderna de AWS a Firebase.

La forma más rápida de crear aplicaciones web y móviles

AWS Amplify es una plataforma de desarrollo para crear aplicaciones web y móviles seguras y escalables. Le facilita la autenticación de usuarios, el almacenamiento seguro de datos y metadatos de usuarios, la autorización del acceso selectivo a los datos, la integración del aprendizaje automático, el análisis de métricas de aplicaciones y la ejecución de código del lado del servidor. Amplify cubre el flujo de trabajo completo de desarrollo de aplicaciones móviles, desde el control de versiones, las pruebas de código, hasta la implementación de producción, y escala fácilmente con su negocio desde miles de usuarios hasta decenas de millones. Las bibliotecas y la CLI de Amplify, que forman parte del marco de Amplify, son de código abierto y ofrecen una interfaz conectable que le permite personalizar y crear sus propios complementos.

mahemoff
fuente
Lo intenté. Gravemente deficiente. No recomiendo Quédate con Firestore. Amplify ni siquiera menciona el SLA (es por cuenta de servicio, si no tiene un acuerdo, solo el 99% es malo) o cuáles son las conexiones máximas, o cómo funciona a escala. Pobre. Además, no hay un complemento de TypeScript para cosas del lado del servidor como firebase-admin.
Oliver Dixon