Handling Growth with Postgres: 5 Tips From Instagram
Bài tóm tắt Instagram 2013 2. Tăng trưởng Độ khó: Trung bình
Instagram · 2013 · 2. Tăng trưởng · Độ khó: Trung bình — bài gốc
Bối cảnh
- Postgres vẫn là kho dữ liệu chuẩn (canonical) cho phần lớn dữ liệu user. Từ 90 like/giây (bài sharding năm 2011, Instagram 2011) lên hơn 10.000 like/giây lúc cao điểm (đầu 2013) mà công nghệ lưu trữ lõi không đổi.
- Bài do đồng sáng lập Mike Krieger viết: những mẹo "ước gì biết từ đầu".
Thay đổi chính (5 mẹo)
- Partial index: khi hay lọc theo một đặc điểm mà chỉ thiểu số hàng có. Ví dụ tìm tag: chỉ index các tag có ≥100 ảnh (dữ liệu có đuôi dài). Query từ ~215ms (quét ~15.000 hàng) xuống ~3ms (169 hàng). Planner vẫn dùng đúng index với điều kiện chặt hơn (≥500).
- Functional index: chuỗi dài (token base64 64 ký tự) chỉ index tiền tố
substr(token, 0, 8), nên index nhỏ bằng 1/10, lọc phần còn lại sau. - pg_reorg để compact: bảng bị phân mảnh (do MVCC), và thứ tự chèn khác thứ tự hay đọc (ví dụ mọi like của một user). pg_reorg dựng lại bảng theo thứ tự index với trigger ghi lại thay đổi trong lúc dựng, rồi cắt sang bảng mới. Đã chạy hàng chục lần trên hàng trăm máy.
- WAL-E: lưu trữ WAL liên tục lên S3 + base backup, nên khôi phục được về bất kỳ thời điểm nào và dựng replica hay failover slave nhanh.
- psycopg2:
- autocommit cho query chỉ đọc (không BEGIN/COMMIT): giảm qua lại giữa app và DB, giảm CPU hệ thống của DB, trả connection về PgBouncer sớm hơn;
- wait_callback để query song song nhiều node (fan-out query) với gevent/eventlet.
Vì sao
Theo Instagram: hiểu và tận dụng tính năng của DB đang dùng giúp scale tiếp mà không phải đổi công nghệ.
Bài học cho SWE
- Tối ưu trong DB đang dùng trước khi đổi DB. Hơn 100 lần tải với cùng Postgres.
- Index nhỏ hơn thì working set vừa RAM hơn, cùng nguyên tắc với Instagram 2011.
- Transaction không cần thiết cũng giữ connection. Shopify 13 năm sau tìm ra cùng loại nút thắt ở quy mô lớn hơn (Shopify 2026).
- Đối chiếu với Uber 2016 (Uber 2016): Instagram dùng pg_reorg để xử lý phân mảnh do MVCC, một vấn đề Uber cũng nêu, nhưng Instagram chọn sống chung với nó thay vì đổi DB.
Liên quan
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (1)