AWS 的实时数据库(Realtime Database)与 Firebase 类似吗?

97

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

我正在研究Firebase的实时数据库,它看起来是实时数据同步的一种非常优雅的解决方案,但我不认为AWS有类似的东西。

我想到了三个选项,可以使用AWS服务实现“无服务器”实时:

选项1:通过WebSockets使用AWS IoT消息传递

这个相当明显,在IoT SDK中管理WebSockets连接。我想通过响应入站和出站事件来触发Lambdas,并仅将WebSockets用作实时层,在应用程序客户端上构建自定义处理逻辑,就像通常情况下那样。

与Firebase相比,这样做的缺点在于我必须自己处理事件中的数据,这将在WebSockets之上增加另一层管理,并且必须与应用程序存储中的API数据层标准化。

优点:

  • 可扩展的双向实时连接

缺点:

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

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

另一个选项是使用推送通知作为实时触发器,但使用常规HTTP请求到API网关来实际获取更新的有效负载。

我喜欢这种方法,因为它只使用一种传输层和一个状态的真实来源。它也将在应用程序关闭时触发更新,因为这些都是推送通知。

缺点是这需要很多自定义工作,并且可能需要进行难以映射的推送通知与需要获取的数据之间的映射。

优点:

  • 推送通知可在应用程序关闭时使用
  • 单个状态来源和传输层

缺点:

  • 最为自定义的解决方案
  • 总体上需要更多的HTTP请求

选项3:Cognito Sync

Cognito Sync提供了跨设备的用户状态同步功能,具有离线支持,并且是我将要使用的Cognito SDK的一部分。听起来就像我需要的东西,但我无法找到确凿的证据表明是否可以从AWS进行修改或“触发”更新,而不仅仅是从其中一个设备。

优点:

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

缺点:

  • 不确定是否可以从Lambda进行修改或更新

我想知道是否有人在基于Lambda的架构中进行过AWS实时处理方面的经验,并且对如何继续进行有何看法?


你是否考虑过在Firebase web app中实现游戏,例如使用ReactFire,而不是在AWS上实现“Firebase功能”? - matsev
我有,但我们正在使用AWS提供的许多服务作为我们基础设施的一部分,Firebase仅解决传输层问题,在这种情况下,其余部分最好由AWS处理,否则ReactFire将是一个很好的选择。 - BarakChamo
不确定这是否适用于您的用例,但 Elasticache Redis 有一个 PubSub 服务,您可以使用它。不过需要编写很多自定义逻辑。 - Adam Owczarczyk
Cognito Sync非常适合用户个性化数据存储,并且您可以使用AWS Lambda触发器,这对于您的用例完全有效。 - Ankit Pise
我发现这篇谷歌云文章比较 AWS Mobile Hub 和 Firebase 非常有用:https://cloud.google.com/docs/compare/aws/mobile - MatthewThomas.dev
7个回答

49

我向AWS支持团队提出了类似的问题,以下是他们的回应:

我向他们提出的问题:

有没有AWS服务组合(如果有的话)可以像Firebase一样在浏览器中提供实时数据库服务(DBaaS)?

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数据库服务,适用于所有需要一致、单位毫秒的延迟和任何规模的应用程序。它是一个完全托管的云数据库,并支持文档和键值存储模型。其灵活的数据模型、可靠的性能和自动扩展吞吐量容量的能力,使其非常适合移动、Web、游戏、广告技术、物联网以及许多其他应用程序。

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

有关更多信息,请参见以下文档。

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

https://aws.amazon.com/dynamodb/dax/
如果您有任何进一步的问题,请随时让我知道。
谢谢。
最好的问候,
Tayo O. Amazon Web Services
查看AWS Support Knowledge Center,这是一个知识库,包含有关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 相比有什么优势?似乎 IoT 具有所有这些功能,而无需编写任何代码,并具有无服务器架构。
Sam Dengler: AWS IoT 服务中的托管发布/订阅功能也是消息驱动应用程序的良好方法,就像本文所示。对于使用发布/订阅的客户端,通常还将 Redis 用作数据存储介质,例如缓存、排行榜等用例。但可以通过 AWS IoT 规则引擎触发 AWS Lambda 函数,使用 ElastiCache(Redis) 与 AWS IoT 服务进行集成。根据消息驱动应用程序的架构和数据如何被利用,一种解决方案可能比另一种更适合。

3
所有MobileHub链接现在都重定向到AWS Amplify。 - Rafael Marino

15

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


2
不建议使用。底层复杂度很快失控。过去两年开发缓慢。只适用于小型、一次性项目。 - Ryoichiro Oka

7

AWS Amplify 是 AWS 的现代化解决方案,类似于 Firebase。

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

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


3
试过了,严重不足。不建议使用。坚持使用Firestore。Amplify甚至没有提及SLA(它是每个服务帐户,如果您没有协议,则仅为99%,这很糟糕)或最大连接数,或者在规模上如何工作。质量差。此外,没有像firebase-admin那样针对服务器端的TypeScript插件。 - Oliver Dixon
Amplify 不是好的解决方案,据我所见,它会让一切变得复杂。 - tim

2

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

0
你可以考虑使用 supabase。
它是开源的,可安装到 EC2 / Docker 容器上。 https://supabase.com/docs/guides/hosting/docker 我发现托管解决方案/免费解决方案非常强大,可以快速启动和运行。(尚未部署到 AWS)

-1

我知道这是一个老问题,但是现在AWS提供了AppSync......一项在所有方面都能够打败Firebase RDB的服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接