2 पॉइंट द्वारा GN⁺ 2025-06-20 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • ExTracker Elixir से बना BitTorrent tracker है, जिसके बारे में स्पष्ट किया गया है कि यह अभी work in progress है, लेकिन काम करता है और पूरे industrial use के लिए अभी तैयार नहीं है
  • Performance लक्ष्य हैं उपलब्ध सभी cores का इस्तेमाल करने वाला high performance, in-memory storage आधारित operation, हर 10 लाख peer पर लगभग 200MB RAM उपयोग, और बिना अलग setup के चलने वाली संरचना
  • BitTorrent से जुड़े BEP में BEP 0, BEP 15, BEP 23, BEP 7, BEP 21, BEP 24, BEP 41, BEP 48, BEP 52 लागू किए गए हैं, जबकि Private Torrents आदि कुछ features अभी implement नहीं हुए हैं या partial implementation की स्थिति में हैं
  • HTTPS, disk database backup, Docker execution का support है; WebTorrent support नहीं है, और whitelist/blacklist, peer management, metrics, GeoIP partial implementation स्थिति में हैं
  • चलाने के तीन तरीके हैं: source से सीधे run करना, खुद release build करना, और Docker image चलाना; container में runtime.exs के बजाय environment variables से configuration किया जा सकता है

ExTracker की स्थिति और लक्ष्य

  • ExTracker एक BitTorrent tracker implementation है, जिसे “The Bittorrent Tracker made in Elixir” के रूप में पेश किया गया है
  • Project Work In Progress स्थिति में है
    • स्पष्ट किया गया है कि यह पूरे industrial use के लिए अभी तैयार नहीं है
    • फिलहाल इसे चलाया जा सकता है
  • Test instance extracker.dahrkael.net:6969 पर चल रहा है, और वर्तमान features active हैं

मुख्य features

  • Performance और operational convenience को core features के रूप में रखा गया है
    • High performance: उपलब्ध सभी cores का इस्तेमाल करता है
    • In-memory storage का इस्तेमाल करता है
    • Memory usage हर 10 लाख peers पर लगभग 200MB RAM है
    • Zero setup: लक्ष्य है कि run करते ही यह तुरंत काम करे

BitTorrent BEP support की स्थिति

अन्य features और सीमाएं

  • पूरे हो चुके features
    • HTTPS support

      • Disk database backup
      • Supported नहीं features
      • WebTorrent
      • Partial implementation वाले features
    • Infohash whitelist/blacklist

      • Peer management: interval enforcement, cleanup, banning आदि
    • Metrics

      • GeoIP support: statistics और peer restriction के लिए
      • Feature suggestions Issues में लिए जा सकते हैं

चलाने का तरीका

  • Source code से सीधे run करना

    • इस तरीके के लिए system में Erlang और Elixir install होना चाहिए
    • Repository clone करें
    • git clone https://github.com/Dahrkael/ExTracker.git && cd ExTracker
    • जरूरत हो तो config/runtime.exs को modify करें
    • Run command MIX_ENV=prod iex -S mix है
  • Release build

    • अभी कोई official release build नहीं है, और आप खुद release बनाकर deploy कर सकते हैं
    • Repository clone करने के बाद operating system के अनुसार build करें
    • Linux: MIX_ENV=prod mix release extracker
    • Windows: MIX_ENV=prod mix release extrackerw
    • Release files _build/prod/rel/extracker folder में बनती हैं
    • दूसरी machine पर ले जाने पर OS और architecture समान होने चाहिए
    • जरूरत हो तो releases/{VERSION}/runtime.exs configuration modify करें
    • Run command bin/extracker start है
  • Docker execution

    • उपलब्ध Docker image को सीधे run किया जा सकता है
    • docker run ghcr.io/dahrkael/extracker:latest
    • इसे docker-compose के साथ भी इस्तेमाल किया जा सकता है और example compose file उपलब्ध है
    • Container के अंदर runtime.exs modify करके settings adjust करना मुश्किल होता है, इसलिए environment variables से भी configure किया जा सकता है
    • Environment variables की पूरी list example compose file में देखी जा सकती है

License

  • ExTracker Apache License 2.0 की शर्तों के तहत distributed है
  • अधिक जानकारी के लिए repository की LICENSE file देखें

