Snitch: Putting consistency back into S3
Bài tóm tắt Box 2018 3. Quy mô lớn Độ khó: Trung bình
Box · 2018 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bối cảnh
- Hạ tầng analytics của Box coi S3 là nguồn sự thật trên cloud: dữ liệu ghi vào Kafka on-prem, committer chép sang bucket nguồn S3 (có thể trùng do Kafka giao lại), job MapReduce dedupe sang bucket đích, Hive và ETL sang Redshift đọc từ đó.
- Năm 2018 S3 còn nhất quán cuối với
list(): object mới chưa hiện, object đã xoá vẫn hiện. Dedupe và ETL dựa vào list nên có thể bỏ sót object vĩnh viễn; có ngày thấy hơn 2.000 trường hợp trong một lần dedupe.
Thay đổi chính
- Không dùng S3mper của Netflix (java agent chặn lời gọi filesystem, không xử lý delete/rename, chặn hụt thì im lặng) hay EMR Consistent View (đang dùng Qubole, thêm chi phí).
- Snitch kế thừa S3AFileSystem, ghi thêm metastore trong DynamoDB: ghi object thì ghi DynamoDB; khi list, object có trong DynamoDB mà S3 chưa trả thì list lại với exponential backoff, quá số lần thì alert; object xoá/đổi tên được đánh dấu và lọc khỏi kết quả list.
- Hiệu năng: tự gọi API batch của S3 và song song hoá thao tác rời nhau. Throttling DynamoDB không do capacity tổng mà do hot partition: mọi object cùng thư mục chung khoá; sửa bằng salt từ hash của path + định danh object. Kết quả: thao tác filesystem nhanh hơn một bậc so với S3AFileSystem.
- Mọi thành phần (Hive, Qubole, dedupe) phải dùng Snitch, nếu không metastore lệch và báo sự cố giả; ép bằng
core-site.xmlphát tới mọi cluster cùng jar trong classpath. Chạy hơn một năm, tránh được nhiều lần mất dữ liệu.
Vì sao
- Khi S3 là nguồn sự thật chứ không chỉ là bản sao, list thiếu nghĩa là mất dữ liệu.
Bài học cho SWE
- Lớp nhất quán phụ chỉ đúng khi mọi đường ghi đều đi qua nó; đặt nó ở cấu hình chung chứ không trông vào từng client.
- Capacity tổng của DynamoDB không cứu được khoá nóng; cần phân tán khoá.
Liên quan
#S3 eventual consistency#list-after-write#S3AFileSystem#DynamoDB metastore#S3mper#EMR Consistent View#Qubole#dedupe MapReduce#Hive#Redshift#salting key#hot partition#core-site.xml
Được nhắc tới trong
Công ty (1)