डीएचएच ने सिर्फ "सिटाडेल" शब्द गढ़ा है, जो अंततः हमें यह संदर्भित करने का एक शानदार तरीका देता है कि हम ऐपसिग्नल पर तकनीक से कैसे संपर्क करते हैं। हमने कहा, "अरे, यह हम हैं! हमारी चीज़ का अब एक नाम है"।
मैजेस्टिक मोनोलिथ के अलावा, किसी को द सिटाडेल:ए सिंगल मैजेस्टिक का पैटर्न लिखना चाहिए मोनोलिथ अत्यधिक विशिष्ट और भिन्न आवश्यकताओं के लिए कुछ सहायक आउटपोस्ट ऐप्स के साथ, ऐप के अधिकांश भाग को कैप्चर करता है।
- डीएचएच (@dhh) 7 अप्रैल, 2020
यह समझाने के लिए कि ऐपसिग्नल सिटाडेल पैटर्न का उपयोग कैसे करता है, हम थोड़ा साझा करेंगे कि हमारा सिस्टम कैसे काम करता है। ऐपसिग्नल एक निगरानी उत्पाद है जिसमें एक उपयोगकर्ता-सामना करने वाला एप्लिकेशन और एक एपीआई है जो निगरानी एजेंट डेटा भेजता है। इस डेटा को तब संसाधित किया जाता है और ग्राफ़ और अंतर्दृष्टि में बदल दिया जाता है।
मोनोलिथ
हमारे ग्राहक जिस एप्लिकेशन के साथ इंटरैक्ट करते हैं, वह एक मोनोलिथिक रेल ऐप है, जिसमें रिएक्ट में फ्रंट-एंड के हिस्से लिखे गए हैं। बैकएंड पूरी तरह से रूबी में लिखा गया है और कुछ डेटाबेस से बात करता है (हम अलग-अलग ग्राहकों से डेटा को अलग-अलग समूहों में स्केलिंग कारणों से अलग करते हैं)। यह रेल ऐप बाहरी सेवाओं को अलर्ट भेजने जैसे अन्य कार्यों को भी संभालता है।
जब हमने यह रेल ऐप शुरू किया तो हमारे मॉनिटरिंग एजेंट से आने वाले डेटा को भी संसाधित किया, हमने देखा कि डेटा अंतर्ग्रहण एक बाधा बन जाएगा। इसलिए हमने एक सबडोमेन पर चलने वाले सिनात्रा ऐप का इस्तेमाल किया जो डेटा को निगला करता था और साइडकीक नौकरियां बनाता था जिन्हें रेल ऐप द्वारा संसाधित किया गया था।
बढ़ता दर्द
इस वास्तुकला ने वर्षों तक अच्छा काम किया। जैसे-जैसे हमारा व्यवसाय बढ़ता गया, यह स्पष्ट हो गया कि एजेंटों से आने वाले डेटा को संसाधित करने का विशिष्ट कार्य विशेष उपचार की आवश्यकता होने वाला था। जब आप अरबों और अरबों अनुरोधों की निगरानी कर रहे होते हैं, तो आप कठिन सीमाओं में चले जाते हैं। मुख्य सीमित कारक इतना नहीं था कि रूबी धीमी है (हम सभी जानते हैं कि यह 😉 नहीं है), लेकिन जिस तरह से हमने चीजों को आर्किटेक्ट किया था, वह हमारे डेटाबेस में बहुत अधिक लॉकिंग का कारण बना।
एक चौकी
हमने कई संभावनाओं को देखा और फिर तय किया कि काफ्का हमारी स्थिति के लिए सबसे उपयुक्त है। हमें रस्ट के साथ कुछ अनुभव था और हमने सोचा कि इसकी गति और विश्वसनीयता इस प्रणाली के लिए बहुत उपयुक्त होगी। हमने कतार और भंडारण प्रणाली के संयोजन के रूप में काफ्का का उपयोग करते हुए, रस्ट में अपने डेटा अंतर्ग्रहण और प्रसंस्करण प्रणाली को फिर से लिखा।
हमने रेल ऐप के आने वाले डेटा प्रोसेसिंग हिस्से को केवल इस चौकी सेवा में स्थानांतरित कर दिया है। बाकी सिस्टम एक मोनोलिथिक ऐप के रूप में अच्छी तरह से काम करते हैं। हम इसे गहराई से समझते हैं, और हम चीजों को सरल रखना पसंद करते हैं। मोनोलिथ अभी भी अधिकांश तर्कों को संभालता है और काफ्का के साथ भारी बातचीत करता है। हमारे मोनोलिथ को रखने की हमारी इच्छा ने हमें काफ्का रत्न लिखने के लिए प्रेरित किया, ताकि मुख्य ऐप आसानी से चौकी के साथ संवाद कर सके।
यदि आप इस बारे में अधिक जानना चाहते हैं कि ऐपसिग्नल में काफ्का कैसे काम करता है, तो मैंने इस बारे में दी गई रेल्सकॉन्फ वार्ता देखें।
गढ़ में जीवन
यह हमें वर्तमान स्थिति में लाता है जहां हम अपने गढ़ में बहुत खुश हैं। जैसा कि डीएचएच ने कहा:
<ब्लॉककोट>एक सिंगल मैजेस्टिक मोनोलिथ अत्यधिक विशिष्ट और भिन्न आवश्यकताओं के लिए कुछ सहायक आउटपोस्ट ऐप्स के साथ ऐप के अधिकांश भाग को कैप्चर करता है।
हमारे मामले में, हमारी अत्यधिक विशिष्ट आवश्यकताओं के लिए हमारे पास एक एकल चौकी सेवा है। अगर इस साल RailsConf होता, तो हम DHH को इसे नाम देने के लिए प्रशंसा के रूप में कुछ अतिरिक्त stroopwafels देते।