2 poin oleh GN⁺ 2025-06-20 | 1 komentar | Bagikan ke WhatsApp
  • ExTracker adalah proyek tracker BitTorrent baru berbasis Elixir
  • Dirancang dengan landasan performa tinggi dan penggunaan memori rendah, serta pada praktiknya bisa langsung digunakan dengan setup nyaris nol
  • Menyediakan keberagaman dan kompatibilitas melalui dukungan untuk berbagai proposal ekstensi protokol BitTorrent (BEP)
  • Mencakup fitur-fitur utama yang dibutuhkan di lingkungan produksi seperti dukungan HTTPS, backup disk, dan fitur operasional/manajemen
  • Saat ini masih berada pada tahap belum matang untuk penggunaan industri, tetapi instance uji sudah berjalan dalam operasi nyata

Gambaran umum dan pentingnya proyek

ExTracker adalah proyek open source tracker BitTorrent baru yang diimplementasikan dengan Elixir, dan dibandingkan tracker yang sudah ada menawarkan keuntungan berikut

  • Berbasis runtime Erlang/Elixir modern, dengan arsitektur berperforma tinggi yang memanfaatkan semua inti multicore
  • Menjamin penggunaan memori rendah pada lingkungan peer berskala besar (sekitar 200MB RAM per 1 juta peer)
  • Menyediakan lingkungan zero-setup yang langsung berjalan tanpa konfigurasi awal yang rumit
  • Menjaga kompatibilitas dengan standar tracker terbaru melalui dukungan untuk berbagai BitTorrent Enhancement Proposal (BEP)

Dibandingkan tracker yang ada, proyek ini ringan dan efisien, serta memaksimalkan dukungan konkurensi dan lingkungan terdistribusi khas Elixir sehingga berbeda dari proyek open source sekelasnya

Fitur utama (Features)

  • Performa tinggi: memanfaatkan semua inti CPU, menggunakan penyimpanan in-memory
  • Optimisasi memori: menggunakan sekitar 200MB RAM per 1 juta peer
  • Zero setup: dapat langsung dijalankan tanpa konfigurasi tambahan apa pun

BitTorrent Enhancement Proposals (BEP) yang didukung

  • BEP 0: mematuhi spesifikasi protokol BitTorrent
  • BEP 15: dukungan protokol tracker UDP
  • BEP 23: mengembalikan daftar peer terkompresi
  • BEP 7: ekstensi tracker IPv6
  • BEP 24: mengembalikan IP eksternal
  • BEP 41: ekstensi protokol tracker UDP
  • BEP 48: ekstensi tracker Scrape (dukungan parsial)
  • BEP 52: protokol BitTorrent v2
  • Beberapa fitur (BEP 27, 21, 31, dll.) belum diimplementasikan atau masih direncanakan
  • Tidak mendukung BEP 8 (obfuscation peer tracker)

Fitur lainnya

  • Dukungan koneksi HTTPS
  • Backup disk (meningkatkan keamanan data)
  • (Direncanakan) pengelolaan whitelist/blacklist infohash
  • (Direncanakan) manajemen peer: izin, pembersihan berkala, eject, dll.
  • (Direncanakan) manajemen metrik/indikator serta pemanfaatan GeoIP
  • Tidak ada rencana mendukung WebTorrent

Saran dari pengguna/pengembang diterima melalui Issue

Cara menjalankan

  • Menjalankan langsung dari source code
    • Membutuhkan Erlang dan Elixir
    • Clone repositori, lalu lakukan konfigurasi lingkungan dan jalankan
  • Metode rilis
    • Belum ada rilis resmi, tetapi mendukung alur build dan deployment mandiri
    • Salin file rilis, lakukan konfigurasi lingkungan, lalu jalankan
  • Docker
    • Dapat menggunakan image container resmi
    • Menyediakan file contoh docker-compose
    • Konfigurasi di dalam container disarankan menggunakan environment variable

Hak cipta dan lisensi

  • Copyright (c) Dahrkael <dahrkael at outlook dot com>
  • Didistribusikan di bawah Apache License 2.0
  • Untuk detail lisensi, lihat file LICENSE di repositori