1 टिप्पणियां

 
GN⁺ 2025-06-20
Hacker News की राय
  • मुझे OTP-first design की उम्मीद थी, लेकिन कोड लगभग हर काम में सीधे ETS या ETS-आधारित Application को छूता है, इसलिए यह procedure-oriented जैसा लगा—थोड़ा अफसोस हुआ
    Elixir या दूसरी BEAM भाषाओं में OTP के साथ services design करना सीखना हो तो James Edward Gray और Bruce Tate की "Designing Elixir Systems with OTP", और Lance Halvorsen की "Functional Web Development with Elixir, OTP, and Phoenix" देखना अच्छा रहेगा

    • पहली कोशिश में मैंने इसे ज़्यादा OTP-जैसे तरीके से लिखा था, लेकिन इस खास flow में scalability वैसी नहीं थी
      आखिरकार torrent tracker एक specialized database जैसा ही है, और data को जितनी जल्दी हो सके process करना ही सबसे बड़ा लक्ष्य है
      फिर भी किताबें एक बार पढ़कर देखूंगा
    • अगर इस context में OTP क्या है नहीं पता, तो OTP का मतलब Open Telecom Platform है
      अब यह telecom itself से ज़्यादा ऐसे software जैसा है जिसकी प्रकृति communication applications जैसी होती है; और अगर Erlang की महानता का आधा हिस्सा concurrency और distribution है, और बाकी आधा error handling क्षमता है, तो OTP framework को उसका “तीसरा आधा” कहा जा सकता है
      https://learnyousomeerlang.com/what-is-otp
    • GenServers से BitTorrent tracker बनाना बिल्कुल भी समझदारी नहीं है
      single-server setup हो तो ETS 100% सही choice है, और horizontal scaling नहीं होगी, लेकिन vertical scaling बहुत अच्छी होगी
      वैसे भी इनमें से ज़्यादातर शायद YAGNI होगा
    • Elixir और Erlang की बड़ी खूबियों में से एक यह है कि बहुत intuitive code लिखते हुए भी performance अच्छी मिलती है
      कुछ मामलों में extra GenServer या gen_statem शानदार fit हो सकते हैं, लेकिन Elixir और Phoenix के कई उपयोगों में fancy architecture choices तक जाने की जरूरत नहीं होती
      क्योंकि runtime पहले से ही आपके लिए काफी fancy काम कर देता है
    • जिज्ञासा है, OTP-first design दिखेगा कैसा?
      ETS तो OTP में built-in है, तो ETS इस्तेमाल करना OTP-first क्यों नहीं है, यह समझ नहीं आ रहा
      ETS इस्तेमाल करने में समस्या क्या है, यह भी ठीक से समझ नहीं आता; यह तो बस in-memory storage है
      मैंने code सरसरी तौर पर देखा, लेकिन यह procedure-oriented style के करीब लगा नहीं
  • अच्छा बनाया है। IO.puts के बजाय Logger पर shift करना, और OTel जोड़ने पर भी विचार करना अच्छा रहेगा

    • सहमत हूं। built-in Logger [0] और Telemetry [1] applications ही काफी हैं, और बाद में metrics export करने हों तो telemetry hooks में opentelemetry या कुछ और आसानी से जोड़ा जा सकता है
      [0] https://hexdocs.pm/logger/1.18.4/Logger.html
      [1] https://hexdocs.pm/telemetry/readme.html
    • आपकी पसंदीदा otel sink कौन-सी है, जानना चाहूंगा
  • Elixir वाकई बहुत अच्छा है। अभी Elixir में एक बढ़िया notification engine बना रहा हूं, और यह सच में शानदार है

    • ठीक लगता है। जानना चाहूंगा कि यह private है या open source
      Elixir को सच में बेहतर notification engine की जरूरत है
  • launch के लिए बधाई। opentracker की तुलना में यह कैसे काम करता है, अगर detail में बता सकें तो अच्छा होगा
    performance जैसी चीज़ों में मेरी काफी रुचि है

    • छोटे tracker के लिए opentracker शायद तेज़ होगा और memory भी थोड़ी कम इस्तेमाल करेगा
      ExTracker तब चमकता है जब core count दो अंकों में पहुंचने लगता है
      हालांकि proper benchmark अभी करना बाकी है
  • अच्छा लग रहा है। बाद में देखूंगा
    कुछ साल पहले मैंने Elixir में एक basic tracker बनाया था, code यहां है: https://github.com/aalin/mr_torrent

    • दिलचस्प। आपने खास तौर पर private tracker बनाने का फैसला क्यों किया, यह जानना चाहूंगा
  • दिलचस्प। BitTorrent को और सीखने के लिए मैंने TypeScript में कुछ ऐसा ही बनाया था, और Rust सीखने के लिए उसे Rust में फिर से बनाया: https://github.com/ckcr4lyf/kiryuu
    हालांकि मैंने database के लिए बस Redis इस्तेमाल किया था। इस project में लगता है पूरा database memory में है; ऐसा करते समय कोई interesting design decision लिया या कोई problem आई, यह जानना चाहूंगा
    मेरा Redis solution शायद subsequent announce में peers को randomize नहीं करता, इसलिए इतना अच्छा नहीं है

    • मेरे मामले में in-memory ETS इस्तेमाल करना सबसे अच्छा फैसला था
      हर peer का data अपने-अपने process में concurrent तरीके से read/write किया जा सकता है, जिससे contention और latency न्यूनतम रहती है
      sequentially process होने वाला इकलौता हिस्सा तब है जब नया swarm पहली बार बनता है, और वह अक्सर नहीं होता, इसलिए ठीक है
      अफसोस कि table से सीधे random rows लाने का native support नहीं है, इसलिए अभी पूरा swarm लाकर फिर random subset चुनता हूं: https://github.com/Dahrkael/ExTracker/blob/master/lib/ex_tra...
  • अच्छा होगा अगर कोई समझा सके कि DHT और PEX क्या हैं। "tracker PEX" search करना मुश्किल है

  • बढ़िया। क्या आप Elixir को main job में इस्तेमाल करना चाहेंगे, जानना चाहूंगा

    • मैं original poster नहीं हूं, लेकिन Elixir में 9 साल 2 महीने से काम कर रहा हूं
      Rust और Go भी जानता हूं। hiring कर रहे हैं?
    • options में से एक तो है। लगता है C++ से कहीं ज़्यादा enjoy करूंगा
  • जानना चाहूंगा कि आपने कैसे शुरू किया, क्या दूसरे projects को reference किया, कितना समय लगा, और qBittorrent जैसी चीज़ों की तुलना में कितनी functionality काम करती है

    • दूसरे project के लिए tracker की जरूरत थी, इसलिए शुरू किया, लेकिन tracker बनाना ज़्यादा मजेदार हो गया
      दूसरे trackers का code भी देखा, लेकिन वे आम तौर पर या तो जरूरत से ज़्यादा complex थे या बहुत simple, इसलिए ज्यादा मदद नहीं मिली
      अब तक यह 3 महीनों की revenge bedtime procrastination का नतीजा है
      यह qBittorrent जैसा client नहीं है, लेकिन future में seedbox-oriented client project का idea है
    • यह tracker है, torrent client नहीं
  • इस्तेमाल करके देखा, लेकिन HTTPS चलवा नहीं पाया
    console में 04:43:20.160 [warning] invalid 'event' parameter: size: 6 value: "paused" लगातार दिखता है, लेकिन लगता है काम कर रहा है
    HTTP stats भी देखना चाहता था, लेकिन UDP भी ठीक है। हालांकि मैंने UDP बंद रखा है

    • "paused" event BEP 21 का हिस्सा है
      client इसे tracker को बताने के लिए भेजता है कि वह अभी completed state में नहीं है, लेकिन अब download नहीं करेगा
      जैसे जब user torrent की सिर्फ कुछ files चाहता हो
      project README देखें तो BEP 21 support implement नहीं है
    • HTTP वाली Telemetry TODO list में है
      webserver के लिए third-party library इस्तेमाल कर रहा हूं, इसलिए सही तरीका अभी समझना होगा
      HTTPS इस्तेमाल करने के लिए :https_keyfile में valid certificate path देना होगा, लेकिन फिलहाल अगर HTTPS चाहिए तो tracker के आगे Caddy या Nginx रखने की सलाह देता हूं
      certbot integration का भी plan है, लेकिन ज्यादातर torrent peers UDP इस्तेमाल करते हैं, इसलिए priority high नहीं है