92

我目前正在开发一个新的游戏项目,该项目将由一个 React Native 前端和一个基于 Lambda 的后端组成。该应用程序需要一些实时功能,例如活动用户记录、地理围栏等。

我在看 Firebase 的实时数据库,它看起来是一个非常优雅的实时数据同步解决方案,但我认为 AWS 没有任何东西与之类似。

对于仅使用 AWS 服务的“无服务器”实时,我能想到的 3 个选项是:

选项 1:基于 WebSocket 的 AWS IoT 消息传递

这个很明显,通过 IoT SDK 的托管 WebSockets 连接。我正在考虑触发 Lambda 以响应入站和出站事件,并仅使用 WebSockets 作为实时层,像通常那样在应用程序客户端上构建自定义处理逻辑。

至少与 Firebase 相比,这样做的缺点是我必须自己处理事件中的数据,这将在 WebSocket 之上添加另一层管理,并且必须使用应用程序商店中的 API 数据层进行标准化.

优点:

  • 可扩展的双向实时连接

缺点:

  • 仅在应用程序打开时有效
  • 消息结构需要实现
  • 要管理的多个传输层

选项 2:推送触发的重新获取

另一种选择是将推送通知用作实时触发器,但使用对 API Gateway 的常规 HTTP 请求来实际获取更新的有效负载。

我喜欢这种方法,因为它只坚持一个传输层和应用程序状态的单一事实来源。当应用程序未打开时,它也会触发更新,因为这些是推送通知。

不利的一面是,这是大量的自定义工作,在推送通知与需要获取的数据之间可能存在困难的映射。

优点:

  • 即使应用程序关闭,推送通知也能正常工作
  • 单一事实来源,传输层

缺点:

  • 最定制的解决方案
  • 总体上将涉及更多的 HTTP 请求

选项 3:Cognito Sync 这对我来说比较新,我不确定它是否真的可以从服务器连接。

Cognito Sync 提供用户状态同步。跨设备完成离线支持,并且是我将使用的 Cognito SDK 的一部分。这听起来就像我正在寻找的东西,但找不到任何确凿的证据来证明是否可以从 AWS 而不仅仅是从其中一台设备修改或“触发”更新。

优点:

  • 提供抽象的实时数据模型
  • 连接到 Cognito 用户记录 OOTB

缺点:

  • 不确定是否可以从 Lambdas 修改或更新

我想知道是否有人有在 AWS 上作为基于 Lambda 的架构的一部分进行实时操作的经验,以及您是否对什么是最好的进行方式有意见?

4

6 回答 6

48

我向 AWS Support 提出了类似的问题,这是他们的回复。

我对他们的问题:

什么样的 AWS 服务组(如果可能的话)可以让相同的浏览器内实时 DBaaS 感觉像 Firebase?

AWS Cognito 似乎非常适合用户账户。WebSockets / 实时数据库部分有什么类似的吗?

他们的回应:

对于您的问题,Firebase 最接近 AWS 服务 AWS MobileHub。您可以从下面的链接中查看有关 mobilehub 的更多详细信息。

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

“AWS Cognito 似乎非常适合用户帐户。WebSockets/实时数据库部分有什么类似的吗?”

Amazon Dynamodb 是一种快速灵活的 NoSQL 数据库服务,适用于需要任何规模的一致、个位数毫秒延迟的所有应用程序。它是一个完全托管的云数据库,支持文档和键值存储模型。其灵活的数据模型、可靠的性能和吞吐量容量的自动扩展,使其非常适合移动、网络、游戏、广告技术、物联网和许多其他应用程序。

Amazon Dynamodb 可以通过 Amazon DynamoDB Accelerator (DAX) 进一步优化,它是一种完全托管、高度可用的内存缓存,可以将 Amazon DynamoDB 响应时间从几毫秒缩短到几微秒,即使是每秒数百万个请求。

有关详细信息,请参阅以下文档。

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

如果您有任何其他问题,请随时告诉我。

谢谢。

此致,

Tayo O. 亚马逊网络服务

查看 AWS Support 知识中心,这是一个回答客户有关 AWS 服务问题的文章和视频的知识库: https ://aws.amazon.com/premiumsupport/knowledge-center/?icmpid=support_email_category

同样在研究这个答案时,我也发现了这个,看起来很有趣:

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

那篇文章的评论也很有趣。

Jacob Wakeem:与使用 aws iot 相比,这种方法有什么优势?物联网似乎拥有所有这些功能,而无需编写任何代码并且具有无服务器架构。

Sam Dengler:AWS IoT 服务中的托管 PubSub 功能也是一种基于消息的应用程序的好方法,就像文章中演示的那样。借助 Elasticache (Redis),使用 Pub/Sub 的客户通常还使用 Redis 作为其他用例的数据存储,例如缓存、排行榜等。话虽如此,您还可以将 ElastiCache (Redis) 与 AWS IoT 服务一起使用通过 AWS IoT 规则引擎触发 AWS Lambda 函数。根据基于消息的应用程序的架构方式和数据的利用方式,一种解决方案可能比另一种更适合。

于 2017-08-29T15:04:44.687 回答
15

查看 AWS AppSync,了解其中一些使用不同数据源的实时和离线功能,包括数据库搜索和计算。

于 2017-11-30T21:02:59.187 回答
7

AWS Amplify是 AWS 对 Firebase 的现代解决方案。

构建移动和 Web 应用程序的最快方法

AWS Amplify 是一个开发平台,用于构建安全、可扩展的移动和 Web 应用程序。它使您可以轻松验证用户身份、安全地存储数据和用户元数据、授权选择性访问数据、集成机器学习、分析应用程序指标以及执行服务器端代码。Amplify 涵盖了从版本控制、代码测试到生产部署的完整移动应用程序开发工作流程,它可以轻松地随着您的业务从数千用户扩展到数千万用户。Amplify 库和 CLI 是 Amplify 框架的一部分,它们是开源的,并提供了一个可插入的界面,使您能够自定义和创建自己的插件。

于 2020-04-21T01:38:34.353 回答
2

听起来 AWS Serverless 是最合适的替代方案。

还想知道:AWS 与 Firebase - 是公平的战斗吗?

于 2018-12-11T20:47:12.997 回答
0

AWS 放大。您可以在此处找到更多信息:AWS Amplify

于 2021-04-12T18:43:04.137 回答
-1

我知道这是一个老问题,但现在 AWS 提供 AppSync ......一项在各个方面破坏 Firebase RDB 的服务

于 2020-12-22T16:04:27.560 回答