2 puan yazan GN⁺ 2025-06-20 | 1 yorum | WhatsApp'ta paylaş
  • ExTracker, Elixir tabanlı yeni bir BitTorrent tracker projesi
  • Yüksek performans ve düşük bellek kullanımı temel alınarak tasarlanmış; pratikte neredeyse sıfır kurulumla hemen kullanılabiliyor
  • Çeşitli BitTorrent protokolü (BEP) genişletme önerilerini destekleyerek esneklik ve uyumluluk sunuyor
  • HTTPS desteği, disk yedekleme, operasyonel yönetim özellikleri gibi gerçek kullanım için gerekli başlıca işlevleri içeriyor
  • Şu anda endüstriyel kullanım için henüz tamamlanmamış durumda, ancak bir test örneği gerçek ortamda çalışıyor

Genel bakış ve projenin önemi

ExTracker, Elixir ile geliştirilen yeni bir açık kaynak BitTorrent tracker projesi ve mevcut tracker'lara kıyasla şu avantajları sunuyor:

  • Güncel Erlang/Elixir çalışma zamanı üzerinde, tüm çok çekirdekli kaynakları kullanan yüksek performanslı bir mimariye sahip
  • Büyük ölçekli peer ortamlarında (yaklaşık 1 milyon peer başına 200MB RAM) düşük bellek kullanımı sağlıyor
  • Karmaşık ön yapılandırma gerektirmeden anında çalışan bir sıfır kurulum deneyimi sunuyor
  • Birden fazla BitTorrent Enhancement Proposal (BEP) desteğiyle güncel tracker standartlarıyla uyumluluğu koruyor

Mevcut tracker'lara göre hafif ve verimli olan proje, Elixir'in özgün eşzamanlılık ve dağıtık ortam desteğinden azami ölçüde yararlanarak benzer açık kaynak projelerden ayrışıyor

Başlıca özellikler (Features)

  • Yüksek performans: Tüm CPU çekirdeklerini kullanır, bellek içi depolama kullanır
  • Bellek optimizasyonu: 1 milyon peer başına yaklaşık 200MB RAM kullanır
  • Sıfır kurulum: Hiçbir ek yapılandırma olmadan doğrudan çalıştırılabilir

Desteklenen BitTorrent Enhancement Proposals (BEP)

  • BEP 0: BitTorrent protokolü spesifikasyonuna uyum
  • BEP 15: UDP tracker protokolü desteği
  • BEP 23: Sıkıştırılmış peer listesi döndürme
  • BEP 7: IPv6 tracker genişletmesi
  • BEP 24: Harici IP döndürme
  • BEP 41: UDP tracker protokolü genişletmesi
  • BEP 48: Scrape tracker genişletmesi (kısmi destek)
  • BEP 52: BitTorrent protokolü v2
  • Bazı işlevler (BEP 27, 21, 31 vb.) henüz uygulanmamış ya da planlama aşamasında
  • BEP 8 (tracker peer obfuscation) desteklenmiyor

Diğer özellikler

  • HTTPS bağlantı desteği
  • Disk yedekleme (veri güvenliğini artırır)
  • (Planlanıyor) Infohash beyaz liste/siyah liste yönetimi
  • (Planlanıyor) Peer yönetimi: yetkiler, periyodik temizlik, çıkarma vb.
  • (Planlanıyor) Metrik/gösterge yönetimi ve GeoIP kullanımı
  • WebTorrent için destek planlanmıyor

Kullanıcı ve geliştirici önerileri Issue olarak kabul ediliyor

Çalıştırma yöntemleri

  • Kaynak koddan doğrudan çalıştırma
    • Erlang ve Elixir gerekir
    • Depoyu klonladıktan sonra yapılandırıp çalıştırın
  • Release yöntemi
    • Resmî bir release yok, ancak doğrudan derleme ve dağıtım yöntemi destekleniyor
    • Release dosyalarını kopyalayıp yapılandırdıktan sonra çalıştırın
  • Docker
    • Resmî container image kullanılabilir
    • docker-compose örnek dosyası sağlanıyor
    • Container içi yapılandırmada ortam değişkenlerinin kullanılması öneriliyor

Telif hakkı ve lisans

  • Copyright (c) Dahrkael <dahrkael at outlook dot com>
  • Apache License 2.0 kapsamında dağıtılır
  • Lisans ayrıntıları için depodaki LICENSE dosyasına bakın

