WhatsApp技术实践分享:由32个工程团队创建的技术神话
1.前言
WhatsApp技术实践分享:由32人工程团队484365f3153ace2ad3af9849ac011728.jpg神话创造的技术
WhatsApp(相当于中国的微信)是一款在国外非常受欢迎的移动即时通讯应用,几年前以190亿美元的价格卖给了脸书,这是WhatsApp的辉煌胜利。
然而,不可忽视的是,该公司当时只有32名工程师,为4.5亿活跃用户工作。我们再次回顾了当时高扩展性的创始人托德·霍夫分析的收购原因,以及WhatsApp的高度可靠的架构。尽管内容不完整,但我们今天仍有很多东西要学习。
2.什么是WhatsApp?
WhatsApp(WhatsApp Messenger)是国外流行的移动即时通讯软件(相当于中国的微信),用于智能手机之间的通信。借助推送通知服务,该应用程序可以立即接收朋友、亲戚和同事发送的信息。你可以从发送短信切换到免费使用WhatsApp程序发送和接收信息、图片、音频文件和视频信息。
WhatsApp大事记:
2009年2月24日,Qom注册了一家专门开发手机“状态”应用的公司。该公司的暂定名称是WhatsApp。另一个替代名称是Zap,它旨在开发一个应用程序,可以显示所有者是否方便接听电话。
2009年5月,该产品的第一个版本没有引起任何反响。六月之后,苹果在iOS 3.0中增加了通知推送功能。让康重新思考一下WhatsApp的功能,希望将其重新定位为一个功能齐全的跨平台聊天应用,不仅可以直接使用手机通讯录作为“预建社交网络”,还可以直接用手机号码登录。9月,该应用程序上线,阿克顿决定与库姆开始一项业务,并领导了一轮投资。他们希望共同探索一种独特的商业模式,这种模式不仅能创造足够的收入,还能保证在可控范围内的增长,从而提供足够的基础设施。
2011年8月28日,库姆团队宣布申请拒绝广告。同年,红杉资本(Sequoia Capital)的创始合伙人Jim戈茨(Jim Goetz)向WhatsApp投资800万美元。
2013年6月12日,移动聊天工具WhatsApp每天处理270亿条聊天信息。
2014年2月20日,移动通信服务(即时通讯软件)WhatsApp将以约190亿美元的价格被社交网络脸书收购。10月3日,欧盟反垄断监管机构正式批准了脸书对移动新闻初创公司WhatsApp的收购。[9]
2015年4月21日,WhatsApp iOS的iOS版本进行了更新,增加了语音通话、跨应用程序共享视频、图片和链接、在应用程序中共享图片以及同时共享多张照片和视频。
3.WhatsApp 190亿美元销售额的背后
作为一名程序员,如果你问WhatsApp是否值这么多钱,我的回答肯定是不!因为产品的真正价值不在于严格的代码,而在于如何让用户喜欢和使用它们。
针对这一应用的特点,我们知道WhatsApp是一款世界级的零噱头(零广告、零创意、零游戏)产品,在短信收费时代提供了一个免费的信息交流平台。目前,这个应用程序已经被大量的美国人使用,所以一旦用户加入,就会有大量的亲戚朋友在上面。随着手机的普及,WhatsApp肯定能填补美国社交网络的空白。鉴于它的跨平台特性,每个人都可以使用它;值得注意的是,它还可以以各种格式传输信息,如共享地理位置、发送语音和视频等。WhatsApp具有出色的国际化特性,使用手机号码作为身份验证信息,联系人列表作为社交图,因此您不需要电子邮件身份验证、用户名和密码,也不需要提供信用卡等号码信息——“这就行了”。
尽管WhatsApp拥有如此吸引人的功能,但它的价值仍不足190亿美元,对于互联网巨头来说,模仿这些功能并不复杂。
WhatsApp能卖出190亿美元有几个原因:
第一:WhatsApp威胁了脸谱网;;
第二:当时脸谱网正在衰落,需要增加很多新鲜血液;
第三:WhatsApp是你的电话簿;
第四:WhatsApp可以收集大量元数据(尽管它们没有保存)。
准确地说,斥资190亿美元收购WhatsApp是为了其庞大的用户群、不断增长的数百万用户群以及10亿用户的潜力——脸书需要WhatsApp成为下一个10亿用户的应用程序,但它当然只能是其中的一部分。与此同时,每个用户40美元的价格并不离谱,尤其是股票占了大部分资金。脸书曾经以每个用户30美元的价格购买了Instagram,而推特的价格是每个用户110美元。
本尼迪克特·埃文斯(Benedict Evans)做出了一个伟大的预测,移动市场是一个万亿美元的市场。WhatsApp每天发送180亿条短信(整个短信系统每天只发送200亿条),扰乱了整个短信市场,这个市场的税收超过1亿美元。随着智能手机越来越受欢迎,WhasApp比Facebook有更清晰的盈利思维。然而,在承诺零广告和零干扰之后,脸谱网将从哪里受益?
移动应用业务开发中有许多有趣的用例。项目团队经常使用WhatsApp来建立对话组,风险投资者乐于将它作为交易过程中的对话工具。
由于每个人都有一部手机,信息应用变得更加强大、免费和廉价,商业和其他类型的应用已经逐渐过渡到移动终端。许多功能不再只能通过桌面或网络应用程序来实现,因此不再有必要质疑移动即时消息应用程序的重要性。
然而,不管这笔交易如何,WhatsApp当时是如何利用32名工程师来支持4.5亿活跃用户的?让我们来看看。
4.WhatsApp当时给出的统计数据
这些统计数据是系统当时的一些数据,更多的是关于数据存储、消息、元集群和新添加的BEAM/OTP补丁。
4 . 5亿活跃用户,是历史上最快达到这个数字的公司;
32名工程师,每个工程师平均支持1400万活跃用户;
每天通过7个平台发送和接收500亿条消息;
平均每天注册用户数超过一百万;
0广告费用;
800万投资;
数百个节点;
8000+内核;
数百TB的内存;
Erlang消息每秒超过7000万条。
2011年,WhatsApp单个服务器获得了100万个tcp会话,但仍有内存和CPU剩余。2012年,tcp会话增加到200万。2013年,WhatsApp发布了一份推文声明,有70亿条信息传入,110亿条信息传出,也就是说,每天有180亿条信息被处理,这就是伟大的2013年!
5.WhatsApp所依赖的基础软件技术
服务器包括:
二郎;
FreeBSD。
Yaws、lighttpd
初级专业人员;
BEAM定制补丁(BEAM类似于Java JVM,但适用于Erlang);
定制XMPP。
客户包括:
七个客户端平台:iPhone、安卓、黑莓、诺基亚塞班360、诺基亚S40和Windows Phone。
6.WhatsApp所依赖的硬件平台
标准面向用户的服务器:
双威斯特米尔十六进制内核(24个逻辑处理器););
100 GB内存、固态硬盘;
双网卡(面向公共用户的网络,专用后端/分发)。
7.WhatsApp产品定义
专注于信息传递:连接来自世界各地的用户,忽略他们的地理位置,不需要支付高额费用。1992年,创始人简·库姆经常提到联系世界各地的家庭成员有多困难。
隐私:由简·库姆制定,消息不会存储在服务器上,聊天记录也不会存储,这样就不知道用户的隐私。用户名和性别不会被保存,聊天记录只会存储在手机上。
8.WhatsApp的具体技术情况
1.WhatsApp服务器基本上完全由Erlang实现
后端消息路由的服务器系统由Erlang实现。值得炫耀的是,如此多的活跃用户只使用很少的服务器来管理,团队认为这在很大程度上归功于Erlang。值得注意的是,脸书聊天是二郎在2009年开发的。他们放弃Erlang的原因是很难招募到优秀的程序员。
2.WhatsApp服务器最早是从Ejabberd开始的
EJabberd是一个著名的开源jabber服务器,由Erlang实现。最初选择它的原因是开放性、开发人员的广泛关注、易于启动以及Erlang在大规模通信系统中的长期声誉。在接下来的许多年里,我一直致力于重写和修改Ejabberd,包括从XMPP转换到内部开发协议,调整代码库和重新设计一些核心组件,并对Erlang虚拟机进行了大量修改以实现高性能。
3.为了每天处理500亿条信息,我们的工作重点是建立可靠的系统,而货币化对我们来说仍然是一件遥远的事情。
4.系统的健康状态主要取决于队列的长度。每个节点上消息队列的长度将一直受到监控。如果超过预设的临界值,将发出提醒。多个警报的出现表明系统已经进入下一个瓶颈。
5.通过将图片、音频和视频上传到一个HTTP服务器来发送多媒体消息,然后添加到内容的链接以及Base64编码的缩略图(如果可用)。
6.一些代码基本上每天都在变化,通常是一天几次;当然,在高峰时间必须避免。Erlang非常适合为产品添加修改或新功能。热加载意味着无需重启就可以实现修改,并且可以快速解决错误。类似地,通过热加载,系统变得更加松散耦合,这可以使更新快速发布。
7.WhatsApp使用什么协议?
WhatsApp服务器池使用SSL套接字,在客户端重新连接以检索消息之前,所有消息都在服务器上排队。成功检索到的消息将被发送回WhatsApp服务器,并再次转发给原始发件人。一旦客户端成功接收到此消息,它将在服务器存储中被删除。
8.WhatsApp注册程序的内部工作机制是什么?
WhasApp依靠手机IMEI号码来建立用户名/密码,最近已经修改过了。WhatsApp现在将让应用程序发送一个包含5位密码的普通请求,然后向这个电话号码发送一条短信,这意味着WhatsApp客户端不再局限于某个手机。基于个人识别码,应用程序将向WhatsApp请求一个唯一的密钥,该密钥将被用作未来使用的密码,这也意味着原始设备上的密钥在新设备上注册后将无效。
9.谷歌的推送服务在安卓系统上使用。
10.安卓的便利性。
与安卓打交道更令人愉快。开发人员可以基于某个特性快速构建原型,并在最短的时间内启动它们。如果有问题,他们可以很快解决,但iOS不能。
9.WhatsApp在一台服务器上实现了200万个连接的探索
1)购买更好的硬件:
尽管用户增长很受欢迎,但这也意味着你必须投资更多的钱来购买硬件;与此同时,机器数量的增加大大增加了管理、操作和维护的复杂性。
2)有必要对流量波动进行规划:
例子是西班牙的足球比赛和墨西哥的地震。现实世界中的这些大事件会导致非常高的交通高峰,因此需要有足够的空闲容量来处理交通高峰+紧急情况。例如,最近的一场足球比赛当天产生了35%的出站消息。
3)初始服务器负载为每台服务器200,000个并发连接:
预计将增加大量服务器来维持用户的增加。服务器将因负载爆炸而停机,网络和其他故障也会发生。此时,一些组件需要解耦,以便增加容量来应对峰值。目标是在一台服务器上支持数百万个连接,这是在只有200,000个连接时设置的。动态容量规划处理世界级事件、硬件故障和其他类型的小故障,系统需要足够的灵活性来处理高利用率和故障。
10.用于增强可扩展性的工具和技术
1.用于编写系统活动报告(wsar)的工具:
记录整个系统状态,包括操作系统状态、硬件状态和束流状态。这是为了从其他系统获取状态信息,如虚拟内存。跟踪并记录CPU利用率、系统总体利用率、用户时间、系统时间、中断时间、上下文切换、系统调用、陷阱、数据包发送和接收、所有进程队列中的消息总数、繁忙端口事件、通信速率、字节输入/输出、调度状态、垃圾收集状态等。
最初,它每分钟运行一次。当系统变得难以运行时,时间周期将减少到每秒一次,因为它很少会在一分钟内无法运行。理解所有系统的操作需要非常精细的统计。
2.中央处理器中的硬件性能计数器(PMC统计):
通过查看CPU时间的百分比,您可以知道运行模拟器的周期时间。如果是16%,这意味着只有16%的时间用于执行模拟代码,所以即使您可以消除所有Erlang代码的执行时间,您也只能节省16%的总运行时间,这意味着您应该关注其他方面来提高系统的效率。
3.dtrace,内核锁计数,fprof:
Dtrace主要用于调试,而不是提高性能。
在FreeBSD上修补BEAM并添加中央处理器时间戳。
编写一个脚本来创建所有进程的聚合视图,以查看哪些程序占用了系统资源。
最大的胜利是启用模拟器的锁计数。
4.一些问题:
人们发现在垃圾收集上花了很多时间,这个问题已经解决了。
发现网络堆栈有问题,然后堆栈被转移。
大多数问题都与模拟器的锁冲突有关,这主要反映在锁计数的输出上。
5.测量:
全面的工作负载意味着从您自己的测试脚本中生成流量,对于在极端规模下调优到用户系统没有任何价值。
对于像用户表这样的简单界面,它工作得很好,用户表生成访问,然后尽可能快地读取它。
如果一台服务器只支持100万个连接,那么整个系统将需要30台这样的主机来打开足够的IP端口并生成足够的连接;但是,由于开销太大,只能测试一台服务器。要测试200万台连接的服务器,需要60台主机,因此很难产生如此大的规模。
在生产环境中很难产生这种流量。正常工作负荷下可以估计,但现实中看到的网络事件和世界事件主要是由于客户端在多个平台上的不同用户行为以及不同国家之间的差异造成的。
6.结果:
一开始,每台服务器有200,000个并发连接。第一个瓶颈发生在每台服务器有425,000个连接时。系统遇到许多冲突并停止工作。安装调度程序会检测有多少有用的任务被停止、休眠或反转。加载时,它开始遇到睡眠锁定,整个系统只使用了35-45%的CPU利用率,但调度器的CPU利用率达到95%。
第一轮修复使连接数量超过100万。虚拟机利用率为76%,CPU利用率为73%,BEAM模拟器利用率为45%,这与用户百分比非常一致,这是一件好事,因为模拟器与用户相同。通常,CPU利用率不是一个好的评估方法,因为调度程序使用CPU,所以系统可能看起来很忙。
一个月后,瓶颈解决了,每台服务器的连接数达到了200万。BEAM的利用率为80%,接近FreeBSD开始分页的情况。CPU利用率大致相同,连接数是原来的两倍。调度程序遇到了冲突,但运行良好。似乎可以暂停测试,然后分析Erlang代码。
最初,每个连接有两个Erlang进程,这两个进程被简化为一个。用计时器做些工作。
11.经验总结
1.优化是一件非常困难的事情,只有工程师才能做到:
在查看了大量修改后(使每台服务器的连接数达到200),Rick感到更加头皮发麻。大量的工作包括编写工具、运行测试、添加补丁、向堆栈的每一层添加令人眼花缭乱的方法、调试系统以及寻找线索。每个细节都不能错过。你需要尽力控制一切。只有这样,我们才能消除瓶颈,提高性能,最大限度地提高可扩展性。
2.获取您需要的数据,编写工具,为工具添加补丁,以及添加控制旋钮:
扩展系统以获得更多数据是肯不懈的追求。为了获得他们需要的数据,有必要不断编写工具和脚本来管理和优化系统。尽一切努力获取数据。
3.测量、消除瓶颈、测试并重复该过程:
这很无聊,但你需要去做。
4.二郎棒极了!
作为一个多用途、可靠和高性能的平台,Erlang继续证明其卓越的品质。虽然二郎需要很多的调整和修复,但人们不可避免的会质疑二郎。
5.破解病毒代码并获得好处:
“病毒性”现在是高质量的代名词,就像WhatsApp一样,只要你真的这么做了,就意味着你赚了很多钱。
6.价值不再与雇员人数直接相关:
如今,员工的数量并不意味着什么。先进的世界级电信基础设施使像WhatsApp这样的应用成为可能。如果WhatsApp仍然需要制造网络或手机等设备,可能根本就没有像WhatsApp这样的公司。强大、廉价的硬件和开源软件无疑让WhatsApp的成功事半功倍。换句话说,WhatsApp的成功在于它在正确的时间和地点为正确的用户提供了正确的产品。
7.关注用户的想法非常重要:
对WhatsApp来说,将自己定位为一个简单的消息应用程序非常重要,而不是一个游戏网络、广告网络或垂死的照片网络。由于这种定位,他们不在应用程序中添加广告,他们试图保持应用程序简单,同时添加新功能,这种愚蠢的操作模式使WhatsApp适合每个用户。
8.考虑到简单性,允许一些限制:
您的身份与电话号码相关联,因此如果您更改了电话号码,您的身份将无效。这与普通应用程序有点不同,但它使整个系统的设计更简单。
9.年龄歧视:
2009年,由于年龄歧视,WhatsApp创始人布莱恩·阿克顿甚至无法在推特和脸书上找到工作,所以让他们后悔吧。
10.从简单开始,然后深入定制:
当WhatsApp第一次启动时,服务器端是基于jabberd的,现在它已经被完全重写了,但这确实是Erlang方向的第一步。Erlang在第一次使用时就显示出可伸缩性、可靠性和可操作性,这使得它被越来越广泛地使用。
11.保持较低的服务器数量:
尽量减少服务器的数量,并为短暂的高峰期预留足够的空间。分析和优化,直到达到收益递减点,然后部署更多硬件。
12.有目的地添加冗余服务器:
这可以确保用户在公司休假时得到不间断的服务,并且员工可以享受假期而不用花时间去解决过载问题。
13.赚钱的时候,我们也应该考虑公司的成长:
WhatsApp在免费的时候增长最快,早期每天有10,000次下载。然后转向付费,下载量下降到每天1000次。在年底添加图片新闻后,他们根据下载次数将付费改为年费。
14.灵感总是来自最意想不到的地方:
忘记Skype用户名和密码的经历无疑启发了WhatsApp。
----------------------------------------------------------------------------------
哇谷im_im即时通讯_私有云_公有云-哇谷云科技官网-JM沟通
IM下载体验 - 哇谷IM-企业云办公IM即时聊天社交系统-JM 沟通下载
IM功能与价格 - 哇谷IM-提供即时通讯IM开发-APP搭建私有化-公有云-私有化云-海外云搭建
新闻动态 - 哇谷IM-即时通讯热门动态博客聊天JM沟通APP
关于哇谷-哇谷IM-提供企业即时通讯IM开发-语音通话-APP搭建私有化-公有云-私有化云-海外云搭建
联系我们 - 哇谷IM-即时通讯IM私有化搭建提供接口与SDK及哇谷云服务
公有云和私有云之间有什么区别?类似融云、环信云、网易云、哇谷云?