Số liệu điều hành phụ thuộc vào một người
Báo cáo tổng hợp được ghép tay từ nhiều nguồn. Không ai soát lại được, và khi người đó vắng mặt thì kỳ báo cáo bị chậm.
Thế và hình
Một nước cờ tốt không chỉ có giá trị tại chỗ, mà tạo ra thế cho những nước sau. Hình xấu thì càng đánh càng đuối.
Kiến trúc dữ liệu cũng vậy. Một hệ thống dựng vội chạy được ngay, nhưng ràng buộc mọi lựa chọn về sau — và khoản đầu tư kế tiếp luôn đắt hơn khoản trước. Chúng tôi dựng theo kiến trúc lakehouse: lưu trữ tách rời tính toán, bảng lưu được lịch sử, luồng xử lý quản lý bằng mã nguồn. Mỗi bước mở rộng sau đó là lắp thêm, không phải làm lại.
Gặp từ hai dấu hiệu trở lên thì vấn đề không nằm ở việc thiếu công cụ báo cáo, mà ở chỗ dữ liệu chưa có nơi tập trung và chưa có quy trình xử lý.
Báo cáo tổng hợp được ghép tay từ nhiều nguồn. Không ai soát lại được, và khi người đó vắng mặt thì kỳ báo cáo bị chậm.
Mỗi bộ phận lấy từ một hệ thống và tính theo một cách. Cuộc họp mất thời gian tranh luận số nào đúng thay vì bàn phải làm gì.
Quyết định của kỳ này dựa trên tình hình của kỳ trước. Khoảng trễ đó là chi phí cơ hội, dù không xuất hiện trên bất kỳ báo cáo tài chính nào.
Hệ thống nghiệp vụ ghi đè trạng thái cũ. Khi cần giải trình một con số của kỳ trước, hoặc phục vụ kiểm toán, không dựng lại được.
Dữ liệu đi qua ba tầng, mỗi tầng một mức độ tin cậy. Cách phân tầng này giúp truy vết được một con số sai bắt nguồn từ đâu, thay vì phải dò lại toàn bộ luồng.
Dữ liệu nạp về đúng như nguồn, không sửa gì. Giữ nguyên cả bản ghi lỗi và trùng lặp.
Vì sao cần tầng này Khi phát hiện logic biến đổi sai, có thể tính lại từ đầu mà không cần xin lại dữ liệu từ hệ thống nguồn.
Chuẩn hóa kiểu dữ liệu, khử trùng lặp, đối chiếu khóa giữa các nguồn, xử lý giá trị thiếu theo quy tắc thống nhất.
Vì sao cần tầng này Đây là lớp kỹ sư dữ liệu và người phân tích dùng để khai thác. Một bản ghi một dòng, một khóa một nghĩa.
Bảng tổng hợp theo từng chủ đề nghiệp vụ, chỉ tiêu đã tính sẵn, mô hình chiều phục vụ báo cáo.
Vì sao cần tầng này Báo cáo đọc thẳng từ đây nên mở nhanh. Mỗi chỉ tiêu có đúng một định nghĩa, ghi thành tài liệu.
Không có phí bản quyền trong danh sách này. Chi phí nằm ở vận hành, và đó là phần chúng tôi chịu trách nhiệm.
Nguồn
Nạp
Lưu trữ
Khai thác
| Lớp | Công nghệ | Vai trò |
|---|---|---|
| Định dạng bảng | Apache Iceberg | Bảng có phiên bản, đọc lại được trạng thái tại một thời điểm bất kỳ, sửa lược đồ không phải chép lại toàn bộ dữ liệu. |
| Lưu trữ | S3 vận hành trong nước | Lưu trữ đối tượng, tách rời khỏi lớp tính toán nên mở rộng độc lập và chi phí thấp. |
| Truy vấn | Trino | Truy vấn phân tán trên dữ liệu ở lưu trữ đối tượng, đồng thời nối được sang cơ sở dữ liệu nghiệp vụ trong cùng một câu lệnh. |
| Điều phối | Apache Airflow | Lập lịch và theo dõi luồng xử lý, quản lý phụ thuộc giữa các bước, chạy lại phần lỗi mà không chạy lại toàn bộ. |
| Biến đổi | dbt | Logic biến đổi viết bằng SQL, quản lý bằng git, có kiểm thử dữ liệu và tài liệu sinh tự động. |
| Siêu dữ liệu | PostgreSQL | Lưu danh mục bảng, lịch sử chạy, nhật ký chất lượng dữ liệu và cấu hình luồng. |
| Xử lý | Rust và Python | Python cho phần lớn luồng xử lý và tích hợp. Rust cho các bước cần hiệu năng cao hoặc chạy thường trực. |
| Trực quan hóa | Apache Superset | Báo cáo và bảng điều khiển, phân quyền theo vai trò và theo đơn vị. |
Chọn ngôn ngữ theo đặc điểm từng bước xử lý, không chọn một ngôn ngữ cho tất cả.
Hệ sinh thái thư viện dữ liệu của Python rộng nhất, và đội kỹ thuật của đơn vị thường đã quen thuộc. Luồng nạp dữ liệu, tích hợp và phần lớn bước biến đổi được viết bằng Python.
Những bước chạy liên tục hoặc xử lý khối lượng lớn — phân tích tệp nhật ký, chuẩn hóa luồng sự kiện, dịch vụ thường trực — được viết bằng Rust, giúp giảm tài nguyên máy chủ và loại bỏ một nhóm lỗi bộ nhớ.
Chúng tôi không đề xuất chuyển sang Rust những thành phần Python đang hoạt động tốt. Chỉ áp dụng ở nơi đo được lợi ích, và nêu rõ đánh đổi: nguồn nhân lực Rust hạn chế hơn.
Dự án dữ liệu thất bại thường không vì lý do kỹ thuật, mà vì làm quá sớm hoặc quá lớn so với nhu cầu thật.
Chúng tôi dựng trọn vẹn một luồng từ nguồn dữ liệu tới báo cáo cho một chủ đề có người thực sự chờ số liệu. Đơn vị thấy kết quả trước, rồi mới quyết định mở rộng.
hoặc gửi thư tới [email protected]