截至 2017 年 2 月,WhatsApp 在全球拥有 12 亿用户。有没有想过 WhatsApp 仅 55 名工程师的团队如何能够管理 10 亿用户?
一个简单的答案-> Erlang
Erlang 是一种函数式语言范式,用于 WhatsApp 的完整后端堆栈。 WhatsApp 基本上使用 ejabberd XMPP 应用程序服务器作为 WhatsApp messenger 的后端实现,这是一个用 Erlang 开发的开源项目。
现在 Erlang 或 ejabberd 服务器的实现有什么特别之处?此外,再深入一点,在 Erlang 和其他语言中创建进程的方式存在巨大差异,这就是 Erlang 中进程如此轻量级的原因。
- 海量可扩展性:它具有海量并发性,在一个节点上可以处理多达 2、000、000 个用户
- 容错:在实时系统中,我们知道会发生错误,事情会崩溃,erlang 工程师也是如此。为了防止这种情况,Erlang 有强大的工具来最小化错误并尽早从中恢复。
- OS 创建的进程: Erlang 进程(称为绿色线程)由 Erlang VM 创建,而不是由 OS 创建
- 上下文切换:在进程之间切换,一个进程知道它切换到的进程的Pid,所以没有调度器的作用,因此是O(1)操作。
- 进程隔离:进程是完全隔离的,因此不需要实现互斥锁来防止死锁情况。
上面提到的可扩展性是通过 Erlang 系统创建进程的方式获得的。
Erlang 进程的以下特性有助于它实现如此高的可扩展性:
- 它们是轻量级的(动态增长和收缩)
- 他们创造和破坏的速度很快
- 调度开销非常低
- 进程之间没有共享空间,它们唯一的交流方式是通过消息传递
你可以这样扩展思路——Erlang VM是由一个OS进程操作的,Erlang VM可以根据需要创建任意多个进程,所以一个OS进程控制了多个Erlang进程,这就是为什么操作系统没有开销的原因一切都由 Erlang 虚拟机处理。
由于您需要非常少的系统来处理数十亿用户,因此您需要更少的工程师。