Elixir में लिखा गया नया BitTorrent ट्रैकर इम्प्लीमेंटेशन
(github.com/Dahrkael)- ExTracker Elixir-आधारित एक नया BitTorrent ट्रैकर प्रोजेक्ट है
- इसे उच्च प्रदर्शन और कम मेमोरी उपयोग को ध्यान में रखकर डिज़ाइन किया गया है, और यह लगभग ज़ीरो-सेटअप के साथ तुरंत उपयोग के लिए तैयार है
- BitTorrent प्रोटोकॉल (BEP) के कई extension proposals का समर्थन करके यह विविधता और compatibility प्रदान करता है
- इसमें HTTPS support, disk backup, operations management features जैसी व्यावहारिक उपयोग के लिए आवश्यक प्रमुख सुविधाएँ शामिल हैं
- फिलहाल यह industrial use के लिए अभी अधूरा है, लेकिन एक test instance वास्तविक रूप से चल रहा है
अवलोकन और प्रोजेक्ट का महत्व
ExTracker Elixir में बनाया गया एक नया BitTorrent ट्रैकर open source प्रोजेक्ट है, जो मौजूदा ट्रैकर्स की तुलना में निम्नलिखित फायदे देता है
- आधुनिक Erlang/Elixir runtime पर आधारित होने के कारण यह सभी multicore संसाधनों का उपयोग करने वाली high-performance architecture प्रदान करता है
- बड़े peer environment में (लगभग 10 लाख peers पर 200MB RAM) कम मेमोरी उपयोग सुनिश्चित करता है
- जटिल pre-configuration के बिना तुरंत काम करने वाला zero-setup environment देता है
- कई BitTorrent Enhancement Proposal(BEP) के समर्थन से यह नवीनतम tracker standards के साथ compatibility बनाए रखता है
मौजूदा ट्रैकर्स की तुलना में यह हल्का और अधिक efficient है, और Elixir की concurrency तथा distributed environment support का अधिकतम उपयोग करके समान श्रेणी के open source प्रोजेक्ट्स से अलग पहचान बनाता है
मुख्य सुविधाएँ (Features)
- उच्च प्रदर्शन: सभी CPU cores का उपयोग, in-memory storage का इस्तेमाल
- मेमोरी अनुकूलन: प्रति 10 लाख peers पर लगभग 200MB RAM उपयोग
- ज़ीरो-सेटअप: बिना किसी अतिरिक्त configuration के तुरंत चलाया जा सकता है
समर्थित BitTorrent Enhancement Proposals (BEP)
- BEP 0: BitTorrent protocol specification के अनुरूप
- BEP 15: UDP tracker protocol support
- BEP 23: compact peer list return
- BEP 7: IPv6 tracker extension
- BEP 24: external IP return
- BEP 41: UDP tracker protocol extension
- BEP 48: Scrape tracker extension (आंशिक समर्थन)
- BEP 52: BitTorrent protocol v2
- कुछ सुविधाएँ (BEP 27, 21, 31 आदि) अभी implemented नहीं हैं या योजना में हैं
- BEP 8 (tracker peer obfuscation) समर्थित नहीं है
अन्य सुविधाएँ
- HTTPS connection support
- disk backup (डेटा सुरक्षा को मजबूत करने के लिए)
- (योजना में) Infohash whitelist/blacklist management
- (योजना में) peer management: permissions, periodic cleanup, eviction आदि
- (योजना में) metrics/indicators management तथा GeoIP का उपयोग
- WebTorrent को support करने की कोई योजना नहीं है
यूज़र्स/डेवलपर्स के सुझाव Issue के रूप में स्वीकार किए जाते हैं
चलाने का तरीका
- source code को सीधे चलाना
- Erlang और Elixir आवश्यक
- repository clone करने के बाद configuration करके चलाएँ
- release तरीका
- आधिकारिक release उपलब्ध नहीं है, लेकिन direct build और deployment तरीका समर्थित है
- release files कॉपी करके configuration के बाद चलाएँ
- Docker
- आधिकारिक container image उपलब्ध है
docker-composeexample file प्रदान की गई है- container के अंदर configuration के लिए environment variables का उपयोग recommended है
कॉपीराइट और लाइसेंस
- Copyright (c) Dahrkael <dahrkael at outlook dot com>
- Apache License 2.0 के तहत वितरित
- लाइसेंस का विस्तृत विवरण repository की LICENSE file में देखें
1 टिप्पणियां
Hacker News प्रतिक्रियाएँ
OTP-केंद्रित डिज़ाइन की उम्मीद थी, लेकिन अफसोस रहा कि असली कोड लगभग procedural है और हर बार ETS या Application जैसी ETS-आधारित systems को सीधे हैंडल करता है
अगर लेखक Elixir या BEAM भाषाओं में service design सीखना चाहते हैं, तो James Edward Gray और Bruce Tate की "Designing Elixir Systems with OTP" और Lance Halvorsen की "Functional Web Development with Elixir, OTP, and Phoenix" को reference books के रूप में सुझाया गया
Torrent tracker आखिरकार एक specialized database ही है, इसलिए data को जितना तेज़ हो सके process करना सबसे महत्वपूर्ण लक्ष्य है
फिर भी सुझाई गई किताबें ज़रूर पढ़ने की इच्छा जताई
लगता है कि C++ developers को Go और Elixir पसंद आने की कोई खास वजह होती है
मैं खुद भी उसी श्रेणी में आता हूँ
बात यह कि performance से आकर्षित होकर C++ पसंद करने वाले लोग Go या Elixir की multithreaded performance से प्यार करने लगते हैं
इसे एक शानदार project बताया गया
Pattern matching ज़्यादातर branching और code complexity को कम कर देता है, जिससे code बहुत साफ़ हो जाता है
'Let it crash' philosophy की वजह से ज़्यादातर exception cases को नज़रअंदाज़ किया जा सकता है, और अगर वास्तविक समस्या हो भी जाए तो उसका असर एक ही client तक सीमित रहेगा, इस बात का भरोसा रहता है
10 साल से ज़्यादा समय में Elixir में deploy किए गए apps में कभी unexpected downtime का अनुभव नहीं हुआ
Maintenance और updates को छोड़कर हमेशा 100% uptime रहा, इस पर ज़ोर दिया गया
Clients से यह कहकर अपील करते हैं कि “Python या Go की जगह Elixir में बनी service न सिर्फ कभी मरती नहीं, बल्कि शानदार dashboards भी देती है”, और सच में बहुत से लोग तुरंत मान जाते हैं
इच्छा जताई कि काश Elixir की तरह struct, enum, और function signatures में pattern matching support करने वाली कोई systems language होती
मैंने भी BT(BitTorrent) सीखने के लिए Typescript में ऐसा ही कुछ बनाने की कोशिश की थी
उसके बाद Rust में फिर से implement किया और Rust भी सीखी
मेरे project का लिंक
मैंने database के लिए बस redis इस्तेमाल किया, लेकिन सामने वाले ने सब कुछ memory में रखा है, यह दिलचस्प लगा
ऐसा design करते समय किन चिंताओं, मज़ेदार फैसलों या समस्याओं का सामना हुआ, यह जानना चाहा
संदर्भ के लिए, redis-आधारित मेरे solution में कई बार announce करने पर peer हमेशा ठीक से randomize नहीं होते
हर peer data को अलग-अलग process से concurrently पढ़ा और लिखा जा सकता है, इसलिए contention और latency न्यूनतम रहती है
सिर्फ एक हिस्सा sequential है: जब कोई नया swarm पहली बार बनाया जाता है, लेकिन यह अक्सर नहीं होता, इसलिए ठीक है
अफसोस कि table से random rows चुनने के लिए native support नहीं है, इसलिए अभी पूरे swarm को लाकर manually random subset चुना जाता है
संबंधित code उदाहरण
यह एक शानदार project लगा
पहले मैंने भी Elixir में एक basic tracker बनाया था
मेरे code का लिंक
खासकर यह जानना चाहा कि इसे private tracker के रूप में क्यों implement किया गया
project launch के लिए बधाई
opentracker से तुलना में यह कैसे काम करता है, performance कैसी है, जैसी और details जाननी थीं
लेकिन extracker की असली ताकत तब दिखती है जब CPU cores की संख्या दो अंकों में पहुँचती है
अभी तक कोई proper benchmark नहीं किया गया है
बहुत बढ़िया बना हुआ project बताया
सरल सलाह दी गई कि IO.puts की जगह Logger इस्तेमाल करें, और OTel जोड़ने पर भी विचार करें
इस पर सहमति जताई
मत था कि built-in Logger और Telemetry application ही काफी हैं
बाद में opentelemetry या कुछ और भी Telemetry hooks पर आसानी से जोड़ा जा सकता है
Logger documentation
Telemetry documentation
पसंदीदा otel sink के बारे में पूछा गया, यानी metrics कहाँ भेजना पसंद करेंगे
Elixir के लिए गहरा लगाव जताया
अभी Elixir में एक शानदार notification engine बना रहे हैं
Elixir को सचमुच बेहतरीन बताया
पूछा गया कि यह private project है या OSS(open source)
Elixir ecosystem को बेहतर notification engine की ज़रूरत है
क्या किसी project को reference के रूप में देखा गया
development में कितना समय लगा
qbittorrent के मुकाबले कितने features काम करते हैं, यह जानना चाहा
किसी दूसरे project में इस्तेमाल के लिए tracker चाहिए था, लेकिन tracker development खुद ज़्यादा मज़ेदार लगने लगा, इसलिए जारी रखा
दूसरे trackers के code देखे थे, लेकिन ज़्यादातर या तो बहुत जटिल थे या बहुत सरल, इसलिए अच्छे reference नहीं बने
अब तक कई all-nighter programming sessions के साथ 3 महीने से development चल रहा है
यह qbittorrent जैसा client नहीं है, लेकिन आगे seedbox-oriented client project का भी idea है
समझाया गया कि tracker, torrent client नहीं होता
खुद इस्तेमाल करके देखा, लेकिन HTTPS ठीक से काम नहीं कर रहा था
साथ ही console में
04:43:20.160 [warning] invalid 'event' parameter: size: 6 value: "paused"
यह warning message लगातार दिखता रहा
फिर भी लगता है कि यह काम कर रहा था
HTTP stats भी देखना चाहते थे, लेकिन सिर्फ UDP stats ही दिखे
(उन्होंने UDP disable किया हुआ था)
"paused" event, BEP 21 का हिस्सा है, जिसका इस्तेमाल client tracker को यह बताने के लिए करता है कि download अभी पूरा नहीं हुआ है, लेकिन अब आगे डाउनलोड नहीं किया जाएगा
उदाहरण के लिए, जब user torrent की सिर्फ कुछ files चाहता हो
बताया गया कि उस project के readme में BEP 21 unsupported होने की बात लिखी है
HTTP-related Telemetry अभी ToDo list में है
Web server के लिए 3rd-party library इस्तेमाल हो रही है, इसलिए सही integration तरीका अभी सोचा जा रहा है
HTTPS इस्तेमाल करने के लिए :https_keyfile में valid certificate path देना होगा
फिलहाल HTTPS चाहिए तो tracker के आगे Caddy या Nginx लगाने की सिफारिश की गई
certbot integration की भी योजना है, लेकिन ज़्यादातर torrent peers UDP इस्तेमाल करते हैं, इसलिए इसकी priority कम है
इसे सचमुच शानदार project कहा गया
पूछा गया कि क्या Elixir को main language के रूप में इस्तेमाल करने का इरादा है
जवाब मिला कि Elixir प्रमुख विकल्पों में से एक है
व्यक्तिगत रूप से यक़ीन है कि इसमें C++ से कहीं ज़्यादा आनंद के साथ काम किया जा सकता है
खुद नहीं, लेकिन लगभग 9 साल 2 महीने से Elixir में काम करने और Rust व Golang भी जानने का परिचय दिया
पूछा कि क्या इस समय कोई hiring कर रहा है