0

[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 .db duy 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:

image.png


⚡ 4. Các kỹ thuật "Pro-level" trong mã nguồn

  1. Non-root Docker Security: Sử dụng kỹ thuật kết hợp gosutini trong Docker entrypoint để cho phép ứng dụng chạy dưới quyền PUID/PGID tù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.
  2. 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.
  3. 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.
  4. 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ệutrả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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí