2 puan yazan GN⁺ 2025-06-20 | 1 yorum | WhatsApp'ta paylaş
  • ExTracker, Elixir ile yapılmış bir BitTorrent tracker’dır; şu anda geliştirme aşamasında olsa da çalıştığı ve henüz tam endüstriyel kullanım için hazır olmadığı belirtiliyor
  • Performans hedefleri: kullanılabilir tüm çekirdekleri kullanan yüksek performans, bellek içi depolama tabanlı çalışma, 1 milyon peer başına yaklaşık 200 MB RAM kullanımı ve ek kurulum gerektirmeden çalışabilen bir yapı
  • BitTorrent ile ilgili BEP’lerden BEP 0, BEP 15, BEP 23, BEP 7, BEP 21, BEP 24, BEP 41, BEP 48 ve BEP 52 uygulanmış; Private Torrents gibi bazıları ise uygulanmamış ya da kısmen uygulanmış durumda
  • HTTPS, disk veritabanı yedeklemesi ve Docker ile çalıştırmayı destekliyor; WebTorrent’i desteklemiyor, whitelist/blacklist, peer yönetimi, metrics ve GeoIP ise kısmen uygulanmış durumda
  • Çalıştırma yöntemi olarak kaynak koddan doğrudan çalıştırma, release’i doğrudan derleme ve Docker imajı çalıştırma olmak üzere üç seçenek var; container’da runtime.exs yerine ortam değişkenleri ile yapılandırma yapılabiliyor

ExTracker’ın durumu ve hedefleri

  • ExTracker, “Elixir ile yapılmış BitTorrent Tracker” olarak tanıtılan bir BitTorrent tracker uygulamasıdır
  • Proje Work In Progress durumundadır
    • Henüz tam endüstriyel kullanım için hazır olmadığı belirtiliyor
    • Şu anda çalışabilir durumda
  • extracker.dahrkael.net:6969 üzerinde bir test instance’ı çalışıyor ve mevcut işlevler etkin durumda

Başlıca özellikler

  • Performans ve operasyon kolaylığı temel özellikler olarak sunuluyor
    • Yüksek performans: Kullanılabilir tüm çekirdekleri kullanır
    • Bellek içi depolama kullanır
    • Bellek kullanımı 1 milyon peer başına yaklaşık 200 MB RAM’dir
    • Zero setup: Çalıştırıldığında hemen çalışır hâle gelmesi hedeflenir

BitTorrent BEP destek durumu

Diğer özellikler ve sınırlamalar

  • Tamamlanan özellikler
    • HTTPS desteği

      • Disk veritabanı yedeklemesi
      • Desteklenmeyen özellikler
      • WebTorrent
      • Kısmen uygulanmış özellikler
    • Infohash whitelist/blacklist

      • Peer yönetimi: interval enforcement, cleanup, banning vb.
    • Metrics

      • GeoIP desteği: istatistikler ve peer sınırlaması amacıyla
      • Özellik önerileri Issues üzerinden alınabilir

Çalıştırma yöntemi

  • Kaynak koddan doğrudan çalıştırma

  • Release derleme

    • Şu anda resmi release derlemesi yoktur; release’i kendiniz oluşturup dağıtabilirsiniz
    • Depoyu klonladıktan sonra işletim sisteminize uygun şekilde derleyin
    • Linux: MIX_ENV=prod mix release extracker
    • Windows: MIX_ENV=prod mix release extrackerw
    • Release dosyaları _build/prod/rel/extracker klasöründe oluşturulur
    • Başka bir makineye taşınacaksa işletim sistemi ve mimari aynı olmalıdır
    • Gerekirse releases/{VERSION}/runtime.exs yapılandırmasını değiştirin
    • Çalıştırma komutu bin/extracker start şeklindedir
  • Docker ile çalıştırma

    • Sağlanan Docker imajı doğrudan çalıştırılabilir
    • docker run ghcr.io/dahrkael/extracker:latest
    • docker-compose ile de kullanılabilir ve örnek compose dosyası sağlanır
    • Container içinde runtime.exs dosyasını değiştirerek yapılandırmayı ayarlamak zor olduğundan ortam değişkenleri ile de yapılandırma yapılabilir
    • Tüm ortam değişkenleri listesi örnek compose dosyasında görülebilir

