[Open Source] #147 - Jetlog: Hệ thống quản trị và trực quan hóa lịch sử hàng không cá nhân với FastAPI, React và kỹ thuật tính toán địa lý Haversine
Đối với những người thường xuyên di chuyển hoặc những tín đồ hàng không (AvGeeks), việc theo dõi hàng trăm chuyến bay, tính toán tổng quãng đường và trực quan hóa các đường bay trên bản đồ thế giới là một nhu cầu lớn. Jetlog ra đời như một nền tảng tự lưu trữ (self-hosted) hiện đại, thay thế cho các dịch vụ đóng như MyFlightRadar24, cho phép người dùng toàn quyền kiểm soát dữ liệu chuyến bay với độ chính xác cao và giao diện mượt mà.
Dưới góc độ kỹ thuật, Jetlog là một bài học mẫu mực về việc ứng dụng FastAPI, kỹ thuật Địa toán học (Geospatial) và tư duy thiết kế hệ thống Portable (Dễ di chuyển).
Github: https://github.com/v8u7/jetlog
🛠️ 1. Nền tảng công nghệ: Tốc độ của Python và Sự chính xác của TypeScript
Jetlog sử dụng một ngăn xếp công nghệ tập trung vào hiệu suất và khả năng kiểm chứng dữ liệu chặt chẽ:
- Backend Core (FastAPI & Python 3.12): Tận dụng tốc độ của FastAPI để xử lý các tác vụ tính toán logic chuyến bay. Sử dụng Pydantic để đảm bảo dữ liệu đầu vào (Mã sân bay, Tọa độ, Thời gian) luôn đúng chuẩn trước khi chạm tới Database.
- Persistent Storage (SQLite): Jetlog chọn SQLite làm "trái tim" dữ liệu. Đây là lựa chọn thông minh cho các ứng dụng Self-hosted, giúp việc sao lưu chỉ đơn giản là copy một file
.dbduy nhất mà không cần quản trị server DB phức tạp. - Modern Frontend (React & TypeScript): Xây dựng giao diện Single Page Application (SPA) mượt mà với Parcel bundler. Việc sử dụng TypeScript ở frontend giúp đồng bộ hóa các định dạng dữ liệu (Models) với backend, giảm thiểu lỗi runtime.
- Bảo mật cấp cao: Sử dụng Argon2 để băm mật khẩu và PyJWT để quản lý phiên đăng nhập, đảm bảo an toàn dữ liệu cá nhân ngay cả khi deploy trên môi trường internet.
🏗️ 2. Trụ cột kiến trúc: Geospatial Computing và Schema Evolution
Kiến trúc của Jetlog được thiết kế xung quanh việc xử lý dữ liệu không gian và thời gian:
- Geospatial Processing Layer: Jetlog tích hợp sẵn công thức Haversine để tính toán khoảng cách đường chim bay cực kỳ chính xác giữa hai cặp tọa độ (Vĩ độ/Kinh độ) của sân bay. Hệ thống cũng tự động xử lý sự lệch múi giờ (Timezone offsets) thông qua thư viện
pytzđể trả về thời gian bay thực tế (flight duration) bất kể điểm đi và điểm đến. - Internal DB Patching Engine: Thay vì dựa vào các công cụ migration nặng nề, Jetlog tự xây dựng một bộ máy "vá" cơ sở dữ liệu thông minh trong
database.py. Hệ thống tự phát hiện phiên bản schema hiện tại, tự động thêm cột hoặc tái cấu trúc bảng mà không làm mất dữ liệu của người dùng khi nâng cấp phần mềm. - Multi-source Data Ingestion: Kiến trúc hỗ trợ nạp dữ liệu từ nhiều nguồn (MyFlightRadar24, Flighty, Custom CSV) thông qua một pipeline xử lý chung, giúp người dùng dễ dàng chuyển đổi từ các nền tảng khác về Jetlog.
🔄 3. Workflow: Vòng đời của một Chuyến bay trên Jetlog (Sequence Diagram)
Sơ đồ mô tả quy trình từ lúc nạp dữ liệu đến khi trực quan hóa trên bản đồ thế giới:

⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn
- Non-root Docker Security: Sử dụng kỹ thuật kết hợp
gosuvàtinitrong Docker entrypoint để cho phép ứng dụng chạy dưới quyềnPUID/PGIDtùy chỉnh. Điều này cực kỳ quan trọng đối với người dùng chạy trên NAS (Synology/Unraid) để tránh vấn đề phân quyền file. - Airport Database Pre-loading: Jetlog đi kèm với một cơ sở dữ liệu sân bay toàn cầu nén sẵn. Khi khởi động lần đầu, hệ thống tự động giải nén và nạp hàng nghìn bản ghi vào SQLite, giúp người dùng có thể tìm kiếm sân bay ngay lập tức mà không cần kết nối internet.
- Complex SQL Aggregations: Trang thống kê sử dụng các câu lệnh SQL phức tạp để tính toán các chỉ số "khủng" như: Tổng quãng đường (tương đương bao nhiêu vòng trái đất), số lần bay qua xích đạo, và biểu đồ mật độ sân bay.
- Automatic Connection Computing: Hệ thống có khả năng tự suy luận các chuyến bay nối chuyến (Connections) bằng cách phân tích khoảng thời gian chờ (layover) giữa các chặng bay liên tiếp, một tính năng cao cấp thường chỉ có ở các app trả phí.
⚖️ 5. So sánh chiến lược
| Tiêu chí | Jetlog | MyFlightRadar24 (Free) | Flighty (Premium) |
|---|---|---|---|
| Quyền sở hữu dữ liệu | Tuyệt đối (Self-host) | Bị kiểm soát | Bị kiểm soát |
| Giá cả | Miễn phí vĩnh viễn | Giới hạn tính năng | Thuê bao hàng năm đắt đỏ |
| Trực quan hóa | Bản đồ tương tác mạnh | Cơ bản | Rất đẹp nhưng chỉ Mobile |
| Khả năng mở rộng | Cao (Tự thêm API/DB) | Thấp | Không |
| Tính riêng tư | Rất cao | Trung bình | Thấp |
✅ Kết luận: Tại sao Jetlog là lựa chọn cho AvGeeks thực thụ?
Jetlog chứng minh rằng một dự án cá nhân hoàn toàn có thể thay thế các dịch vụ thương mại nếu tập trung đúng vào tính chính xác của dữ liệu và trải nghiệm tự chủ hạ tầng. Việc kết hợp các thuật toán địa lý vào một backend Python tinh gọn đã biến Jetlog thành một công cụ phân tích hàng không mạnh mẽ.
Đối với các kỹ sư Backend, nghiên cứu Jetlog giúp bạn hiểu sâu về:
- Kỹ thuật xử lý Dữ liệu không gian (Geospatial data) trong SQLite/Python.
- Cách xây dựng Database Patching Engine bền bỉ.
- Tư duy thiết kế Docker Image bảo mật cho người dùng cuối.
All rights reserved