HackerTube ?

Erlang Factory 2014 - That's 'Billion' with a 'B': Scaling to the Next Level at WhatsApp

Erlang Solutions在 YouTube 播放 ↗

字幕解读

讲者说明 WhatsApp 如何用 Erlang、分区、异步消息和大规模服务器处理高并发通信,并介绍瓶颈隔离、工作分发、Mnesia 复制与离线消息缓存等实践。系统采用滚动升级和小流量验证;一次路由故障引发节点重连与集群失稳,也暴露数据库加载、运维可视性及分区扩展等限制。

自动字幕 · 引文按字幕原文展示,可点时间戳回看片段。

内容要点

  • 解耦、分区和异步处理用于限制局部瓶颈与故障的扩散,并维持其他路径的吞吐。
  • 对同一记录集中访问到单一进程,并对分区安排单向复制,是讲者描述的一致性与竞争控制做法。
  • 大规模系统难以完整模拟峰值负载,团队采用渐进式发布并持续监控容量和瓶颈。
视频章节 6
  1. Erlang 支撑高并发通信的规模
  2. 消息流量与后端负载
  3. 服务器平台和容量策略
  4. 解耦、异步处理与故障隔离
  5. 并行工作分发和分区
  6. 跨集群连接、故障与扩展挑战
具体观点与证据 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 process
关联视频

AWS 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 的设计建议。

Hacker News 评论

查看 HN 原评论 ↗