Stack Overflow: The Hardware - 2016 Edition

Bài tóm tắt Stack Overflow 2016 3. Quy mô lớn Độ khó: Trung bình

Stack Overflow · 2016 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Bài 2 trong series của Nick Craver. Bài 1: Stack Overflow 2016; bài 3: Stack Overflow 2016. Bài này là phụ lục phần cứng để đọc các con số như "SQL 5–10% CPU".

Bối cảnh

Các bài khác trong series hay nói kiểu "SQL Server chỉ dùng 5–10% CPU". Bài này trả lời câu hỏi "5–10% của cái gì" bằng danh sách phần cứng ở data center New York (thực ra nằm ở New Jersey) và Denver (DR), năm 2016.

Thay đổi chính

  • Cách chọn phần cứng: mỗi máy được đặt cấu hình riêng cho đúng việc của nó, cùng với dev và SRE sẽ chạy trên đó; không mua hàng loạt rồi mới giao việc. Danh sách câu hỏi khi chọn:
    • scale up hay scale out, cần dư thừa bao nhiêu;
    • đĩa: có chạm đĩa không, tải ghi ra sao (loại SSD nào), dữ liệu có tạm thời không (SSD không tụ rẻ hơn);
    • RAM: phải mua bao nhiêu và có thể dùng bao nhiêu;
    • CPU: ít nhân nhanh hay nhiều nhân chậm, có tranh chấp L3 không;
    • DR có cần số máy bằng primary không.
  • Quy ước chung: mọi máy nối mạng bằng ≥2 đường 10 Gbps active/active (LACP); 2 nguồn điện từ 2 PDU; có cả iDRAC và KVM.
  • Các máy phục vụ site (New York, 2016):
    • SQL cụm Stack Overflow: 2 máy, 384 GB RAM, SSD NVMe 4 TB + 24 SSD SATA.
    • SQL cụm "mọi thứ còn lại": 2 máy, 768 GB RAM, 3 SSD NVMe 2 TB. Denver chỉ có 1 máy cho mỗi cặp.
    • Web: 11 máy, 2 CPU 12 nhân, 64 GB RAM.
    • Service (tag engine, indexing): 3 máy.
    • Redis: 2 máy, 256 GB RAM.
    • Elasticsearch: 3 máy, 192 GB RAM.
    • HAProxy: 2 máy cho traffic qua CloudFlare, 2 máy cho traffic trực tiếp; mỗi máy có cặp card riêng cho mạng trong (DMZ) và mạng ngoài.
  • Các máy phụ trợ: VMware cho domain controller và việc lặt vặt; cụm Logstash 288 TB raw; máy ML (Providence) chạy job đêm cho gợi ý việc làm, rảnh 99% thời gian.
  • Ghi log mọi HTTP hit từ HAProxy (qua syslog) vào một SQL Server riêng, mỗi ngày một clustered columnstore index, chỉ giữ vài trường (URL, UserAgent, thời gian SQL/Redis…). Dùng để điều tra lỗi của user và phát hiện botnet.

Vì sao

  • Theo tác giả, "performance is a feature" và code chỉ nhanh bằng phần cứng bên dưới; có phần cứng riêng thì chọn đúng loại cho từng việc.
  • Ít loại máy hơn thì quản lý ít thứ hơn, nên khi chọn còn xét máy đó gắn vào hệ thống chung thế nào (dùng chung kho log, kho dữ liệu nào).
  • Dev SQL Server có cấu hình giống production để dev "mô phỏng production càng sát càng tốt".

Bài học cho SWE

  • Một con số phần trăm sử dụng chỉ có nghĩa khi kèm cấu hình máy.
  • Scale up vẫn đi kèm dư thừa ngang ở mọi tầng: cặp máy, cặp mạng, cặp nguồn điện, một data center DR.
  • Log HTTP thô đặt trong columnstore theo ngày là cách rẻ để giữ dữ liệu điều tra lâu dài; năm 2025 hệ này mới bị thay bằng log CDN đưa vào Snowflake (Stack Overflow 2025).

Liên quan