परिचय
- 2017 में, Discord ने MongoDB से Cassandra में डेटाबेस माइग्रेट करके संदेश स्टोर करने का तरीका साझा किया
- Cassandra स्केलेबिलिटी, fault tolerance और मेंटेनेंस की सहजता प्रदान करता है, लेकिन समय के साथ परफ़ॉर्मेंस समस्याएँ और मेंटेनेंस का बोझ बढ़ता गया
- 2022 में, Discord ने डेटाबेस को फिर से ScyllaDB पर माइग्रेट किया
Cassandra में समस्याएँ
- संदेश स्टोरेज संरचना: संदेशों को
channel_id और bucket के आधार पर partition करके स्टोर किया जाता था
- हॉट partition समस्या: किसी खास चैनल पर ट्रैफ़िक केंद्रित होने पर पूरे डेटाबेस की latency बढ़ जाती थी
- मेंटेनेंस समस्या: SSTable compaction और JVM garbage collection समस्याओं के कारण परफ़ॉर्मेंस गिरती थी
आर्किटेक्चर बदलाव
- ScyllaDB का अपनाना: C++ में लिखा गया Cassandra-compatible डेटाबेस, जो garbage collection समस्या को हल करता है
- डेटा सर्विस: API और डेटाबेस के बीच एक मध्यवर्ती सर्विस रखकर ट्रैफ़िक को नियंत्रित किया गया और परफ़ॉर्मेंस सुधारी गई
- Rust का उपयोग: सुरक्षित और तेज concurrent कोड लिखने के लिए Rust का उपयोग किया गया
डेटा सर्विस
- रिक्वेस्ट मर्जिंग: जब कई उपयोगकर्ता एक ही डेटा का अनुरोध करते हैं, तो डेटाबेस से केवल एक बार query की जाती है और परिणाम साझा किया जाता है
- consistent hashing आधारित routing: एक ही चैनल के अनुरोधों को उसी सर्विस instance तक route किया जाता है, जिससे डेटाबेस लोड कम होता है
बड़े पैमाने का माइग्रेशन
- ScyllaDB क्लस्टर सेटअप: local SSD और RAID का उपयोग करके तेज और टिकाऊ स्टोरेज बनाया गया
- डेटा माइग्रेशन: Rust में लिखे गए data migrator का उपयोग करके डेटा को तेज़ी से माइग्रेट किया गया
- स्वचालित डेटा वेरिफ़िकेशन: दोनों डेटाबेस को थोड़ी मात्रा में read requests भेजकर परिणामों की तुलना की गई, ताकि डेटा अखंडता की पुष्टि हो सके
कुछ महीनों बाद
- परफ़ॉर्मेंस सुधार: Cassandra की तुलना में कम nodes के साथ बेहतर परफ़ॉर्मेंस मिली
- latency में कमी: संदेश retrieval और insertion परफ़ॉर्मेंस में बड़ा सुधार हुआ
- नए प्रोडक्ट use cases: परफ़ॉर्मेंस सुधार की बदौलत नए फ़ीचर्स लागू करना संभव हुआ
# GN⁺ का सार
- Discord ने Cassandra की परफ़ॉर्मेंस समस्याओं को हल करने के लिए डेटाबेस को ScyllaDB पर माइग्रेट किया
- Rust में लिखी डेटा सर्विस और ScyllaDB के जरिए ट्रैफ़िक को प्रभावी ढंग से प्रबंधित किया गया और परफ़ॉर्मेंस सुधारी गई
- डेटा माइग्रेशन प्रक्रिया में तेज और कुशल तरीकों का उपयोग करके बिना downtime के माइग्रेशन पूरा किया गया
- यह लेख बड़े पैमाने के डेटाबेस माइग्रेशन की चुनौतियों और समाधानों पर केंद्रित है, इसलिए बड़े सिस्टम संचालन में रुचि रखने वालों के लिए उपयोगी है
1 टिप्पणियां
Hacker News राय
ब्लॉग पोस्ट GC को दोष देती है, लेकिन असल में समस्या Cassandra के उपयोग के तरीके या Cassandra द्वारा बड़े पैमाने पर deletion को संभालने के तरीके में है
अगर distributed chat protocol का इस्तेमाल किया गया होता, तो यह समस्या नहीं होती
ScyllaDB के सह-संस्थापक की अतिरिक्त राय
tombstone_gc=repairmode हैservice layer, Varnish Cache की याद दिलाती है
पुराने संदेशों को delete करना लगभग असंभव है
यह बहुत अच्छी तरह लिखा गया लेख है
Discord के message storage nodes की संख्या उम्मीद से कम है
data store करना और data mining करना अलग समस्याएँ हैं
ScyllaDB टीम ने performance improvements को प्राथमिकता दी और reverse queries को implement किया
"How Discord Stores Trillions of Messages" पर चर्चा