2 poin oleh GN⁺ 2025-06-20 | 1 komentar | Bagikan ke WhatsApp
  • ExTracker adalah tracker BitTorrent yang dibuat dengan Elixir; saat ini masih dalam proses pengerjaan, tetapi sudah berjalan, dan dinyatakan belum siap untuk penggunaan industri secara penuh
  • Target performanya adalah performa tinggi dengan memanfaatkan semua core yang tersedia, berjalan berbasis penyimpanan in-memory, menggunakan sekitar 200MB RAM per 1 juta peer, serta memiliki struktur yang dapat dijalankan tanpa konfigurasi terpisah
  • Untuk BEP terkait BitTorrent, telah mengimplementasikan BEP 0, BEP 15, BEP 23, BEP 7, BEP 21, BEP 24, BEP 41, BEP 48, BEP 52, sementara beberapa seperti Private Torrents belum diimplementasikan atau baru diimplementasikan sebagian
  • Mendukung HTTPS, backup database ke disk, dan eksekusi via Docker; WebTorrent tidak didukung, sementara whitelist/blacklist, manajemen peer, metrics, dan GeoIP berstatus implementasi sebagian
  • Cara menjalankannya ada tiga: menjalankan langsung dari source, membangun release sendiri, dan menjalankan image Docker; di container, konfigurasi dapat dilakukan lewat environment variable alih-alih runtime.exs

Status dan tujuan ExTracker

  • ExTracker adalah implementasi tracker BitTorrent yang diperkenalkan sebagai “The Bittorrent Tracker made in Elixir”
  • Proyek ini berstatus Work In Progress
    • Dinyatakan belum siap untuk penggunaan industri secara penuh
    • Saat ini sudah dapat berjalan
  • Instance uji berjalan di extracker.dahrkael.net:6969, dengan fitur saat ini dalam keadaan aktif

Fitur utama

  • Performa dan kemudahan operasional diposisikan sebagai fitur inti
    • Performa tinggi: memanfaatkan semua core yang tersedia
    • Menggunakan penyimpanan in-memory
    • Penggunaan memori sekitar 200MB RAM per 1 juta peer
    • Zero setup: menargetkan bentuk yang langsung berjalan saat dieksekusi

Status dukungan BEP BitTorrent

Fitur lain dan batasan

  • Fitur yang selesai
    • Dukungan HTTPS

      • Backup database ke disk
      • Fitur yang tidak didukung
      • WebTorrent
      • Fitur yang diimplementasikan sebagian
    • Whitelist/blacklist infohash

      • Manajemen peer: interval enforcement, cleanup, banning, dan lainnya
    • Metrics

      • Dukungan GeoIP: untuk statistik dan pembatasan peer
      • Usulan fitur dapat diajukan melalui Issues

Cara menjalankan

  • Menjalankan langsung dari source code

  • Build release

    • Saat ini tidak ada build release resmi, tetapi Anda dapat membuat release sendiri untuk didistribusikan
    • Setelah clone repository, build sesuai sistem operasi
    • Linux: MIX_ENV=prod mix release extracker
    • Windows: MIX_ENV=prod mix release extrackerw
    • File release dibuat di folder _build/prod/rel/extracker
    • Jika dipindahkan ke mesin lain, OS dan arsitekturnya harus sama
    • Jika perlu, ubah konfigurasi releases/{VERSION}/runtime.exs
    • Perintah untuk menjalankan adalah bin/extracker start
  • Menjalankan dengan Docker

    • Image Docker yang disediakan dapat langsung dijalankan
    • docker run ghcr.io/dahrkael/extracker:latest
    • Dapat juga digunakan dengan docker-compose, dan tersedia contoh file compose
    • Karena sulit menyesuaikan konfigurasi dengan mengubah runtime.exs di dalam container, konfigurasi juga dapat dilakukan melalui environment variable
    • Daftar lengkap environment variable dapat dilihat di contoh file compose