Lisans

  • ExTracker, Apache License 2.0 koşullarıyla dağıtılır
  • Ayrıntılar için depodaki LICENSE file dosyasına bakın

1 yorum

 
GN⁺ 2025-06-20
Hacker News yorumları
  • OTP öncelikli bir tasarım bekliyordum; ama kodun neredeyse her işte ETS'ye ya da ETS tabanlı Application'a doğrudan dokunması nedeniyle prosedürel tarafa daha yakın görünmesi biraz hayal kırıklığı yarattı
    Elixir veya diğer BEAM dillerinde OTP ile servis tasarlamayı öğrenmek için James Edward Gray ve Bruce Tate'in "Designing Elixir Systems with OTP" ve Lance Halvorsen'in "Functional Web Development with Elixir, OTP, and Phoenix" kitaplarına bakmak iyi olur

    • İlk denediğimde daha OTP tarzı bir yaklaşımla yazmıştım, ama bu özel akışta aynı ölçeklenebilirliği sağlamadı
      Sonuçta torrent tracker, özel amaçlı bir veritabanına oldukça benziyor ve veriyi olabildiğince hızlı işlemek en önemli hedef
      Yine de kitaplara bir göz atacağım
    • Bu bağlamda OTP'nin ne olduğunu bilmiyorsanız, OTP Open Telecom Platform'un kısaltmasıdır
      Artık doğrudan telekomünikasyondan çok, telekom uygulamalarına benzer nitelikte yazılımlara daha yakın; Erlang'ın büyüklüğünün yarısı eşzamanlılık ve dağıtıklık, diğer yarısı hata işleme yeteneğiyse, OTP framework'ü bunun “üçüncü yarısı” sayılabilir
      https://learnyousomeerlang.com/what-is-otp
    • GenServer'larla BitTorrent tracker yapmak hiç mantıklı değil
      Tek sunuculu bir kurulumsa ETS %100 doğru seçim; yatay ölçeklenmez ama dikeyde müthiş iyi ölçeklenir
      Zaten büyük olasılıkla çoğu için YAGNI geçerli
    • Elixir ve Erlang'ın güçlü yanlarının büyük bir kısmı, son derece sezgisel kod yazarken yine de iyi performans alınabilmesinde
      Ek GenServer'ların veya gen_statemin çok iyi oturduğu durumlar olabilir, ama Elixir ve Phoenix'in birçok kullanımında gösterişli mimari tercihlere gerek yok
      Çünkü runtime zaten yeterince gösterişli işleri sizin yerinize yapıyor
    • Merak ediyorum, OTP öncelikli tasarım nasıl görünmeli?
      ETS zaten OTP'nin içinde yerleşik; ETS kullanmanın neden OTP öncelikli olmadığını anlamıyorum
      ETS kullanmanın nesi sorun, onu da pek anlamıyorum; sonuçta sadece in-memory bir depolama
      Koda göz gezdirdim ama prosedürel stile yakın olduğunu hissetmedim
  • İyi yapılmış. IO.puts yerine Logger'a geçmek ve OTel eklemeyi de düşünmek iyi olur

  • Elixir gerçekten harika. Şu anda Elixir ile güzel bir bildirim motoru geliştiriyorum ve gerçekten mükemmel

    • İyi görünüyor. Kapalı kaynak mı, açık kaynak mı merak ettim
      Elixir'in gerçekten daha iyi bir bildirim motoruna ihtiyacı var
  • Yayın için tebrikler. opentracker ile karşılaştırıldığında nasıl çalıştığını daha ayrıntılı anlatabilir misin merak ediyorum
    Performans gibi konular özellikle ilgimi çekiyor

    • Küçük bir tracker için opentracker muhtemelen daha hızlı olur ve biraz daha az bellek kullanır
      ExTracker'ın parladığı nokta, çekirdek sayısı çift hanelere çıkmaya başladığında
      Yine de düzgün benchmark'ları henüz yapmak gerekiyor
  • Güzel görünüyor. Daha sonra kontrol edeceğim
    Birkaç yıl önce Elixir ile temel bir tracker yapmıştım; kodu burada: https://github.com/aalin/mr_torrent

    • İlginç. Neden özellikle özel tracker olarak yapmaya karar verdiğini merak ettim
  • İlginç. BitTorrent'i daha iyi öğrenmek için TypeScript ile benzer bir şey yapmıştım, sonra Rust öğrenmek için Rust ile yeniden yazdım: https://github.com/ckcr4lyf/kiryuu
    Ben veritabanı olarak sadece Redis kullanmıştım. Bu projede tüm veritabanı bellekteymiş gibi görünüyor; bunu yaparken aldığınız ilginç tasarım kararları ya da yaşadığınız sorunlar oldu mu merak ediyorum
    Benim Redis çözümüm sonraki announce'larda peer'leri rastgeleleştirmiyor gibi, o yüzden pek iyi değil

    • Benim durumumda in-memory ETS kullanmak en iyi karardı
      Her peer'in verisi kendi process'inde eşzamanlı olarak okunup yazılabildiği için çekişme ve gecikme minimuma iniyor
      Sıralı işlenen tek kısım, yeni bir swarm'ın ilk kez oluşturulması; bu da sık olmadığı için sorun değil
      Ne yazık ki tablodan rastgele bir satırı doğrudan almaya yönelik native destek yok; bu yüzden şu anda tüm swarm'ı alıp sonra rastgele bir alt küme seçiyorum: https://github.com/Dahrkael/ExTracker/blob/master/lib/ex_tra...
  • DHT ve PEX'in ne olduğunu açıklayabilirsen iyi olur. "tracker PEX" diye aramak zor

  • Harika. Elixir'i ana işinde kullanmak isteyip istemediğini merak ediyorum

    • Orijinal yazının sahibi değilim ama 9 yıl 2 aydır Elixir ile çalışıyorum
      Rust ve Go da biliyorum. İşe alım yapıyor musunuz?
    • Seçeneklerden biri olduğu doğru. C++'tan çok daha fazla keyif alacağımı düşünüyorum
  • Nasıl başladığını, başka projeleri referans alıp almadığını, ne kadar sürdüğünü ve qBittorrent gibi şeylerle karşılaştırıldığında özelliklerin ne kadarının çalıştığını düşündüğünü merak ediyorum

    • Başka bir proje için tracker'a ihtiyacım olduğu için başladım, ama tracker yapmak daha eğlenceli hale geldi
      Başka tracker kodlarına da göz gezdirdim, ama çoğu ya aşırı karmaşık ya da fazla basitti; pek yardımcı olmadılar
      Şu ana kadar 3 ay boyunca intikam amaçlı uyku ertelemesi ile ortaya çıkan sonuç bu
      Bu qBittorrent gibi bir istemci değil, ama gelecekte seedbox odaklı bir istemci projesi fikrim var
    • Bu bir tracker, torrent istemcisi değil
  • Denedim ama HTTPS'i çalışır hale getiremedim
    Konsola sürekli 04:43:20.160 [warning] invalid 'event' parameter: size: 6 value: "paused" yazılıyor, ama çalışıyor gibi görünüyor
    HTTP istatistiklerini de görmek isterdim ama UDP de olur. Yalnız ben UDP'yi kapalı tutuyorum

    • "paused" olayı BEP 21'in bir parçası
      İstemci henüz tamamlanmış durumda olmadığını, ama artık indirme yapmayacağını tracker'a bildirmek için bunu gönderir
      Örneğin kullanıcı torrent'teki dosyaların yalnızca bir kısmını istediğinde
      Proje README'sine bakılırsa BEP 21 desteği uygulanmamış durumda
    • HTTP tarafındaki Telemetry yapılacaklar listesinde
      Web sunucusu için üçüncü taraf bir kütüphane kullandığım için doğru yöntemi henüz netleştirmem gerekiyor
      HTTPS kullanmak için :https_keyfile içine geçerli bir sertifika yolu vermen gerekir; ama şu anda HTTPS gerekiyorsa tracker'ın önüne Caddy veya Nginx koymanı öneriyorum
      certbot entegrasyonu da planlarda var, fakat torrent peer'lerinin çoğu UDP kullandığı için önceliği yüksek değil