1 komentar

 
GN⁺ 2025-06-20
Komentar Hacker News
  • Ada yang berharap desainnya lebih berpusat pada OTP, tetapi merasa kode aslinya hampir sepenuhnya prosedural, dengan ETS atau sistem berbasis ETS seperti Application ditangani langsung berulang kali
    Jika penulis ingin mempelajari cara merancang layanan di Elixir atau bahasa BEAM, mereka merekomendasikan "Designing Elixir Systems with OTP" karya James Edward Gray dan Bruce Tate serta "Functional Web Development with Elixir, OTP, and Phoenix" karya Lance Halvorsen sebagai referensi

    • Pada percobaan pertama memang ditulis dengan gaya OTP, tetapi kemudian ditemukan bahwa untuk alur yang sangat spesifik seperti ini, skalabilitasnya tidak selalu sama
      Tracker torrent pada akhirnya adalah basis data yang sangat terspesialisasi, jadi tujuan terpenting adalah memproses data secepat mungkin
      Tetap saja, ia menyatakan berniat membaca buku-buku yang direkomendasikan
  • Ada kesan bahwa pengembang C++ punya sesuatu yang membuat mereka menyukai Go dan Elixir
    Saya sendiri juga termasuk
    Orang-orang yang menyukai C++ karena performanya pada akhirnya jatuh cinta pada performa multithread Go atau Elixir
    Komentar positif bahwa ini proyek yang keren

    • Soal pengembang C++ saya kurang tahu, tetapi Erlang/Elixir terasa sangat kuat untuk parsing protokol berkat implementasi pattern matching-nya
      Pattern matching mengurangi sebagian besar percabangan dan kompleksitas kode, sehingga kode jadi jauh lebih rapi
      Berkat filosofi 'Let it crash', sebagian besar kasus pengecualian bisa diabaikan, dan kalau pun masalah benar-benar terjadi, dampaknya diyakini hanya terbatas pada satu klien
      Selama lebih dari 10 tahun memakai Elixir pada aplikasi yang sudah di-deploy, ia belum pernah mengalami downtime tak terduga
      Selain pemeliharaan dan pembaruan, layanan selalu punya uptime 100%
      Kepada klien, ia bahkan menjualnya dengan mengatakan, “Layanan yang dibuat dengan Elixir alih-alih Python atau Go bukan cuma tidak pernah mati, tetapi juga memberi dashboard yang keren,” dan banyak orang langsung diyakinkan
      Ada harapan semoga ada bahasa sistem yang, seperti Elixir, mendukung struct dan enum, serta pattern matching pada signature fungsi
  • Saya juga pernah mengerjakan hal serupa dalam Typescript untuk tujuan belajar BT (BitTorrent)
    Setelah itu saya mengimplementasikannya lagi di Rust sambil belajar Rust juga
    Link proyek saya
    Saya hanya memakai redis sebagai basis data, tetapi menarik bahwa pihak sana memuat semuanya ke memori
    Penasaran apakah ada pertimbangan, keputusan menarik, atau masalah yang muncul dari desain seperti itu
    Sebagai catatan, solusi berbasis redis saya punya masalah bahwa saat announce dilakukan berkali-kali, peer tidak selalu diacak ulang

    • Dalam pengalaman saya, memakai ETS in-memory adalah pilihan terbaik
      Data tiap peer bisa dibaca dan ditulis secara bersamaan dari proses yang berbeda, sehingga contention dan latency menjadi minimal
      Satu-satunya bagian yang benar-benar berurutan hanyalah saat swarm baru pertama kali dibuat, dan itu tidak sering terjadi jadi tidak masalah
      Sayangnya tidak ada dukungan native untuk mengambil baris acak dari tabel, jadi untuk sekarang seluruh swarm diambil lalu dipilih sendiri subset acaknya
      Contoh kode terkait
  • Menurut saya ini proyek yang keren
    Dulu saya juga pernah membuat tracker dasar dengan Elixir
    Link kode saya

    • Menarik
      Secara khusus penasaran kenapa ini dibuat sebagai private tracker
  • Selamat atas peluncuran proyeknya
    Penasaran bagaimana cara kerjanya dibanding opentracker, termasuk detail performanya

    • Untuk tracker kecil, opentracker mungkin lebih cepat dan memakai memori lebih sedikit
      Namun extracker mulai menunjukkan keunggulannya saat jumlah core CPU mencapai dua digit
      Saat ini benchmark yang benar-benar layak belum dilakukan
  • Pujian bahwa ini proyek yang sangat rapi dibuat
    Saran singkatnya: sebaiknya pindahkan dari IO.puts ke Logger, dan pertimbangkan juga menambahkan OTel

    • Setuju
      Menurutnya cukup memakai aplikasi Logger dan Telemetry bawaan saja
      Nanti opentelemetry atau yang lain juga bisa dengan mudah ditambahkan lewat hook Telemetry
      Logger documentation
      Telemetry documentation

    • Pertanyaan tentang sink otel yang disukai, yaitu metriknya ingin dikirim ke mana

  • Benar-benar suka Elixir
    Sedang mengembangkan notification engine yang keren dengan Elixir
    Elixir memang luar biasa

    • Respons yang antusias
      Penasaran apakah itu proyek private atau OSS (open source)
      Ekosistem Elixir memang membutuhkan notification engine yang lebih baik
    • Bagaimana awalnya bisa mulai
  • Apakah ada proyek yang dijadikan referensi

  • Berapa lama waktu pengembangannya

  • Penasaran kalau dibandingkan dengan qbittorrent, kira-kira fitur apa saja yang sudah berjalan

    • Awalnya dimulai karena butuh tracker untuk proyek lain, tetapi mengembangkan tracker itu sendiri ternyata lebih menyenangkan sehingga terus dikerjakan
      Ia memang melihat kode tracker lain, tetapi kebanyakan terlalu rumit atau terlalu sederhana sehingga tidak terlalu membantu sebagai referensi
      Sejauh ini sudah 3 bulan pengembangan dengan beberapa sesi begadang semalaman
      Memang ini bukan klien seperti qbittorrent, tetapi ke depan ada ide proyek klien berorientasi seedbox

    • Penjelasan bahwa tracker bukan klien torrent

  • Sudah sempat mencoba langsung, tetapi mengalami masalah bahwa HTTPS tidak berfungsi dengan benar
    Selain itu, di konsol terus muncul pesan peringatan
    04:43:20.160 [warning] invalid 'event' parameter: size: 6 value: "paused"
    yang terus tercetak
    Meski begitu, sepertinya tetap berjalan
    Ingin juga melihat statistik HTTP, tetapi yang terlihat hanya statistik UDP
    (padahal UDP saya nonaktifkan)

    • Event "paused" adalah bagian dari BEP 21, dipakai agar klien memberi tahu tracker bahwa ia masih belum selesai tetapi tidak lagi mengunduh
      Misalnya saat pengguna hanya menginginkan sebagian file dalam torrent
      Di readme proyek itu memang tertulis bahwa BEP 21 belum didukung

    • Telemetry terkait HTTP masih ada di daftar ToDo
      Karena web server-nya memakai library pihak ketiga, ia masih memikirkan cara integrasi yang tepat
      Untuk memakai HTTPS, :https_keyfile harus diarahkan ke path sertifikat yang valid
      Untuk saat ini, jika ingin HTTPS disarankan menaruh Caddy atau Nginx di depan tracker
      Integrasi certbot juga direncanakan, tetapi karena sebagian besar peer torrent memakai UDP, prioritasnya rendah

  • Pujian bahwa ini benar-benar proyek yang keren
    Ditanya apakah ada niat memakai Elixir sebagai bahasa utama

    • Jawabannya, Elixir adalah salah satu opsi utama
      Secara pribadi ia yakin bekerja dengannya pasti jauh lebih menyenangkan daripada C++

    • Ia sendiri tidak sedang merekrut, tetapi memperkenalkan diri bahwa sudah hampir 9 tahun 2 bulan bekerja dengan Elixir dan juga bisa Rust serta Golang
      Ia penasaran apakah saat ini ada yang sedang merekrut