650,000,000 checkboxes को check करना: अप्रत्याशित लोकप्रियता से निपटना
26 जून 2024 को One Million Checkboxes (OMCB) वेबसाइट लॉन्च की गई
- 10 लाख global checkboxes वाली साइट, जहाँ किसी checkbox को check करने पर वह सभी users को तुरंत दिखता था
- लॉन्च के सिर्फ 30 मिनट में, हज़ारों users ने लाखों checkboxes check कर दिए
- Hacker News, /r/InternetIsBeautiful, Mastodon, Twitter आदि से ट्रैफिक आया
- Washington Post और New York Times में भी इसका ज़िक्र हुआ
- पहले दिन 5 करोड़ से अधिक checkboxes check किए गए
- 2 हफ़्ते बाद साइट बंद होने से पहले 65 करोड़ से अधिक checkboxes check किए जा चुके थे
मूल architecture
- checkbox state को 10 लाख bits (125KB) में store किया गया था
- client bitset का उपयोग करके checkboxes render करता था और server को check state बताता था
- server Redis का उपयोग करके bits update करता था और सभी clients को broadcast करता था
- nginx के जरिए static content serve किया जाता था, और Flask server bitset state तथा WebSocket connections को handle करता था
- Redis state storage और message queue, दोनों की भूमिका निभाता था
scaling के सिद्धांत
- cost limit: serverless पर scale करने से दिवालिया न हो जाएँ, इसके लिए लागत का गणित पहले से निकाला गया
- short-term solutions को स्वीकार करना: यह मानकर तेज़ समाधान चुने गए कि साइट की लोकप्रियता अस्थायी होगी
- simple और self-hosted tech का उपयोग: केवल वही तकनीक जो खुद चला सकें और debug कर सकें
- fun को प्राथमिकता: पैसे से ज़्यादा मज़े को महत्व दिया गया
- global state बनाए रखना: ताकि सभी users बदलाव तुरंत देख सकें
पहला दिन: विस्फोटक लोकप्रियता
- 30 मिनट में server load तेज़ी से बढ़ गया
- load बाँटने के लिए अतिरिक्त servers spin up किए गए
- Redis connection issues हल करने के लिए batch updates लागू किए गए
- Digital Ocean के managed Redis instance को upgrade किया गया
रातभर कोई योजना नहीं थी
- ITP camp में face recognition Pacman game दिखाने के लिए योजना बनाई गई
- iPad साथ लाकर वहीं से servers spin up किए गए
- server naming convention को विकसित करते हुए 8 worker VMs चलाई गईं
- load कम करने के लिए Flask processes की संख्या घटाई गई और update batch size बढ़ाया गया
bandwidth समस्या
- Digital Ocean की bandwidth pricing का ध्यान नहीं रखा गया था
- state snapshot की frequency घटाई गई और update size कम किया गया
tcutility का उपयोग करके प्रति सेकंड भेजे जाने वाले data की मात्रा सीमित की गई
दूसरा दिन: वृद्धि जारी रही
- input validation ठीक से न होने के कारण साइट डाउन हो गई
- load बाँटने के लिए Redis replicas जोड़े गए
- Flask processes बार-बार crash हो रहे थे, इसलिए auto-restart script लिखी गई
पुराने updates की समस्या
- clients पुराने updates apply कर रहे थे, जिससे state गलत दिख रही थी
- update order सुनिश्चित करने के लिए timestamps जोड़े गए
Go में rewrite
- एक performance engineer दोस्त के साथ backend को Go में rewrite किया गया
- performance में बड़ा सुधार हुआ
- CloudFlare के माध्यम से DDOS attacks को रोका गया
साइट बंद करना
- ऐसा बदला गया कि अगर checkboxes को तेज़ी से uncheck न किया जाए तो वे freeze हो जाएँ
- freeze state को manage करने के लिए Redis का उपयोग किया गया
- 2 हफ़्ते बाद साइट बंद कर दी गई
सीखी गई बातें
- यह दूसरी बार था जब किसी 'असल' backend वाले server को public internet पर deploy किया गया
- short-term solutions चुनना सही फैसला साबित हुआ
- Redis और nginx की ताकत फिर से साबित हुई
- यह भी स्पष्ट हुआ कि लोग anonymous interaction वाली साइटों के लिए उत्सुक हैं
GN⁺ का सार
- यह लेख वेबसाइट की अप्रत्याशित लोकप्रियता के कारण पैदा हुई technical समस्याओं और उनके समाधानों पर है
- यह दिखाता है कि Redis और nginx पर आधारित साधारण architecture भी बड़े पैमाने के traffic को संभाल सकता है
- इसमें बताया गया है कि short-term solutions के जरिए समस्याओं को तेज़ी से हल करके साइट को stable कैसे रखा गया
- Go में rewrite और CloudFlare के जरिए DDOS defense जैसे कई technical challenges भी शामिल हैं
- इसी तरह की functionality वाले projects में Reddit का /r/Place जैसा large-scale collaborative project शामिल है
1 टिप्पणियां
Hacker News राय
इससे बहुत-सी सीख और ऐतिहासिक जानकारी मिली
शानदार लेख था! वेबसाइट के लिए भी बधाई, लेकिन लेख खुद ही वह हिस्सा है जिस पर सबसे ज़्यादा गर्व होना चाहिए
साइट को दो दिनों में बनाना एक अच्छा फैसला था
हाल का संबंधित प्रोजेक्ट:
मज़ेदार प्रोजेक्ट है
शानदार लेख था - यह जानने की जिज्ञासा है कि इसकी लागत कितनी आई
यह विश्वास पक्का हुआ कि लोग सीमित anonymous interaction की चाह रखते हैं
backend में नए व्यक्ति के रूप में यह जानने की जिज्ञासा है कि इस प्रोजेक्ट के लिए कोई सरल alternative architecture है या नहीं
बढ़िया!
जिज्ञासा है कि क्या गेम अभी भी live है