通俗易懂深入剖析 WhatsApp技术架构

本文译自Codin Gurukul经OpenIM技术人员整理修订后发布。

写在前面

Open-IM是由前微信技术专家打造的开源的即时通讯组件。Open-IM包括IM服务端和客户端SDK,实现了高性能、轻量级、易扩展等重要特性。开发者通过集成Open-IM组件,并私有化部署服务端,可以将即时通讯、实时网络能力快速集成到自身应用中,并确保业务数据的安全性和私密性。

了解更多原创文章:

【OpenIM原创】开源OpenIM:轻量、高效、实时、可靠、低成本的消息模型

【OpenIM原创】C/C++调用golang函数,golang回调C/C++函数

【OpenIM原创】简单轻松入门 一文讲解WebRTC实现1对1音视频通信原理

【OpenIM扩展】OpenIM服务发现和负载均衡golang插件:gRPC接入etcdv3

【开源OpenIM】高性能、可伸缩、易扩展的即时通讯架构

实时消息现在是我们日常生活中必不可少的一部分。但是,你有没有想过“WhatsApp”或其他实时消息应用程序是如何工作的?

在本文中,我们将探讨whatsapp或任何通用实时消息应用程序背后的高级工程和系统架构。

在深入研究之前,让我们先了解“通讯是如何工作的?

当两个客户机(A和B)想要相互通信或发送消息时,他们首先知道对方的地址(可能是IP、MAC或任何自定义的唯一标识),然后通过网络彼此交换消息,在这种情况下是INTERNET。这个就是所谓的p2p通信了。

但是,如果网络非常庞大,客户数量达到数百万或数十亿,该怎么办?

在一个非常大的网络中,很难知道每个客户机的地址,在这种情况下,为了使这个系统更加健壮和高可用性,我们需要在客户机之间安装一个名为“服务器”的组件。此服务器的任务是协调连接到它的所有客户端,中转双方之间的消息。

服务器引入后。所有客户端都与服务器连接,而不是彼此连接,这样成了中心化的通讯架构

在这种情况下,当一个客户机(a)想要向其他客户机(D)发送消息时,它首先将消息发送到服务器,服务器知道其他客户机(D)的地址,然后将消息转发给其他客户机(D),反之亦然。

这是通信体系结构的概述。让我们设计一个实时消息传递系统的实际系统设计。

但在设计任何产品之前,了解以下要求非常重要:

用户群:了解应用程序的使用规模非常重要。

所需功能

那么,让我们列出whatsapp中需要包含的一些功能:

1). 发消息

2). 多媒体支持

3). Last Seen

4). 消息加密

5). 音频/视频通话

让我们开始根据应用程序需求设计系统。

根据用户群,我们需要多台服务器来处理如此多的流量,因此我们放置了多台服务器,而不是一台服务器,这就是集群的概念

但问题是,客户端将连接到哪个服务器,因为有多个服务器,并且客户端不能随机连接到任何服务器。为了克服这个问题,我们在客户端和服务器之间引入了负载均衡。

在实现了多个服务器和负载平衡器之后,我们的系统架构能够处理大量用户。现在,当客户机想要连接到服务器时,连接请求首先命中负载平衡器,然后负载平衡器根据各个服务器上的负载等各种参数将连接重定向到服务器。

但我们的应用程序也需要一些存储机制来保存一些任意状态或数据,为了满足这一要求,我们还添加了可供所有服务器访问的数据库。

但是,使用什么样的连接呢?

通常,这种系统使用双工连接或双向连接。由于消息也可以从服务器生成,因此需要双向通信

在继续之前,让我们先了解不同的连接场景以及应用程序的工作方式。

当发送方连接到服务器而不是接收方时。

在这种情况下,当接收方未连接到服务器时,消息存储在数据库中,当接收方连接到服务器时,消息从数据库中提取并转发给接收方,这个就是离线消息的作用。

2.当发送方未连接到服务器时。

在这种情况下,当发送方未连接到服务器时,发送方发送的消息将保存在设备本地存储中(可能是SQLite或基于平台的任何其他内容)。当发送者联机或连接到服务时,消息将从本地存储中提取并发送到服务器。这个就是本地存储的作用。

3.当两个客户端都连接到服务器时:

在这种情况下,当两个客户端都连接到服务器时,发送方发送消息,服务器将该消息转发给接收方,而不将消息存储到数据库或设备本地存储器。

这是whatsapp系统架构的概述,在下一篇文章中,我们将仔细研究消息服务器内部的技术,我们将用通俗易懂的语言给大家讲解。

OpenIM github开源地址:

https://github.com/OpenIMSDK/Open-IM-Server

OpenIM官网 :https://www.rentsoft.cn

OpenIM官方论坛:https://forum.rentsoft.cn

我们致力于通过开源模式,为全球企业/开发者提供简单、易用、高效的IM服务和实时音视频通讯能力,帮助开发者降低项目的开发成本,并让开发者掌控业务的核心数据。

IM作为核心业务数据,安全的重要性毋庸置疑,OpenIM开源以及私有化部署让企业能更放心使用。

如今IM云服务商收费高企,如何让企业低成本、安全、可靠接入IM服务,是OpenIM的历史使命,也是我们前进的方向。

如您有技术上面的高见请到我们的论坛联系沟通,用户也可与我们的技术人员谈讨使用方面的难题以及见解

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容