就架构本身来看,WhatsApp (后简称WA, 哇……)的架构属于“实在是太简单了,没有太多分析的价值”。概括起来就是Erlang on FreeBSD through XMPP.
业务需求决定架构。WA用户从零增长到4.5亿月活的过程中基本没有遇到系统扩展性的问题「昨天宕机三个小时原因也不是系统性能的问题,而是路由器的问题」。一方面由于WA业务比较单一,另一方面也得益于对系统的持续优化。
WA的架构在发展过程中有两个比较有意思的阶段:
1. 从C200K到C2800K「C: 这里特指Connection」。
2. 多媒体处理系统升级与优化。
这两个阶段都是在Rick Reed牵头下完成的。这哥们是个比较有意思的人物:2011年从雅虎跳巢到WA「时机把握得真好!」,当他来到WA的时候,居然不知道Erlang是什么东东。然而,仅仅一年后就交出了一台服务器处理百万并发连接的答卷,两年后已经成为Erlang领域的顶尖专家。这哥们貌似很喜欢足球,两次系统优化都是足球夜激增的流量激发了他upgrade的念想:)。
从C200K到C2800K
优化前,一个节点的连接负载能力约为200K,并面临着用户连接增多时系统过载和失败等问题。系统优化的目标很明确:
- 将一个节点连接负载能力提高到C1000K
- 可应对软硬件错误/故障以及突发事件造成的连接激增
所采用的方法详见Rick Reed, Scaling to Millions of Simultaneous Connections, March 30 2012. 简单来说,就是把以前所有系统资源利用不合理以及有更高效解决方式的地方都fix了一遍,然后持续优化和改进。根据Rick Reed的数据,第一轮下来提高到了C1000K,第二轮下来提高到了C2000K,并成功顶住了C2800K的峰值。不过Rick Reed认为承受C3000K也是没有问题的。
一些启示:
- Erlang拥有良好的SMP扩展性,并行优势很明显(24逻辑核上,>85%的利用率)
- 系统的资源争用有时候会产生难以置信的内耗。从C200K到C2000K就是通过解决/优化资源争用问题完成的。
- 对于使用频繁的函数,考虑使用更加高效的实现方式往往能收到”小处大为“的效果(WA中使用更加高效的cpu_timestamp,os:timestamp取代erlang:now。对于一个消息系统来说,这两个函数的优化很有意义)
- 不要忘了客户端App的优化
- 整个系统的性能取决于木桶最短的那根。很多时候,语言都很难成为最短的那根。当然,更没有必要因为WA是用Erlang构建的,你要把自己的系统转到Erlang上来。
多媒体处理系统升级与优化
最开始,系统是基于lighttpd + PHP. 为了让这个子系统具有更好的扩展性、稳定性以及用户体验,Rick对他进行了一次Erlang化改造。详细参见Rick Reed, March 21 2013。升级或的架构图如下图所示:
数据存储方面,垂直和水平都做了分片:
新架构下的系统峰值性能:
- 214M images in a day
- 8.8K images/sec downloades
- 29 Gb/sec output bandwidth
WA被收购后,Rick在Erlang Factory做了一次分享,这次分享的总结可以参加这篇文章,强烈建议有时间研究一下。
好啦,WA讲述的根本就不是Brian Acton屌丝逆袭的故事。它讲述的是Rick和Erlang的恋爱史。至此,移动端的IM布局基本也就不会发生大的变化了。在一次对Rick的采访中,有一个问题很有意思:
Mirko: Since you are working for the most used messaging system on the planet I have two non-technical questions. What is from your point of view the best thing introduced by digital communications? And on the other side, what do you miss from the “paper and pen” communication era?
Rick: Well we’ve come a long way from my first experience with digital communication, email on the arpanet. Today, I’m just a few taps on my smartphone away from instant communication with my family, friends, and coworkers, no matter where they are.
I think the downside is that because there are so many ways to communicate (phone, voicemail, email, messaging), you almost have to establish a mapping between each of the people and organisations in your life and how best to communicate with them. And if you get the mapping wrong, the mismatch between what you expect and they expect can cause all kinds of trouble.
小龙和企鹅看完会心一笑。
参考:How WhatsApp Grew To Nearly 500 Million Users, 11,000 Cores, And 70 Million Messages A Second