【发布时间】:2017-01-28 02:45:51
【问题描述】:
我目前正在开发一个新游戏项目,该项目将包括一个 React Native 前端和一个基于 Lambda 的后端。该应用需要一些实时功能,例如活动用户记录、地理围栏等。
我在看 Firebase 的实时数据库,它看起来是一个非常优雅的实时数据同步解决方案,但我认为 AWS 没有类似的东西。
对于仅使用 AWS 服务的“无服务器”实时,我能想到的 3 个选项是:
选项 1:通过 WebSockets 的 AWS IoT 消息传递
这个很明显,通过 IoT SDK 的托管 WebSockets 连接。我正在考虑触发 Lambda 以响应入站和出站事件,并仅使用 WebSockets 作为实时层,像通常那样在应用程序客户端上构建自定义处理逻辑。
至少与 Firebase 相比,这样做的缺点是我必须自己处理事件中的数据,这将在 WebSockets 之上添加另一层管理,并且必须使用 API 数据层进行标准化应用程序的商店。
优点:
- 可扩展的双向实时连接
缺点:
- 仅在应用打开时有效
- 消息结构需要实现
- 要管理的多个传输层
选项 2:推送触发重新获取
另一种选择是使用推送通知作为实时触发器,但使用对 API 网关的常规 HTTP 请求来实际获取更新的有效负载。
我喜欢这种方法,因为它只坚持一个传输层和应用程序状态的单一事实来源。它还会在应用未打开时触发更新,因为这些是推送通知。
缺点是这是大量的自定义工作,在推送通知与需要获取的数据之间进行潜在的映射很困难。
优点:
- 即使应用关闭,推送通知也能正常工作
- 单一事实来源,传输层
缺点:
- 最定制的解决方案
- 总体上将涉及更多的 HTTP 请求
选项 3:Cognito 同步 这对我来说是新的,我不确定它是否真的可以从服务器接口。
Cognito Sync 提供用户状态同步。跨设备完成离线支持,并且是我将使用的 Cognito SDK 的一部分。这听起来正是我正在寻找的东西,但找不到任何确凿的证据证明是否可以从 AWS 而不仅仅是从其中一台设备修改或“触发”更新。
优点:
- 提供抽象的实时数据模型
- 已连接到 Cognito 用户记录 OOTB
缺点:
- 不确定是否可以从 Lambda 修改或更新
我想知道是否有人有在 AWS 上作为基于 Lambda 的架构的一部分进行实时操作的经验,以及您对什么是最好的方法有意见?
【问题讨论】:
-
您是否考虑过在Firebase web app 中实现游戏,例如使用ReactFire,而不是在 AWS 上实现“Firebase 功能”?
-
我有,但是我们正在使用 AWS 提供的许多服务作为我们基础设施的一部分,Firebase 只解决传输层,在这种情况下,其余的由 AWS 更好地处理,否则 ReactFire 会很棒选项。
-
不确定这是否适用于您的用例,但 Elasticache Redis 有您可以使用的 PubSub 服务。可能有很多自定义逻辑。
-
Cognito Sync 非常适合用户个性化数据存储,您可以将 AWS Lambda 触发器与它一起使用,这非常适合您的用例。
-
我发现这篇比较 AWS Mobile Hub 和 Firebase 的谷歌云文章非常有用:cloud.google.com/docs/compare/aws/mobile
标签: amazon-web-services firebase-realtime-database real-time aws-lambda aws-iot