1 million is so 2011

Bài tóm tắt WhatsApp 2012 2. Tăng trưởng Độ khó: Trung bình

WhatsApp · 2012 · 2. Tăng trưởng · Độ khó: Trung bình — bài gốc

Bối cảnh

  • 1/2012. Vài tháng trước đó WhatsApp đã công bố 1 triệu kết nối TCP trên một máy; bài này là bản cập nhật.
  • Bài rất ngắn, chủ yếu là số liệu và cấu hình, không kể lý do hay quá trình.

Thay đổi chính

  • Hơn 2 triệu kết nối TCP đồng thời trên một máy (kern.ipc.numopensockets = 2.277.845), mà CPU vẫn còn ~42% idle và còn ~27GB RAM trống.
  • Phần cứng: 2× Xeon X5675 (24 luồng), ~96GB RAM.
  • OS: FreeBSD 8.2, chỉnh giới hạn kernel: maxsockets 2,4 triệu, maxfiles 3 triệu, tăng kích thước bảng hash TCP.
  • Runtime: Erlang R14B03 (SMP 24 luồng).

Vì sao

Bài không giải thích. Có thể suy ra từ cấu hình (đây là suy luận của wiki, không phải lời WhatsApp): mô hình process nhẹ của Erlang hợp với việc giữ hàng triệu kết nối dài, chủ yếu ngồi chờ; còn giới hạn thực tế nằm ở các tham số kernel.

Bài học cho SWE

  • Trước khi thêm máy, hãy đẩy một máy tới giới hạn thật. Phần lớn giới hạn mặc định của OS thấp hơn nhiều so với khả năng phần cứng.
  • Chọn runtime theo bài toán: kết nối dài, nhiều, ít tính toán là đúng sở trường của BEAM. Discord cũng chọn BEAM cho cùng lý do (Discord 2017).
  • Đọc bài này để biết con số, không phải để biết cách làm. Cần nguồn khác (ví dụ các bài nói về kiến trúc WhatsApp) để hiểu thêm.

Liên quan