首页 > 解决方案 > Firebase 实时数据库 - 超过 100.000 个并发连接

问题描述

我目前正在处理的应用程序需要可扩展的实时通信。我们一直在研究并试用 Firebase 实时数据库和 Firestore。Firebase 实时数据库似乎更加成熟和经过测试,而 Firestore 仍处于测试阶段,这就是我们倾向于实时数据库的原因。

然而,我们担心它在我们的上下文中的扩展能力。我们的查询将主要是基于用户位置的地理空间。根据Firebase 同时实时连接到我的数据库https://firebase.google.com/pricing/#faq-simultaneous的最大并发用户数为 100.000,这对于我们的需求来说太低了。

根据他们的文档,似乎数据库分片是扩展超过 100.000 个并发用户https://firebase.google.com/docs/database/usage/sharding的方式。由于我们的查询基于用户的位置,我们可以将数据分组到区域中,例如美国西部、美国中部和美国东部,并为这三个区域中的每一个区域提供一个数据库实例。

虽然这种方法可能有效,但设置起来似乎很麻烦。我们可能需要用户最初连接到的服务,以便重定向到适合用户所在区域的正确数据库实例。此外,它应该处理用户移动到另一个区域的情况,并且因此应该重定向到另一个包含该特定区域数据的数据库实例。另一个复杂的任务是将数据分发到正确的数据库实例中。

是否有更简单的方法来扩展超过 100.000 个用户,或者是否可以增加单个 Firebase 实时数据库的并发连接量?对我来说,如果它需要你自己做这么多的“负载”平衡,那么使用 Firebase 几乎是一种浪费。

标签: firebasefirebase-realtime-databaseautoscaling

解决方案


100K 并发连接是 Firebase 实时数据库的硬性上限。

您使用两步连接描述的方法非常惯用。第一步通常很简单。事实上,对于许多应用程序来说,它是其身份验证流程的一部分,或者基于其结果。例如,许多应用程序将用户的分片基于其 UID 的哈希值。

在您的情况下,您可以在用户注册时将用户区域作为自定义声明注入到他们的令牌中。然后你会在他们登录时获得该声明,并可以将他们重定向到他们的分片。您还可以在客户端首次连接时将分片信息保存在客户端中,这样您只需为每个客户端/设备确定一次。


推荐阅读