Database Federation: Decentralized and ACL-Compliant Hive Databases
Bài tóm tắt Uber 2026 4. Điều chỉnh Độ khó: Trung bình
Uber · 2026 · 4. Điều chỉnh · Độ khó: Trung bình — bài gốc
Bối cảnh
- Một data warehouse của mảng Delivery có hơn 16.000 dataset Hive, 10 PB của nhiều domain nằm trong một database Hive do một team trung tâm sở hữu. Từng giúp onboard và tìm dữ liệu dễ, nhưng khi lớn thì thành gánh nặng:
- Chung số phận: metadata hỏng hay tải tăng vọt do một team gây ra lan sang cả database, ảnh hưởng workload tier-1 không liên quan.
- Noisy neighbor: dataset ad-hoc không giới hạn tranh chung Metastore, HDFS, quota compute.
- Nút thắt vận hành: mọi việc ở mức database (ACL, sửa DDL, TTL, lineage, xử lý sự cố) đều qua một team, một lịch on-call.
- Khó áp quy tắc chất lượng theo domain, theo dõi ownership, đặt ngưỡng alert.
- ACL mở: hầu hết team và service có quyền đọc/ghi rộng, trái nguyên tắc quyền tối thiểu.
- Dataset là nền của ML (gợi ý, định giá), báo cáo tài chính cho merchant, dashboard điều hành, báo cáo tuân thủ; mỗi dataset có hàng nghìn consumer, nên migration không được làm gián đoạn.
Thay đổi chính
- Tách thành database theo domain/team với ACL chặt, theo các nguyên tắc: không downtime, không mất/trùng dữ liệu, availability và hiệu năng ít nhất như cũ, scale tới hàng chục nghìn dataset với migrate từng cái, rollback và retry.
- Đổi con trỏ thay vì đồng bộ dữ liệu liên tục: dataset Hive chỉ là metadata trong Hive Metastore (HMS) trỏ tới đường dẫn HDFS. Tạo dataset mới cùng schema ở database mới, copy dữ liệu một lần, rồi sửa vị trí của dataset cũ trong HMS trỏ sang đường dẫn mới, xoá đường dẫn cũ. Từ đó đọc qua tên cũ hay tên mới đều ra cùng file: không lưu hai bản PB, không chạy hai pipeline, đổi con trỏ là thao tác tức thì, nhất quán sẵn.
- Bootstrap Migrator: một file cấu hình mỗi database đích; Driver (chạy định kỳ trên Piper) sinh và dọn pipeline, mỗi dataset một pipeline. Kiểm trước: không migrate lại dataset đã xong, không migrate Hive View (không có vị trí vật lý), bỏ dataset trỏ vào vị trí của dataset khác. Dataset backup là một con trỏ tới dataset nguồn, giữ tới khi xong hẳn, để debug, audit, rollback. Copier Spark phân tán file cho mọi executor và đồng bộ hai chiều (xoá thư mục/file thừa ở đích, xử lý partition bị TTL giữa các lần thử); verifier so checksum và ghi lại để audit. Khôi phục partition ở đích, rồi kiểm chất lượng dữ liệu trên mọi partition; kiểm hỏng (do TTL, backfill, ETL thêm partition trong lúc chạy) thì chỉ chạy lại migrator cho dataset đó. Đạt thì mới đổi con trỏ của cả base location lẫn từng partition.
- Đồng bộ metadata hai chiều sau migration: ghi vào dataset nào thì metadata HMS phải sang dataset kia. Real-Time Synchronizer: app Flink nghe cập nhật HMS, kích một trong 10 pipeline Piper chờ sẵn (chọn ngẫu nhiên) để đồng bộ. Batch Synchronizer mỗi 2 giờ làm lưới đỡ: so metadata partition hai bên, lấy bản cập nhật sau cùng áp sang bên kia, alert nếu đường dẫn không trỏ về database mới. Hai cơ chế cộng lại cho nhất quán sau cùng.
- Rollback Orchestrator chạy theo yêu cầu, dùng dataset backup để trả nguồn về trạng thái trước migration; một pipeline, mỗi yêu cầu một instance.
- Kết quả: hàng nghìn dataset đã migrate, hơn 7 triệu lượt đồng bộ HMS; dọn dataset cũ không migrate tiết kiệm hơn 1 PB HDFS.
Vì sao
- Lớp metadata tách khỏi dữ liệu vật lý cho phép đổi "dataset nằm ở đâu" bằng một thao tác metadata, nên migration là bài toán đồng bộ metadata chứ không phải đồng bộ PB dữ liệu.
Bài học cho SWE
- Một kho chung cho mọi team là chung số phận, chung quota và chung ACL rộng; tách theo domain đồng thời sửa cả ba.
- Nếu có lớp gián tiếp (con trỏ, metadata), migrate bằng cách đổi con trỏ sau một lần copy, thay vì chạy hai hệ song song.
- Giữ con trỏ backup để rollback rẻ; kiểm dữ liệu khớp trước khi lật.
- Đồng bộ real-time cần lưới đỡ batch định kỳ; hai chiều, bản mới nhất thắng, và alert khi trạng thái lệch kỳ vọng.
Liên quan
#Hive#Hive Metastore#data warehouse#monolithic database#decentralization#pointer manipulation#zero downtime migration#backup pointer#checksum#bidirectional sync#Flink#Piper#rollback#least privilege ACL
Được nhắc tới trong
Chủ đề (3)
Công ty (1)