Stack Overflow Architecture (2009)

Bài tóm tắt Stack Overflow 2009 1. Khởi đầu Độ khó: Dễ

Stack Overflow · 2009 · 1. Khởi đầu · Độ khó: Dễ — bài gốc

Nguồn thứ cấp: Todd Hoff (HighScalability) tóm tắt podcast và blog của Jeff Atwood, Joel Spolsky. Nhận định ghi "theo Stack Overflow qua lời kể của HighScalability" hoặc "theo HighScalability". Ảnh chụp 7 năm trước Stack Overflow 2016.

Bối cảnh

  • 2009, Stack Overflow khoảng 16 triệu page view/tháng, Alexa hạng khoảng 1.666; cùng hạ tầng chạy thêm Server Fault và Super User.
  • Kiến trúc hai tầng: web server (ASP.NET MVC, C#) gọi thẳng database (SQL Server); toàn bộ stack Microsoft.
  • Phần cứng (2009): hai web server 1U 4 core, 8 GB RAM; một database server 2U 8 core, 48 GB RAM (vừa nâng lên).

Thay đổi chính

  • Không có thay đổi kiến trúc: điểm của bài là lựa chọn scale up (mua máy to hơn, thêm RAM) thay vì scale out lúc mọi người đang đổ xô sang NoSQL.
  • Theo Joel Spolsky (qua HighScalability), họ đạt hiệu năng tương đương các site cỡ tương tự với khoảng 1/10 phần cứng.
  • Còn nhiều đường lùi nếu cần scale: cache, thêm web server, đĩa nhanh hơn, denormalize, thêm RAM, partition một phần.

Vì sao

  • Theo Jeff Atwood: "phần cứng rẻ, lập trình viên đắt"; nâng RAM DB lên 48 GB rẻ hơn thời gian kỹ sư.
  • Theo HighScalability: Stack Overflow ở "điểm ngọt" của scale up: lượng user tự giới hạn (lập trình viên), không lưu nhiều media, không có đồ thị xã hội phức tạp.
  • NoSQL khó (theo HighScalability): mất aggregate, secondary index, query liên partition, giao dịch vượt một record; mọi bản denormalize phải tự cập nhật và tự xử lý lỗi một phần.
  • Giấy phép Microsoft đi kèm scale up: khi phải scale out ra hàng chục core, chi phí license sẽ "cắn".

Bài học cho SWE

  • Scale up là lựa chọn hợp lệ cho một lớp bài toán khá lớn; đừng scale out "phòng hờ" khi chưa cần (Sharding và tách database).
  • So chi phí phần cứng với chi phí kỹ sư, không chỉ so giá máy (Chi phí hạ tầng và build vs buy).
  • Database quan hệ làm sẵn nhiều thứ mà NoSQL bắt mình tự viết; chỉ đổi khi workload thật sự đòi (Chọn database theo workload).
  • Người đọc bình luận chỉ ra điểm yếu: database là single point of failure. Scale up giải quyết hiệu năng, không giải quyết sẵn sàng.

Liên quan