我渴望了解不同实时通讯应用的架构。它们是否使用任何通用的协议/架构?
我渴望了解不同实时通讯应用的架构。它们是否使用任何通用的协议/架构?
WhatsApp服务器几乎完全采用Erlang实现。
后端消息路由的服务器系统使用Erlang实现。
令人瞩目的成就是,通过一个真正小的服务器占用来管理活跃用户数量。团队共识是这主要得益于 Erlang。
有趣的是,Facebook聊天室在2009年也是用Erlang编写的,但他们放弃了,因为很难找到合格的程序员。
WhatsApp服务器起初基于ejabberd开发。
ejabberd是一个著名的用Erlang编写的开源Jabber服务器。
最初选择它是因为它是开源的,得到开发者非常好的评价,容易上手,并承诺Erlang长期适用于大型通信系统。
接下来的几年时间花费在重写和修改ejabberd的一些部分上,包括从XMPP转向内部开发的协议,重构代码库和重新设计一些核心组件,并对Erlang虚拟机进行了许多重要的修改以优化服务器性能。
为了处理每天500亿条消息,重点是打造一个可靠的系统。盈利是稍后考虑的问题,还有很长的路要走。
系统健康状态的主要指标是消息队列长度。所有节点上进程的消息队列长度都在不断监控中,如果它们积累超过预设阈值的积压,则会发送警报。如果一个或多个进程落后,就会发出警报,这将提供下一个瓶颈位置的指针。
多媒体消息是通过上传要发送的图像、音频或视频到HTTP服务器,然后发送内容链接以及它的Base64编码缩略图(如果适用)来发送的。
通常每天会推送一些代码,经常是多次,但一般会避开高峰期。 Erlang可帮助在将修复程序和功能推向生产时更加积极。热加载意味着可以在不重新启动或流量转移的情况下进行更新。错误通常可以非常快速地撤消,也可以通过热加载实现。系统倾向于解耦合得更多,这使得逐步推出更改非常容易。
WhatsApp应用程序使用什么协议?SSL套接字连接到WhatsApp服务器池。所有消息都在服务器上排队,直到客户端重新连接以检索消息。成功检索消息后,将该状态发送回WhatsApp服务器,后者将此状态转发回原始发送方(将其视为消息旁边的“检查标记”图标)。一旦客户端接受了消息,消息就会从服务器内存中消失
WhatsApp内部的注册流程是如何工作的?WhatsApp过去是基于手机IMEI号创建用户名/密码。这最近已更改。 WhatsApp现在使用从应用程序发送唯一的5位数PIN的一般请求。 WhatsApp随后将向指定的电话号码发送短信(这意味着WhatsApp客户端不再需要在同一手机上运行)。根据PIN码,应用程序然后向WhatsApp请求一个唯一的密钥。此密钥被用作所有未来调用的“密码”(此“永久”密钥存储在设备上)。这也意味着注册新设备将使旧设备上的密钥无效。
演员鲍勃最终收到来自(2)的消息并决定将此消息存储在名为“鲍勃收件箱”的文件中。一旦它已经持久地存储了这个消息,鲍勃会发送一条自己的消息给演员艾丽斯,说“我收到了Msg1”。演员艾丽斯现在可以停止重试。然后鲍勃检查鲍勃的手机是否与服务器有活动连接。是的,所以演员鲍勃通过TCP将该消息流式传输到设备。
鲍勃看到这条消息后回复说“给艾丽斯:让我们创造巨型机器人来对抗它们”。现在按照步骤1概述,鲍勃演员接收到这条消息。然后鲍勃演员重复步骤2和3,以确保艾丽斯最终接收到将拯救人类的想法。
实际上,WhatsApp使用XMPP协议而不是我上面概述的优秀协议,但你知道我的意思。