Lisensi

  • ExTracker didistribusikan dengan ketentuan Apache License 2.0
  • Untuk detailnya, lihat LICENSE file di repository

1 komentar

 
GN⁺ 2025-06-20
Komentar Hacker News
  • Saya berharap desainnya OTP-first, tetapi sayang kodenya terlihat lebih dekat ke gaya prosedural karena hampir semua pekerjaan langsung menyentuh ETS atau Application berbasis ETS
    Untuk belajar cara merancang layanan dengan OTP di Elixir atau bahasa BEAM lain, buku "Designing Elixir Systems with OTP" oleh James Edward Gray dan Bruce Tate, serta "Functional Web Development with Elixir, OTP, and Phoenix" oleh Lance Halvorsen bagus untuk dibaca

    • Saat percobaan pertama, saya menulisnya dengan cara yang lebih OTP-ish, tetapi pada alur khusus ini skalabilitasnya tidak sama
      Pada akhirnya tracker torrent lebih mirip database khusus, dan tujuan utamanya adalah memproses data secepat mungkin
      Meski begitu, saya akan coba membaca buku-buku itu
    • Kalau belum tahu apa itu OTP dalam konteks ini, OTP adalah singkatan dari Open Telecom Platform
      Sekarang maknanya lebih dekat ke perangkat lunak yang memiliki karakter seperti aplikasi telekomunikasi daripada telekomunikasi itu sendiri; jika separuh kehebatan Erlang adalah konkurensi dan distribusi, dan separuh lainnya adalah kemampuan menangani kesalahan, maka framework OTP bisa dianggap sebagai “separuh ketiga” itu
      https://learnyousomeerlang.com/what-is-otp
    • Membuat tracker BitTorrent dengan GenServer sama sekali tidak masuk akal
      Untuk konfigurasi satu server, ETS adalah pilihan yang 100% tepat; memang tidak akan bisa scale secara horizontal, tetapi scale secara vertikal akan sangat baik
      Lagi pula, sebagian besar kemungkinan besar YAGNI
    • Salah satu kekuatan besar Elixir dan Erlang adalah bisa menulis kode yang sangat intuitif sambil tetap mendapatkan performa bagus
      Ada kalanya GenServer tambahan atau gen_statem sangat cocok, tetapi di banyak penggunaan Elixir dan Phoenix, pilihan arsitektur yang mewah tidak selalu diperlukan
      Karena runtime-nya sudah melakukan hal-hal yang cukup mewah untuk kita
    • Saya penasaran, seperti apa seharusnya desain OTP-first itu?
      ETS sudah bawaan OTP, jadi saya tidak paham mengapa memakai ETS dianggap bukan OTP-first
      Saya juga tidak terlalu paham apa masalahnya memakai ETS; itu hanya penyimpanan in-memory
      Saya sempat melihat-lihat kodenya, tetapi tidak terasa terlalu bergaya prosedural
  • Dibuat dengan baik. Sebaiknya pindahkan dari IO.puts ke Logger, dan pertimbangkan juga menambahkan OTel

  • Elixir benar-benar menyenangkan. Saat ini saya sedang membuat mesin notifikasi keren dengan Elixir, dan hasilnya sangat bagus

    • Kelihatannya menarik. Penasaran apakah ini privat atau open source
      Elixir benar-benar membutuhkan mesin notifikasi yang lebih baik
  • Selamat atas rilisnya. Saya penasaran apakah Anda bisa menjelaskan secara detail bagaimana ini bekerja dibandingkan opentracker
    Saya sangat tertarik pada hal-hal seperti performa

    • Untuk tracker kecil, opentracker mungkin lebih cepat dan memakai memori sedikit lebih sedikit
      Titik di mana ExTracker bersinar adalah ketika jumlah core mulai masuk dua digit
      Namun benchmark yang layak memang masih perlu dilakukan
  • Kelihatannya bagus. Akan saya cek nanti
    Beberapa tahun lalu saya pernah membuat tracker dasar dengan Elixir, kodenya ada di sini: https://github.com/aalin/mr_torrent

    • Menarik. Penasaran mengapa Anda secara khusus memutuskan membuatnya sebagai tracker privat
  • Menarik. Untuk mempelajari BitTorrent lebih jauh, saya membuat sesuatu yang mirip dengan TypeScript, lalu membuat ulang dengan Rust untuk belajar Rust: https://github.com/ckcr4lyf/kiryuu
    Namun saya hanya memakai Redis sebagai database. Proyek ini tampaknya menaruh seluruh database di memori; saya penasaran apakah ada keputusan desain menarik atau masalah yang Anda alami saat melakukan itu
    Solusi Redis saya sepertinya kurang bagus karena tidak mengacak peer pada announce berikutnya

    • Dalam kasus saya, memakai ETS in-memory adalah keputusan terbaik
      Data tiap peer bisa dibaca dan ditulis secara bersamaan dari proses masing-masing, sehingga contention dan latensi menjadi minimal
      Satu-satunya bagian yang diproses secara berurutan adalah saat swarm baru pertama kali dibuat, dan itu tidak sering terjadi, jadi tidak masalah
      Sayangnya tidak ada dukungan native untuk langsung mengambil baris acak dari tabel, jadi saat ini seluruh swarm diambil lalu dipilih subset acak: https://github.com/Dahrkael/ExTracker/blob/master/lib/ex_tra...
  • Akan bagus kalau bisa menjelaskan apa itu DHT dan PEX. Sulit mencari "tracker PEX"

  • Keren. Penasaran apakah Anda ingin memakai Elixir sebagai pekerjaan utama

    • Saya bukan penulis aslinya, tetapi sudah 9 tahun 2 bulan bekerja dengan Elixir
      Saya juga tahu Rust dan Go. Sedang merekrut?
    • Itu memang salah satu opsi. Sepertinya saya akan jauh lebih menikmatinya daripada C++
  • Penasaran bagaimana Anda memulainya, apakah merujuk proyek lain, berapa lama pengerjaannya, dan sejauh mana fitur yang berjalan jika dibandingkan dengan sesuatu seperti qBittorrent

    • Saya memulainya karena proyek lain membutuhkan tracker, tetapi membuat tracker-nya sendiri ternyata lebih menarik
      Saya juga melihat-lihat kode tracker lain, tetapi kebanyakan terlalu rumit atau terlalu sederhana sehingga tidak banyak membantu
      Sejauh ini ini adalah hasil 3 bulan balas dendam menunda tidur
      Ini bukan klien seperti qBittorrent, tetapi saya punya ide proyek klien berorientasi seedbox untuk masa depan
    • Ini tracker, bukan klien torrent
  • Saya mencobanya, tetapi tidak berhasil membuat HTTPS berjalan
    Di konsol terus muncul 04:43:20.160 [warning] invalid 'event' parameter: size: 6 value: "paused", tetapi sepertinya tetap berfungsi
    Saya juga ingin melihat statistik HTTP, meski UDP juga tidak masalah. Hanya saja saya sedang menonaktifkan UDP

    • Event "paused" adalah bagian dari BEP 21
      Itu dikirim saat klien belum selesai, tetapi tidak akan mengunduh lagi
      Misalnya ketika pengguna hanya menginginkan sebagian file dari torrent
      Dari README proyek, dukungan BEP 21 belum diimplementasikan
    • Telemetry untuk sisi HTTP ada di daftar tugas
      Karena memakai library pihak ketiga untuk webserver, saya masih perlu mencari cara yang benar
      Untuk memakai HTTPS, Anda perlu memberikan path sertifikat yang valid pada :https_keyfile, tetapi untuk saat ini jika membutuhkan HTTPS, saya menyarankan menaruh Caddy atau Nginx di depan tracker
      Integrasi certbot juga direncanakan, tetapi karena sebagian besar peer torrent memakai UDP, prioritasnya tidak tinggi