App 后端服务,你是选择 AWS 还是 Firebase?

我开发原生 Android 应用程序有很长一段时间,最近开始用 Flutter
开发移动应用程序,并同时使用 Firebase
和 AWS 作为后端服务。但最近,我不得不为一个移动应用程序找到一个解决方案,这花费我很多时间来选择合适的后端服务。

那 App 的后端服务,你是选择 AWS 还是 Firebase。当然,并不是说 AWS
就比 Firebase 好,或 Firebase 比 AWS 好。正确的问题应该是:哪种解决方案最适合我的需求?
在此,我分享自己的观点和理解,或许能帮你选择正确服务。

1. 服务共同点

核心功能有:

  • 身份验证
  • 推送通知
  • 存储
  • 托管
  • 分析

这些功能,它们都有。因此,你可以用这些平台轻松部署无服务器解决方案。

2. 怎样整合后端与应用程序?

集成这些服务最普遍的方法是使用它们的 SDK,但是这符合你的需求吗?

Firebase

Firebase 为 Android、iOS 和 Web 提供 SDK,因此,作为前端开发人员,你可以轻松构建数据驱动的应用程序,而不必受制于后端技能。
Firebase 还有一个 REST API,你能用它构建自己的自定义 API(根据需求)。

AWS

AWS 为移动开发提供一种非常好的解决方案 AppSync
,你可以把它集成到你的 Android、iOS 和 React Native 中。

AWS AppSync 还未提供对 Flutter 的官方支持,不过,你可以看下 这里

如果你想使用 Flutter 开发前端,就必须创建自己的 API。

建议

  • 考虑解决方案的复杂性和业务需求,并考虑可伸缩性,决定是否要创建 API。
  • 如果你希望拥有一个 API,那么就用不到 SDK 了。另外,对于较大的项目,拥有一个 API 更有意义。
  • 如果你的解决方案很简单,并且不想在 API 上投资,那么选择提供 SDK 的服务 / 前端框架,以便能直接将后端集成到你的前端。

3. 双方的各自优势

Firebase 和 AWS 各有优势,哪个更适合你。

AWS

1. 设置不同环境

在 AWS 中,用于开发、测试和生产的不同环境更加“优雅”。
当然,你也能在 Firebase 中这样做,但必须建立不同项目,而这需要更多时间。

2. 持续部署

如果你用过 Netlify 之类的服务,那么 AWS 为持续部署提供另一种优雅的解决方案。同样,你也可以使用谷歌云来实现 CD,但它需要更多配置。

3.GraphQL

面向移动应用程序的 AWS Amplify SDK 与 GraphQL
Apollo
紧密集成。

4. 选择数据库

在后端用哪种类型的数据库,完全由你控制,而 Firebase 只提供 NoSQL 数据库。

5. 单包解决方案

AWS 提供应用程序可能需要的所有服务。因此,AWS 是一个云解决方案,你可以完全依赖它来满足所有需求。
如果整个后端都在一个地方,这会更容易理解和维护。

Firebase

1. 专用数据库

Firebase 提供两种专用数据库服务:Cloud Firestore 和 Realtime Database。这两个数据库都是 NoSQL 数据库,因此,你在部署数据驱动的应用程序时不必太操心数据库设置和查询编写。
只要你的需求和要求比较简单,并且知道它未来不会变得更复杂,那么你就可以使用 NoSQL 数据库。

2. 可调用的函数

得益于 Firebase 云函数,你可以创建云函数并通过 URL 设置触发器,以便将侦听器写入数据库。
这些函数类似于 AWS Lambda,但是从应用程序触发一个 Lambda 需要你设置一个 API 网关并添加授权逻辑,这使得实现起来有些困难。

3. 质量控制服务

Firebase 提供很多服务来监控和保证应用程序的质量。这些服务包括:

  • 动态链接:将用户导航到你应用程序的正确位置,无论它是否已经安装。
  • 远程配置:使用服务器端配置自定义并试验应用程序行为。
  • 测试实验室:跨设备测试 App。
  • 应用内消息传递:发送用户参与活动。
  • 分析:帮你规划未来的发布和用户参与策略。
  • ML Kit:在应用程序的前端或后端为你的解决方案添加机器学习功能。

4. 平台定价(AWS vs Firebase)

这两个平台的价格都很有吸引力,甚至还有一个免费档,所以你无需为任何东西付费,除非你有相当数量的活跃用户。

AWS

AWS 掌握其服务的定价,他们以便宜得多的价格提供许多很棒的服务。随着时间推移,他们实际上能将服务价格降低 80% 以上。

这就是为什么,你会发现 AWS 比 GCP 更便宜。对于构建实时应用程序,AWS 提供了相对昂贵的 DynamoDB

对于云函数,AWS 提供的服务价格是 Firebase 的一半。

Firebase

虽然 AWS 的某些服务更便宜,但 Firebase 提供一些完全免费的服务,比如:

  • 用户认证——通过 FirebaseAuth
    ,等同于 AWS Cognito
  • 推送通知——使用 Firebase 云消息传递,相当于 AWS 中的简单通知服务。

对于构建实时应用程序,与 AWS 相比,Firebase 的设置成本似乎要低得多,也更容易。Firebase 负责数据的实时同步,你无需过多操心。

随着用户数量的增加,Firebase 显然是构建实时应用程序的更好选择。但是如果不小心优化你的查询, Firebase 会给你寄来一张 3 万美元的账单

顺便说一句,谷歌在了解发生的事情后,已经放弃一些应用场景。有些东西比平台定价更贵……

5. 时间和人力

这是一个需要考虑的重要因素,因为你将需要这些资源来设置、构建和维护应用程序架构。

Firebase

Firebase 非常简单,容易上手。实际上,前端开发人员可以创建和维护整个后端,只需要一点设置方面的知识。
对于创建实时应用程序,Firebase 处理了大量的复杂性,并为你提供一个非常强大且易于使用的 SDK,帮你节省大量时间,而时间就是金钱。

AWS

因为 AWS 提供的服务是 Firebase 的十倍,所以它的使用和维护也要复杂十倍。我想说的是,与 Firebase 相比,AWS 有一点学习曲线。
对于创建实时应用程序,你需要搭配使用 GraphQL API 和 DynamoDB 实例(同样是一个 NoSQL 数据库),并且你还必须设置 API 和数据库,对于一个简单的实时应用程序来说,这似乎显得有些多余。

最后的思考

Firebase

  • 易于设置、使用和维护。
  • 需要你做的决定更少,非常适合简单的应用程序。

AWS

  • 提供更大的灵活性,这对构建大型、复杂的应用程序有很大帮助,但对简单的应用程序来说可能有些多余。
  • 一个潜在的解决方案可以满足你所有的应用程序需求。你可以构建一个整洁打包的解决方案,但是其可能成本更高。

我希望这能帮你做出正确决定,并在尝试构建应用程序时提出更好的问题。
英文原文:

Should You Use AWS or Firebase For the Back end of Your Mobile App?