- एक प्रयोगात्मक वेबसाइट जो किसी भी व्यक्ति को एक साथ नियंत्रित किए जा सकने वाले 10 लाख शतरंज बोर्ड देती है: One Million Chessboards
- एक व्यक्ति द्वारा मोहरा चलाने पर वह सभी उपयोगकर्ताओं को रियल-टाइम में दिखता है, और टर्न के बिना बोर्डों के बीच स्वतंत्र रूप से जाना भी संभव है
- सभी शतरंज बोर्ड की स्थिति 64 मिलियन
uint64 से बने 2D मेमोरी ऐरे में संग्रहीत है, और सर्वर केवल एक है
- यह Go में लिखा गया पहला प्रोजेक्ट है, और सिंक WebSocket-आधारित zstd-compressed Protobuf messages से होता है
- optimistic apply + rollback शैली के क्लाइंट लॉजिक को लागू करने में ही एक सप्ताह लग गया, इसलिए यह तकनीकी रूप से काफी चुनौतीपूर्ण प्रोजेक्ट था
One Million Chessboards
- One Million Chessboards 10 लाख शतरंज बोर्ड देता है, और कोई भी व्यक्ति एक साथ मोहरे चला सकता है
- यह turn-based नहीं है; एक व्यक्ति मोहरा चलाए तो वह तुरंत सभी उपयोगकर्ताओं को दिखता है
- बोर्डों के बीच आना-जाना भी पूरी तरह स्वतंत्र है, जिससे एक बिल्कुल अलग तरह का अनुभव मिलता है
पृष्ठभूमि
- यह पहले बनाए गए One Million Checkboxes प्रोजेक्ट के बाद का एक प्रयोगात्मक काम है, जिसका लक्ष्य और बड़े पैमाने व कठिन चुनौतियों को लेना था
- निर्माता ने इस प्रोजेक्ट में बहुत समय लगाया, और उम्मीद की कि लोग इसे मज़े से उपयोग करेंगे
तकनीकी कार्यान्वयन
- यह प्रोजेक्ट हाल के कामों में सबसे तकनीकी रूप से चुनौतीपूर्ण था
- मुख्य तकनीकी बिंदु:
- scalability को ध्यान में रखकर बनाया गया डिज़ाइन
- एक ही सर्वर पर चलता है
- पूरे शतरंज बोर्डों को मेमोरी में 2D
uint64 ऐरे के रूप में रखा गया है (कुल 64 मिलियन सेल)
- Go में लिखा गया backend, और यह निर्माता का पहला Go प्रोजेक्ट है
- एक single writer thread + कई reader threads, और access control के लिए mutex
- क्लाइंट optimistic updates लागू करता है, और सर्वर से टकराव वाले updates आने पर rollback करता है
- zstd-compressed protobuf messages को WebSocket के जरिए क्लाइंट तक भेजा जाता है
- क्लाइंट को 50x50 zones में बाँटा गया है, और केवल पड़ोसी zones की चालें प्राप्त होती हैं
- global data (statistics, minimap आदि) को HTTP GET polling से लिया जाता है, और Cloudflare cache का उपयोग होता है
क्लाइंट के काम करने के तरीके का मुख्य हिस्सा
- optimistic update with rollback लगभग 1,600 lines of code में बना है, और इसे विकसित करने में 7 दिन पूरी तरह लगाए गए
> “हाल के समय में यह सबसे कठिन समस्या थी जिससे मैं जूझा।”
लॉन्च के बाद की प्रतिक्रिया
- लॉन्च के 8 घंटे के भीतर 13 लाख से अधिक piece moves दर्ज हुए, और लगभग 400 concurrent users थे
- सर्वर पर लोड नज़रअंदाज़ करने लायक रूप से कम था
वर्तमान आँकड़े
- ऑनलाइन खिलाड़ियों की संख्या: 199,276
- कुल चालें: 5,238,978
- मोहरों की कुल संख्या: 1,490,061,914
- किंग्स की संख्या: 9,035,389
3 टिप्पणियां
अगर इसका साइज़ थोड़ा कम किया होता तो कैसा रहता... किसी से मिलने की संभावना बहुत कम है हाहा, सिसकी सिसकी
मैंने इसे टेस्ट किया, और यह काफ़ी दिलचस्प है कि अभी बोर्ड की सीमा से बाहर जाकर काले की तरफ़ के नज़रिए से नीचे वाले शतरंज बोर्ड पर जाया जा सकता है।
Hacker News की राय
नमस्ते! यह मैंने बनाया है। ब्लॉग में पर्याप्त विवरण न होने के लिए माफ़ी। आर्किटेक्चर के बारे में कोई सवाल हो तो खुशी से जवाब दूँगा। मैं इस प्रोजेक्ट को ऐसा बनाने पर केंद्रित था कि यह single process में हज़ारों concurrent clients को संभाल सके। golang इस काम के लिए बहुत उपयुक्त था
यह गेम दिलचस्प हो गया है। उदाहरण के लिए, लोगों ने पता लगा लिया कि अगर कोई एक बोर्ड को बाहरी किनारों पर दो खानों की गहराई तक भर दे, तो वह अजेय हो जाता है। emergent gameplay देखना अच्छा लगता है। यही eieio के प्रोजेक्ट की प्रतिभा है। ऊपर से यह सरल दिखता है, लेकिन बड़े पैमाने पर दिलचस्प संभावनाएँ सामने आती हैं
किसी ने राजा को लगभग 40 rook से घेर दिया था। मैं knight के साथ अंदर घुसा, तो उसने तुरंत मुझे king से मार लिया और दूसरे rook से उस खाली जगह को बंद कर दिया। मज़ेदार था
बोर्डों के बीच मूव करना संभव है, लेकिन capture करना संभव नहीं है। अजीब बात यह है कि मूव प्रोजेक्ट नहीं होते। उदाहरण के लिए, queen की नीली लाइन बोर्ड की सीमा के पार सही दिशा दिखाती है, लेकिन दूसरे बोर्ड के किसी भी piece पर रुक जाती है। scale के अभ्यास के रूप में बढ़िया काम
एक error आया। Uncaught TypeError: null ke attributes ko padh nahi sakta
मुझे लगा था कि हर बोर्ड का अपना "turn" होगा। यह उम्मीद नहीं थी कि मैं कोई random board चुनकर black queen को आज़ाद कर दूँ और फिर, जब तक प्रतिद्वंद्वी कुछ न कर सके, सभी white pieces साफ़ कर दूँ
कोई चीटर दूसरी side के रंग से खेल रहा है। लगा था कि कल देखा था, लेकिन आज पक्का देखा। शायद बदले की भावना से इस्तेमाल किया गया। जैसे ही black fortress टूटा, सबसे नज़दीकी white fortress के pieces सबसे खराब positions में चले गए
मेरा अनुमान है कि यह bot war में बदल जाएगा। उदाहरण के लिए, pawn को आगे बढ़ाने वाला एक code snippet है
लोगों का पीछा करना बहुत मज़ेदार है। सिर्फ़ chess की वजह से नहीं, वैसे भी मज़ा आता है
Android phone पर Firefox में बढ़िया चलता है। बहुत अच्छा काम