Ensuring Quora's Resilience to Disaster

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

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

Bối cảnh

  • Quora backup hằng ngày mọi kho dữ liệu gốc (MySQL, HBase, Redis, feed service) và nhân bản tới nhiều nơi.
  • Nhưng có backup chưa đủ: phải khôi phục được, và nhanh. Nhiều công ty giả lập lỗi; Quora giả lập hẳn thảm hoạ.

Thay đổi chính

  • Game Day (12/5/2016): giả định mọi hạ tầng, dữ liệu và backup production mất vĩnh viễn, rồi dựng một bản Quora độc lập ở us-west-2 chỉ từ backup đã nhân bản (backup ở us-east-1, bản sao ở us-west-1).
  • Chuẩn bị: tách việc thành hai loại.
    • Việc thật sự không cần trong sự cố thật thì làm trước:
      • kiểm tra script restore không đụng production;
      • xin AWS nâng giới hạn instance;
      • dựng VPC chặn kết nối ra ngoài để bản khôi phục không gửi email hay push.
    • Việc nào trong sự cố thật vẫn phải làm thì để tới ngày diễn tập mới làm.
  • Thứ tự dựng lại:
    1. các tầng có trạng thái từ backup mới nhất;
    2. web package generator;
    3. ELB;
    4. tạo file history cho Pycache (nếu không có, web server khởi động sẽ dồn tải lên MySQL);
    5. các tầng không trạng thái;
    6. chạy kiểm tra Sentry.
  • Kết quả: phục vụ được trang Quora sau chưa tới 5 giờ. Theo Quora, sự cố thật có thể chỉ mất khoảng 2 giờ.
    • Thời gian restore: MySQL khoảng 2 giờ, Redis khoảng 30 phút, feed khoảng 1 giờ, HBase khoảng 5 giờ.
    • HBase phục vụ được trong lúc đang restore, nên có thể khôi phục bảng quan trọng trước.

Bài học (theo Quora)

  • Runbook tập trung cứu nhiều thời gian, vì người restore một tầng thường không phải người vận hành tầng đó.
  • Giới hạn ẩn: đã tính quota theo loại instance nhưng quên quota tổng số instance, nên vẫn phải chờ AWS support.
  • S3:
    • cross-region replication chỉ đi một đích, không fan-out hay chain được;
    • một số tool không chạy ngoài us-east-1 vì bucket có dấu chấm trong tên.
  • Phụ thuộc không cần thiết: script restore HBase phải import web package, nên phải chờ mọi kho khác xong trước. Tên máy hardcode rải khắp code: từng chỗ không đáng gì, cộng lại thì làm chậm đáng kể.
  • AMI cũ làm khởi động máy chậm, vì phải cài nhiều bản vá bảo mật. Họ chuyển sang build AMI định kỳ.
  • Họ định lặp lại diễn tập thường xuyên.

Bài học cho SWE

  • Backup chỉ có giá trị khi đã từng restore thử; đo thời gian restore cho từng kho.
  • Diễn tập thảm hoạ lộ ra những phụ thuộc ngầm (thứ tự restore, tên hardcode, quota) mà đọc thiết kế không thấy.
  • Đây là mức "khôi phục trong vài giờ"; xa hơn là active-active nhiều region như Netflix hay Instagram (Độ tin cậy và multi-region).

Liên quan