Geosharded Recommendations Part 2: Architecture
Bài tóm tắt Tinder 2019 3. Quy mô lớn Độ khó: Trung bình
Tinder · 2019 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Phần 2 của series 3 phần. Phần 1 (cách chia shard): Tinder 2019; phần 3 (consistency, bài sheet trỏ tới): Tinder 2019.
Bối cảnh
Phần 1 đã chốt thuật toán chia geoshard trên S2 và đóng gói thành một microservice nội bộ. Phần 2 trả lời ba câu hỏi triển khai: "shard" cụ thể là gì trong Elasticsearch, cluster cần cỡ nào, và cân tải ra sao.
Thay đổi chính
- Luồng:
- user đổi vị trí → location service xác định có phải dời shard không → ghi tới data node theo route;
- lấy gợi ý → tầng logic tính số shard cần query theo vị trí và bán kính → query song song → gộp kết quả.
- Multi-index trong một cluster, không multi-cluster.
- Multi-cluster cách ly tốt hơn, scale riêng từng shard dễ hơn, nhưng Elasticsearch khi đó chưa query được qua nhiều cluster, nên phải tự fan-out và tự dời document giữa cluster.
- Họ chọn multi-index vì đơn giản hơn nhiều cho server và vận hành; shard nóng thì thêm replica.
- Chọn cỡ bằng performance test (JMeter), chốt từng biến một thay vì thử mọi tổ hợp:
- bắt đầu từ cỡ shard: gom vùng đông user nhất vào một shard để giảm query xuyên shard;
- seed dữ liệu giả theo phân bố tuổi và bộ lọc tuổi thật;
- tăng traffic tới khi CPU/RAM của node query hoặc node data chạm trần;
- sau đó mới đổi số replica, loại instance AWS, cấu hình JVM.
- Lệch múi giờ: user cùng geoshard thường cùng múi giờ, nên giờ cao điểm của các shard lệch nhau. Tại một thời điểm, RPS giữa các shard có thể chênh hơn 10 lần.
- Xếp tay nhiều shard lên cùng node cho tải đều là bài toán NP-hard, và phải tính lại mỗi lần reshard.
- Họ rải ngẫu nhiên primary/replica lên các host, biến bài toán thành xác suất "hai bi cùng màu rơi vào một ngăn kéo". Chỉnh số replica cho tới điểm cân bằng.
- Đánh đổi: nhiều replica thì tải đều hơn, nhưng mỗi host tốn thêm năng lực ghi và RAM.
- Kiến trúc cuối: 3 master node; một ASG chỉ gồm coordinating node (nhận mọi request), một ASG gồm data node. Mỗi data node giữ ngẫu nhiên 4 index, có cái là primary của shard này, có cái là replica của shard khác.
Kết quả
Theo Tinder (2019): index geoshard xử lý gấp 20 lần lượng tính toán so với thiết lập cũ.
Bài học cho SWE
- Cách triển khai shard (index hay cluster) là đánh đổi giữa mức cách ly và độ phức tạp vận hành; cái gì hệ thống bên dưới hỗ trợ sẵn thường thắng.
- Shard theo địa lý kéo theo lệch theo thời gian: cân đều về dung lượng chưa đủ, phải tính cả giờ cao điểm.
- Ngẫu nhiên hoá placement là lời giải thực dụng cho bài toán xếp chỗ NP-hard, đổi lại tốn thêm replica.
- Performance test với dữ liệu giả mô phỏng phân bố thật là bước bắt buộc trước khi chốt cỡ cluster.
Liên quan
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (4)