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.
- Việc thật sự không cần trong sự cố thật thì làm trước:
- Thứ tự dựng lại:
- các tầng có trạng thái từ backup mới nhất;
- web package generator;
- ELB;
- tạo file history cho Pycache (nếu không có, web server khởi động sẽ dồn tải lên MySQL);
- các tầng không trạng thái;
- 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
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (2)