Google Chat 服务器如何将通知推送给数亿客户?
Posted
技术标签:
【中文标题】Google Chat 服务器如何将通知推送给数亿客户?【英文标题】:How does Google Chat servers push notifications to hundreds of millions of clients? 【发布时间】:2012-04-19 12:28:22 【问题描述】:考虑一个网络应用程序,例如 Google Chat,其中的服务器同时为数亿客户提供服务。在这样的应用程序中,服务器必须近乎实时地向客户端推送通知(在聊天示例中 - 传入消息、存在通知等)。
他们是如何实现的?很大一部分客户端是基于浏览器的。我想轮询甚至会使 Google 的服务器超载。那么,他们使用的是像 Comet 这样的东西吗?如果是这样 - 他们是否需要为每 65536 个客户端分配一个服务器(每台机器的最大 TCP 连接数)?我知道有办法circumstance 这个限制,但我不知道它是如何实现的。
【问题讨论】:
【参考方案1】:聊天不是由单个应用程序/硬件/实例处理的。 他们肯定会使用许多具有负载平衡功能的实例,从而可以水平扩展聊天系统。它可能专用于区域或仅用于单个集群系统(我相信它在区域内是专用的,但仍然在区域内集群)。 您也可以拥有硬件和网络可以处理的尽可能多的连接,但不是 64k。 因为 64k(实际上小于这个值)是关于绑定套接字(服务器套接字,但不是客户端套接字)。
如果是 google 并基于支持的浏览器,他们肯定会使用混合技术进行交流,根据浏览器支持选择最强大的技术。这可以是长轮询、套接字,甚至是最古老的一种:简单的 ajax。
例如 facebook 聊天也是基于 erlang 的。使用 erlang 的例子有很多,连接数超过百万。
【讨论】:
【参考方案2】:我不知道 Google 是如何处理这个问题的,他们可能不会告诉我们。但是,今天你可以处理 http 流、websockets 或长轮询来构建这样的应用程序。举个例子Atmosphere framework
是一个构建“实时”、高效和可扩展的网络应用程序的工具。
【讨论】:
没错。多年来,谷歌已经实施并完善了一个定制的数据推送解决方案。但是你可以找到几个现成的产品,包括免费的和商业的,它们处理了实时数据推送的复杂性。作为 Lightstreamer 的 CTO (lightstreamer.com),我可以告诉你,我们一直在努力推技术 12 年了,其目标是提供一款既可扩展(每个节点多达百万个连接)又能够启发式地应对互联网的不可预测性(在带宽、代理、防火墙等方面)的软件。等)以上是关于Google Chat 服务器如何将通知推送给数亿客户?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 将 Firebase 通知推送给没有 Firebase 身份验证的特定用户
如何获取尚未将 Google Chat Bot 添加到其覆盖范围的用户的空间 ID
使用 AFNetworking 将 Firebase 通知从 ios 设备推送到花药
集成:ActiveCampaign 到 Zapier 到 Google Chat