2 पॉइंट द्वारा GN⁺ 2024-09-29 | 1 टिप्पणियां | WhatsApp पर शेयर करें

परिचय

  • 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 टिप्पणियां

 
GN⁺ 2024-09-29
Hacker News राय
  • ब्लॉग पोस्ट GC को दोष देती है, लेकिन असल में समस्या Cassandra के उपयोग के तरीके या Cassandra द्वारा बड़े पैमाने पर deletion को संभालने के तरीके में है

    • "जब API के ज़रिए लाखों संदेश delete किए गए, तो Cassandra को लाखों tombstone स्कैन करने पड़े"
    • GC tuning का ज़िक्र है, लेकिन वास्तव में वे Cassandra और JVM के पुराने versions का उपयोग कर रहे थे
  • अगर distributed chat protocol का इस्तेमाल किया गया होता, तो यह समस्या नहीं होती

    • IRC, Matrix, XMPP जैसे open specs और कई implementations मौजूद हैं
    • यह समझना मुश्किल है कि Discord ने बाज़ार पर कैसे कब्ज़ा किया
  • ScyllaDB के सह-संस्थापक की अतिरिक्त राय

    • Discord, Cassandra के साथ repair पूरा नहीं कर सका, लेकिन Scylla में यह संभव है
    • Scylla में Cassandra के साथ कई समानताएँ हैं, लेकिन यह अपने CPU और IO schedulers के ज़रिए queries को प्राथमिकता देता है
    • Scylla में नया tombstone_gc=repair mode है
    • Scylla की नई Raft और tablet architecture हाल ही में जारी की गई है
  • service layer, Varnish Cache की याद दिलाती है

    • caching का उल्लेख नहीं किया गया, लेकिन यह Varnish के "grace mode" जैसा है
    • consistent hashing को बार-बार सामने आते देखना अच्छा लगता है
  • पुराने संदेशों को delete करना लगभग असंभव है

    • यह privacy के लिहाज़ से एक बुरा सपना है, और सोचने वाली बात है कि EU हस्तक्षेप क्यों नहीं कर रहा
  • यह बहुत अच्छी तरह लिखा गया लेख है

    • Cassandra से Scylla पर जाना समाधान का एक हिस्सा था
  • Discord के message storage nodes की संख्या उम्मीद से कम है

    • अधिक जटिल architecture की उम्मीद थी, लेकिन वास्तव में सिर्फ 200 nodes का उपयोग किया गया
    • लगता है कि modern cloud architectures में ज़रूरत से ज़्यादा engineering की जाती है
  • data store करना और data mining करना अलग समस्याएँ हैं

  • ScyllaDB टीम ने performance improvements को प्राथमिकता दी और reverse queries को implement किया

    • जानना दिलचस्प होगा कि ScyllaDB का उपयोग करने से पहले कितना खर्च हो रहा था
  • "How Discord Stores Trillions of Messages" पर चर्चा

    • मार्च 2023 में 10 comments थे