1 yorum

 
GN⁺ 2025-06-20
Hacker News görüşleri
  • OTP merkezli bir tasarım beklediğini, ancak gerçek kodun neredeyse prosedürel kaldığını ve ETS ya da Application gibi ETS tabanlı sistemlerle her seferinde doğrudan uğraşma yaklaşımının hayal kırıklığı yarattığını söylüyor
    Yazar Elixir veya BEAM dillerinde servis tasarımını öğrenmek istiyorsa, James Edward Gray ile Bruce Tate’in yazdığı "Designing Elixir Systems with OTP" ve Lance Halvorsen’in "Functional Web Development with Elixir, OTP, and Phoenix" kitaplarını başvuru kaynağı olarak öneriyor

    • İlk denemede OTP tarzında yazdığını, ancak bu kadar somut akışlarda aynı ölçüde ölçeklenebilirlik elde edilemediğini fark ettiğini söylüyor
      Torrent tracker’ın sonuçta özelleşmiş bir veritabanı olduğunu, bu yüzden veriyi olabildiğince hızlı işlemenin en önemli hedef olduğunu düşündüğünü belirtiyor
      Yine de önerilen kitapları mutlaka okumayı planladığını ifade ediyor
  • C++ geliştiricilerini Go ve Elixir’ye çeken özel bir şey olduğunu düşündüğünü söylüyor
    Kendisinin de buna dahil olduğunu belirtiyor
    Performansa ilgi duyup C++ seven insanların, Go veya Elixir’nin çoklu iş parçacığı performansını sevdiğinden bahsediyor
    Projeyi de harika bulduğunu ekliyor

    • C++ geliştiricileri konusunda emin olmadığını, ancak Erlang/Elixir’nin pattern matching uygulaması sayesinde protokol ayrıştırmada çok güçlü olduğunu düşündüğünü söylüyor
      Pattern matching’in çoğu dallanmayı ve kod karmaşıklığını azaltarak kodu çok daha temiz hale getirdiğini belirtiyor
      "Let it crash" felsefesi sayesinde çoğu istisna durumunu görmezden gelse bile, gerçekten bir sorun çıkarsa etkisinin tek bir istemciyle sınırlı kalacağından emin olduğunu söylüyor
      10 yılı aşkın süredir Elixir ile dağıtıma çıkmış uygulamalarda beklenmedik bir kesinti yaşamadığını belirtiyor
      Bakım ve güncellemeler dışında her zaman %100 çalışma süresi gördüğünü vurguluyor
      Müşterilere “Python ya da Go yerine Elixir ile yapılan servisler asla çökmez, üstüne bir de harika dashboard’lar sunar” diye anlattığını ve birçok kişinin bununla hemen ikna olduğunu söylüyor
      Elixir gibi struct ve enum ile fonksiyon imzalarında pattern matching desteği sunan bir sistem dili olmasını istediğini ekliyor
  • Kendisinin de BT’yi öğrenmek amacıyla Typescript ile benzer bir şey yaptığını söylüyor
    Daha sonra Rust ile yeniden yazarak Rust’ı da öğrendiğini belirtiyor
    proje bağlantısı
    Veritabanı olarak yalnızca redis kullandığını, karşı tarafın ise her şeyi bellekte tutmasının ilginç geldiğini söylüyor
    Bu şekilde tasarlarken ne tür düşünceler, eğlenceli kararlar veya sorunlar yaşandığını merak ediyor
    Bu arada redis tabanlı çözümünde, announce işlemi birkaç kez yapıldığında peer’ların her zaman rastgele karışmaması gibi bir sorun olduğunu ekliyor

    • Kendi deneyimine göre bellek içi ETS kullanmanın en iyi seçenek olduğunu söylüyor
      Her peer verisinin ayrı süreçler tarafından eşzamanlı okunup yazılabildiğini, bu yüzden çekişme ve gecikmenin minimuma indiğini belirtiyor
      Sıralı kalan tek kısmın yeni bir swarm ilk kez oluşturulduğunda yaşandığını ve bunun da sık olmadığı için sorun yaratmadığını söylüyor
      Ne yazık ki tablodan rastgele satır seçmek için yerel destek olmadığını, bu yüzden şu anda tüm swarm’ı çekip rastgele bir alt küme seçtiğini belirtiyor
      ilgili kod örneği
  • Bunun harika bir proje olduğunu düşünüyor
    Geçmişte kendisinin de Elixir ile temel bir tracker yazdığını söylüyor
    kod bağlantısı

    • İlginç bulduğunu söylüyor
      Özellikle neden private tracker olarak tasarlandığını merak ediyor
  • Projenin yayımlanmasını kutluyor
    opentracker ile karşılaştırıldığında nasıl davrandığı ve performansı hakkında daha fazla bilgi merak ediyor

    • Küçük tracker’lar için opentracker’ın muhtemelen daha hızlı olacağını ve daha az bellek kullanacağını söylüyor
      Ama extracker’ın asıl gücünü CPU çekirdeği sayısı çift hanelere çıktığında gösterdiğini belirtiyor
      Henüz düzgün bir benchmark yapmadığını da ekliyor
  • Çok iyi yapılmış bir proje olduğunu söylüyor
    Kısa bir tavsiye olarak, IO.puts yerine Logger’a geçmeyi ve OTel eklemeyi düşünmeyi öneriyor

    • Buna katıldığını söylüyor
      Yerleşik Logger ve Telemetry uygulamalarını kullanmanın fazlasıyla yeterli olduğu görüşünde
      Daha sonra opentelemetry veya başka şeylerin de Telemetry hook’larına kolayca eklenebileceğini belirtiyor
      Logger documentation
      Telemetry documentation

    • Tercih ettiği otel sink’in ne olduğunu soruyor; yani metrikleri nereye göndermeyi tercih ettiğini

  • Elixir’yi gerçekten çok sevdiğini söylüyor
    Şu anda Elixir ile harika bir notification engine geliştirdiğini belirtiyor
    Elixir’nin gerçekten olağanüstü olduğunu söylüyor

    • Harika olduğunu söylüyor
      Bunun private bir proje mi yoksa OSS mi olduğunu merak ediyor
      Elixir ekosisteminde daha iyi bir notification engine’e ihtiyaç olduğunu ekliyor
    • Buna nasıl başladığını soruyor
  • Referans aldığı projeler olup olmadığını soruyor

  • Geliştirmenin ne kadar sürdüğünü merak ediyor

  • qbittorrent ile kıyaslandığında ne kadar işlevin çalıştığını soruyor

    • Başka bir projede kullanmak için bir tracker’a ihtiyaç duyduğu için başladığını, ama tracker geliştirmenin kendisinin daha eğlenceli hale geldiğini ve bu yüzden devam ettiğini söylüyor
      Diğer tracker kodlarına baktığını, ancak çoğunun ya fazla karmaşık ya da fazla basit olduğu için iyi bir referans olmadığını belirtiyor
      Şu ana kadar birkaç gece boyu kodlama seansı eşliğinde 3 aydır üzerinde çalıştığını söylüyor
      qbittorrent gibi bir istemci olmadığını, ama ileride seedbox odaklı bir istemci projesi fikri olduğunu ekliyor

    • Tracker’ın torrent istemcisi olmadığını açıklıyor

  • Bizzat denediğini ama HTTPS’in düzgün çalışmaması gibi bir sorun yaşadığını söylüyor
    Ayrıca konsolda
    04:43:20.160 [warning] invalid 'event' parameter: size: 6 value: "paused"
    gibi uyarı mesajlarının sürekli çıktığını belirtiyor
    Buna rağmen çalışıyor gibi göründüğünü ekliyor
    HTTP istatistiklerini de görmek istediğini ama yalnızca UDP istatistiklerinin göründüğünü söylüyor
    (Kendisinin UDP’yi devre dışı bıraktığını da not ediyor)

    • "paused" olayının BEP 21’in bir parçası olduğunu, istemcinin hâlâ tamamlanmamış olsa da artık indirme yapmadığını tracker’a bildirmek için kullanıldığını açıklıyor
      Örneğin kullanıcının torrent içindeki dosyaların yalnızca bir kısmını istediği durumlarda işe yaradığını söylüyor
      Projeye ait readme dosyasında BEP 21 desteği olmadığının belirtildiğini ekliyor

    • HTTP ile ilgili Telemetry’nin hâlâ ToDo listesinde olduğunu söylüyor
      Web sunucusu olarak 3rd-party bir kütüphane kullandığı için uygun entegrasyon yöntemini hâlâ düşündüğünü belirtiyor
      HTTPS kullanmak için :https_keyfile ayarına geçerli bir sertifika yolu verilmesi gerektiğini söylüyor
      Şimdilik HTTPS isteniyorsa tracker’ın önüne Caddy veya Nginx koymayı öneriyor
      certbot entegrasyonunu da planladığını, ancak torrent peer’larının çoğu UDP kullandığı için bunun önceliğinin düşük olduğunu ekliyor

  • Gerçekten harika bir proje olduğunu söylüyor
    Elixir’yi ana dili olarak kullanmayı düşünüp düşünmediğini soruyor

    • Elixir’nin başlıca seçeneklerinden biri olduğunu söylüyor
      Kişisel olarak C++’a kıyasla onunla çalışmanın kesinlikle daha keyifli olacağına inandığını belirtiyor

    • Kendisinin olmasa da yaklaşık 9 yıl 2 aydır Elixir ile çalıştığını, ayrıca Rust ve Golang de bildiğini söylüyor
      Şu anda birilerinin işe alım yapıp yapmadığını merak ediyor