Erlang Factory 2014 - That's 'Billion' with a 'B': Scaling to the Next Level at WhatsApp
字幕解读
讲者说明 WhatsApp 如何用 Erlang、分区、异步消息和大规模服务器处理高并发通信,并介绍瓶颈隔离、工作分发、Mnesia 复制与离线消息缓存等实践。系统采用滚动升级和小流量验证;一次路由故障引发节点重连与集群失稳,也暴露数据库加载、运维可视性及分区扩展等限制。
自动字幕 · 引文按字幕原文展示,可点时间戳回看片段。
内容要点
- 解耦、分区和异步处理用于限制局部瓶颈与故障的扩散,并维持其他路径的吞吐。
- 对同一记录集中访问到单一进程,并对分区安排单向复制,是讲者描述的一致性与竞争控制做法。
- 大规模系统难以完整模拟峰值负载,团队采用渐进式发布并持续监控容量和瓶颈。
视频章节 6
- Erlang 支撑高并发通信的规模
- 消息流量与后端负载
- 服务器平台和容量策略
- 解耦、异步处理与故障隔离
- 并行工作分发和分区
- 跨集群连接、故障与扩展挑战
具体观点与证据 4
WhatsApp把解耦的核心目标设为隔离瓶颈,避免下游故障级联。
本演讲历史架构;并非声称异步消除所有背压。
the ability to isolate bottlenecks so that they don't spread through the system按键把同一记录的访问集中到一个进程,减少无事务更新下的竞争。
async dirty路径不等于提供跨记录事务保证。
all the access on a single record is going through a single process写回缓存让很快被取走的消息无需落盘,缓冲IO波动。
缓存同步延迟与大邮箱淘汰均需按该工作负载设计。
messages they get served directly out of the cache without ever touching the file system扩大主机数可能暴露分片哈希与底层哈希重合的隐藏性能问题。
该事故通过改变哈希种子修复,不能泛化为横向扩容无效。
we were running close to capacity on that system and the throughput actually went down补充字幕原文 2
讲者把解耦的主要目标概括为隔离瓶颈,避免局部后端或分区问题扩散到系统其他部分。
ability to isolate bottlenecks so that they don't spread讲者说明同一记录的访问被哈希并路由到单一进程,以控制并发和一致性。
access on a single record is going through a single process解读边界
内容是讲者对 WhatsApp 当时架构与运行经验的描述,数字和系统状态仅代表演讲中的快照;转录无法独立核验其测量口径或因果归因。
相关视频与证据 3
跨领域机制并行工作前,先拆掉串行入口
后排优先登机使旅客堵在同一放行李位置;WhatsApp 即使有许多工作进程,单个分发进程仍成瓶颈。两者都需把待处理工作分散到多个可同时服务的位置。
The Fastest Way to Board a Plane Feels Like the Slowest ↗
随机分散可增加同时放行李机会。
increasing the chances of pullaways and parallels, unlike the more orderly methods▶ 3:30–3:47 · 观看片段Erlang Factory 2014 - That's 'Billion' with a 'B': Scaling to the Next Level at WhatsApp
单个分发进程会限制多工作进程系统。
the dispatch process itself became a bottleneck and not necessarily just适用边界 登机是物理队列,WhatsApp 是进程调度;这里只迁移串行入口限制吞吐的机制,不主张直接套用登机算法。
原则到生产实践进程隔离如何变成瓶颈隔离
Erlang/Elixir 讲解将不同进程作为隔离失败的边界;WhatsApp 的规模化实践则把解耦目标表述为隔离瓶颈,避免局部问题扩散。把两者并读,可以从运行时故障隔离延伸到生产系统的容量与故障域设计。
The Soul of Erlang and Elixir • Sasa Juric • GOTO 2019 ↗
将活动分到不同进程,可以隔离其中一部分失败。
separating failures by separating things into different processes▶ 14:37–14:43 · 观看片段Erlang Factory 2014 - That's 'Billion' with a 'B': Scaling to the Next Level at WhatsApp
WhatsApp 以隔离瓶颈为解耦目标,避免局部后端问题扩散。
ability to isolate bottlenecks so that they don't spread适用边界 WhatsApp 的讲解不证明所有瓶颈隔离都由 BEAM 进程隔离实现,也描述了特定系统架构中的取舍。
数据访问设计对照从访问模式出发,再选择数据项的协调方式
DynamoDB 讲解要求事先了解访问模式并围绕查询设计数据布局;WhatsApp 的讲解展示了另一项访问设计选择:同一记录的操作被路由到单一进程。两者可作为互补问题来读——先确定需要如何访问数据,再决定如何组织数据和协调对同一记录的并发访问。
Erlang Factory 2014 - That's 'Billion' with a 'B': Scaling to the Next Level at WhatsApp
同一记录的访问路由到单一进程,以控制竞争和一致性。
access on a single record is going through a single processAWS re:Invent 2018: Amazon DynamoDB Deep Dive: Advanced Design Patterns for DynamoDB (DAT401) ↗
需要先列出应用访问模式,再围绕这些模式设计数据模型。
understand every access pattern I need to know▶ 27:59–28:05 · 观看片段适用边界 前者讨论 DynamoDB 的表与索引建模,后者讨论 Erlang/Mnesia 系统中的进程路由;不能把单进程访问当作 DynamoDB 的设计建议。