0

[Open Source] #166 - bitmagnet: Hệ thống Crawl và Index dữ liệu BitTorrent tự chủ với kiến trúc Go Backend, PostgreSQL FTS và cơ chế phân loại nội dung DSL

Trong hệ sinh thái Torrent, việc phụ thuộc vào các trang web Index trung tâm thường đi kèm với rủi ro bị đóng cửa hoặc quảng cáo độc hại. bitmagnet ra đời như một giải pháp "tự lực cánh sinh" hoàn hảo, cho phép người dùng tự xây dựng một thư viện Torrent khổng lồ bằng cách quét mạng lưới DHT (Distributed Hash Table) toàn cầu. Đây không chỉ là một trình tìm kiếm; nó là một hạ tầng quản trị Metadata hoàn chỉnh, có khả năng tự động phân loại và làm giàu dữ liệu từ các nguồn như TMDB.

Dưới góc độ kỹ thuật, bitmagnet là một minh chứng xuất sắc về việc ứng dụng Uber fx để quản lý Dependency Injection và tối ưu hóa PostgreSQL để xử lý dữ liệu quy mô hàng chục triệu bản ghi.

Github: https://github.com/bitmagnet-io/bitmagnet


🛠️ 1. Nền tảng công nghệ: Hiệu năng thực thi cực đại

bitmagnet chọn những công nghệ cốt lõi phục vụ bài toán xử lý dữ liệu lớn và kết nối mạng liên tục:

  • Backend Core (Golang): Tận dụng mô hình Goroutines để xử lý hàng nghìn kết nối DHT song song và điều phối các worker xử lý hàng đợi mà không làm nghẽn mạch hệ thống.
  • Database Orchestration (PostgreSQL): PostgreSQL được sử dụng như một "siêu máy chủ" đa năng: vừa lưu trữ quan hệ, vừa thực hiện tìm kiếm toàn văn (Full-Text Search) qua tsvector, vừa đóng vai trò là hệ thống hàng đợi tác vụ (Job Queue) bền bỉ.
  • API Layer (GraphQL & Torznab):
    • GraphQL: Cung cấp linh hồn cho giao diện Angular, giúp truy vấn dữ liệu linh hoạt.
    • Torznab: Hỗ trợ chuẩn API công nghiệp, biến bitmagnet thành một Indexer tương thích hoàn hảo với Prowlarr, Radarr và Sonarr.
  • Modern Frontend (Angular & TypeScript): Xây dựng Dashboard quản trị tinh tế, hỗ trợ lọc và tìm kiếm dữ liệu lớn mượt mà nhờ sức mạnh của Angular Material.

🏗️ 2. Trụ cột kiến trúc: Dependency Injection và Modular Workers

Kiến trúc của bitmagnet đề cao tính module hóa và khả năng cô lập lỗi:

  • Uber fx Orchestration: Toàn bộ vòng đời ứng dụng được điều phối bởi Uber fx. Cách tiếp cận này giúp các thành phần như dht_crawler, classifierhttp_server được khởi tạo một cách lỏng lẻo (loosely coupled), dễ dàng bật/tắt hoặc mở rộng thông qua cấu hình YAML.
  • Content Classifier DSL: Hệ thống sở hữu một bộ ngôn ngữ đặc thù (Domain Specific Language) dựa trên YAML. Người dùng có thể định nghĩa các quy tắc nhận diện nội dung (ví dụ: gán nhãn "4K" nếu tên file chứa "2160p") mà không cần can thiệp vào mã nguồn Go.
  • Worker-based Pipeline: Dữ liệu Torrent đi qua một "dây chuyền sản xuất" từ lúc được phát hiện (DHT) -> Lấy Metadata (Wire Protocol) -> Phân loại (Classifier) -> Làm giàu (TMDB Integration) -> Lập chỉ mục (Postgres Index).

🔄 3. Workflow: Từ Mạng lưới DHT đến Dashboard người dùng (Sequence Diagram)

Sơ đồ mô tả quy trình "tiêu hóa" dữ liệu Torrent tự động:

image.png


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

  1. Stable Bloom Filters: Sử dụng bộ lọc Bloom hiệu năng cao để ghi nhớ hàng triệu infohash đã quét. Kỹ thuật này giúp hệ thống bỏ qua các Torrent đã xử lý ngay tại tầng bộ nhớ, triệt tiêu gánh nặng truy vấn Database lặp lại.
  2. BEP 51 Sampling: Thực thi kỹ thuật lấy mẫu DHT tinh vi, cho phép bitmagnet phát hiện các Torrent "nóng" nhất trên mạng lưới toàn cầu mà không cần kết nối với các Tracker truyền thống.
  3. Postgres Budgeted Count: Một kỹ thuật tối ưu SQL thông minh. Khi đếm số lượng bản ghi trong hàng chục triệu dòng, bitmagnet sử dụng phương pháp ước tính (Budgeted) để trả về con số gần đúng ngay lập tức, tránh việc "treo" giao diện người dùng do truy vấn COUNT(*) nặng nề.
  4. Automatic Banning & Scrubbing: Tích hợp bộ lọc dữ liệu nhạy cảm và nội dung rác (Spam/Malware) thông qua danh sách đen và quy tắc Regex, đảm bảo chất lượng dữ liệu Index luôn sạch sẽ.

⚖️ 5. So sánh chiến lược

Tiêu chí bitmagnet Jackett / Prowlarr Public Trackers (ThePirateBay)
Nguồn dữ liệu Tự quét DHT (Chủ động) Quét từ các trang khác Phụ thuộc Admin
Tính riêng tư Tuyệt đối (Local Index) Trung bình Thấp (Có theo dõi)
Metadata Rất giàu (Tích hợp TMDB) Phụ thuộc nguồn gốc Cơ bản
Tự lưu trữ Toàn phần (Full-stack) Chỉ là Proxy Web service
Tốc độ tìm kiếm Cực nhanh (FTS nội bộ) Phụ thuộc tốc độ trang nguồn Chậm

✅ Kết luận: Tại sao bitmagnet là hạ tầng Torrent tối thượng?

bitmagnet chứng minh rằng với một kiến trúc đúng đắn, cá nhân có thể sở hữu sức mạnh của một search engine Torrent khổng lồ ngay trên máy chủ tại gia. Việc kết hợp giữa khả năng xử lý mạng tầng thấp và tối ưu hóa cơ sở dữ liệu tầng cao đã biến dự án này thành một "đài thiên văn" dữ liệu BitTorrent bền bỉ và mạnh mẽ.

Đối với các kỹ sư Backend, nghiên cứu bitmagnet mang lại giá trị về:

  • Kỹ thuật quản lý vòng đời ứng dụng Go với Uber fx.
  • Cách tối ưu hóa PostgreSQL cho bài toán Big Data và Search.
  • Tư duy thiết kế hệ thống Crawl dữ liệu phân tán quy mô lớn.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.