अलर्ट सिस्टम आर्किटेक्चर


10

मैं एक ऐसी प्रणाली बनाना चाहता हूं, जो विभिन्न कार्यक्रमों के अलर्ट संदेशों को संभालती है और उन अलर्टों को ईमेल के माध्यम से डाउन-विंड उपभोक्ताओं को संसाधित कर सकती है। यह सब एक आंतरिक नेटवर्क पर निहित होगा।

मुझे लगता है कि मैं चाहता हूं कि बुनियादी वास्तुकला कुछ इस तरह दिखे:यहां छवि विवरण दर्ज करें

वर्तमान में मेरे पास मुख्य चिंता "संदेश हैंडलर" बिट है, जो कि मेरा "सॉर्ट-ऑफ-एपीआई" होगा। मैं इस प्रणाली के सभी घटकों को एपीआई के लिए डेटा भेजना चाहता हूं, जो सभी लिखता डेटाबेस को संभालता है। मुझे लगता है कि यह दृष्टिकोण आसान है क्योंकि यह सुरक्षा को सरल बनाता है, और मुझे एक एकल कार्यक्रम में बहुत अधिक जटिल DB प्रश्नों को शामिल करने की अनुमति देता है।

चिंता की बात यह है कि मैं चाहता हूं कि यह भाषा अज्ञेय हो - जिसका अर्थ है कि कोई भी कोड मेरे हैंडलर को संदेश भेजने में सक्षम होना चाहिए - जो उनकी व्याख्या करेगा। मुझे JSON फ्लैट फ़ाइलों के माध्यम से ऐसा करने की उम्मीद है - या प्रोग्राम के लिए अन्य कॉल के माध्यम से (डाउन-स्ट्रीम एप्लिकेशन को लचीलापन देते हुए)।

मेरा सवाल यह है कि-

क्या मुझे मैसेज हैंडलर से परेशान होना चाहिए - या यह सरलता को केवल डाउन-स्ट्रीम एप्लिकेशन, साथ ही दो अन्य घटकों (मैनेजमेंट कंसोल, और अलर्ट मैनेजर) तक सीधे डेटाबेस तक पहुंचने की अनुमति देगा?

इस तरह, वे जो भी अलर्ट चाहें सम्मिलित कर सकते हैं - जब तक कि INSERT को DB तालिका / s में मान्य है।

मैं एक सॉफ्टवेयर डिज़ाइनर नहीं हूँ, जो मुझे व्यापार के लिए प्रेरित करता है - मैं बस अपने खाली समय में एक प्रोजेक्ट करना चाहता हूँ।

जवाबों:


4

क्या आपने एएमक्यूपी (उन्नत संदेश कतारबद्ध प्रोटोकॉल: https://www.rabbitmq.com/protocol.html ) में देखा है?

RabbitMQ इस तरह से कुछ के लिए एक भयानक उपकरण है, मुझे लगता है (वहाँ दूसरों के रूप में अच्छी तरह से है, MSMQ, Azure / AWS सेवाओं, आदि)। न केवल आपको एक भाषा अज्ञेय संदेश हैंडलर (सरल "संदेश सर्वर w / json डेटा को संदेश भेजें) मिलता है, आप डाउनस्ट्रीम संदेश प्रसंस्करण को अलग करते हैं और इसे अच्छी तरह से पृथक करते हैं। एक संदेश सेवा चलाएं जो आपके द्वारा आवश्यक कतार से आने वाले संदेशों को संसाधित करती है और आपकी सूचनाओं को थूकती है।

एएमक्यूपी का उपयोग करना मुझे पसंद है उनमें से एक कारण यह है कि आप शुरू करते हैं जैसे आप अब कुछ घर-पके हुए समाधान के साथ हैं, लेकिन समय के बाद एहसास होता है कि आपको संदेशों को टाइप के आधार पर थोड़ा अलग ढंग से संभालने की आवश्यकता है, जिन्हें इसे करने की आवश्यकता है, आदि। , इसलिए आप अनिवार्य रूप से वैसे भी अपने स्वयं के एएमक्यूपी कार्यान्वयन का निर्माण करते हैं।

यदि आपको किसी संदेश को 5 अलग-अलग प्राप्तकर्ता के पास जाना है तो आप क्या करेंगे? क्या होगा यदि आपके पास एक संदेश है जिसे कई प्रोसेसर में घुमाया जाना चाहिए (लंबे समय तक चलने वाले कार्यों और एक साथ प्रोसेसर की X संख्या होने पर, जहां आप एक विशिष्ट प्रकार के संदेशों को राउंड-रॉबिन कर सकते हैं)। क्या होगा यदि संदेश एक व्यक्ति को जाना चाहिए, लेकिन यदि वे उपलब्ध नहीं हैं / ऑनलाइन हैं, तो इसे दूसरे पर जाना चाहिए? AMQP पहले से ही बहुत अच्छी श्रेणीकरण, कतारों, चैनलों, टिकाऊ दृढ़ता, सभी प्रकार की सुविधाओं के साथ इस (काफी अच्छी तरह से) को संभालता है।

यहां उन परिदृश्यों का एक बुनियादी अवलोकन है जो इसे संभाल सकते हैं (ध्यान दें कि यह RabbitMQ के लिए विशिष्ट नहीं है: यह एक AMQP चीज है, लेकिन RabbitMQ इसे अच्छी तरह से समझाने के लिए होता है) - https://www.rabbitmq.com/getstarted.html


मैंने पहले अन्य सॉफ्टवेयर के लिए RabbitMQ को लागू देखा है - हमेशा दिलचस्प लग रहा था (यदि थोड़ा जटिल नहीं है)। मैं इसे देख लूंगा! मुझे लगता है कि मैं पहली बार में इससे दूर भाग गया क्योंकि मुझे डेटा भेजने वालों की पेशकश करने के लिए बहुत लचीलापन चाहिए था। इसलिए यदि किसी मौजूदा Powershell या Javascript पर REST कॉल को लागू करना कठिन होगा, या VB6 ऐप के लिए स्वर्ग की मनाही होगी, तो वे आमतौर पर एक फ्लैट फ़ाइल के लिए बहुत आसानी से आउटपुट कर सकते हैं। लेकिन बहुत सारे संदेश को संभालने में सक्षम होने के कारण समय और प्रयास सुनिश्चित होते हैं!
क्रिस्टोफर

2
जब मैं पहली बार RabbitMQ में आया, तो मैं थोड़ा भयभीत था, लेकिन अध्ययन के सप्ताहांत के बाद यह वाह की
jlear

मुझे AMQP का विचार पसंद है, लेकिन जिस तरह से RabbitMQ क्लाइंट API को प्रत्येक भाषा के लिए हैंडल करता है, वह भाषा-अज्ञेय प्रोटोकॉल का उपयोग करने के पूरे उद्देश्य को हरा देता है। क्या होगा यदि मेरे पास एक क्लाइंट है जो एक ऐसी भाषा चला रहा है जिसके पास समर्थित API नहीं है? इन विशेषताओं में से कुछ वास्तव में बहुत अच्छे हैं ... लेकिन जब मुझे करने की आवश्यकता होती है तब ओवरकिल करें, बिंदु A से बिंदु B तक 1 संदेश प्राप्त करें, जिसमें कुछ भी नहीं है।
क्रिस्टोफर

मैं इसके ऊपर एक क्विक रेस्ट एपीआई को थप्पड़ मारने के बारे में सोच रहा था, जो आपके अज्ञेय की चिंता को कवर करेगा, लेकिन इस बात पर सहमत था कि अगर आपको एएमक्यूपी द्वारा प्रदान की जाने वाली किसी भी सुविधा की आवश्यकता नहीं होगी, तो यह ओवरकिल होगा (माफी अगर मैंने आपको एक जंगली चलाया है इस पर हंस पीछा ...)
jleach

हाँ - इसे कवर करने के लिए एक त्वरित REST API काम करेगा .. लेकिन तब मैं भी अपने खुद का REST एपीआई बना सकता हूँ। और कोई माफी की आवश्यकता नहीं है - यह एक महान तकनीक है और सीखना प्रगति के लिए आवश्यक है :) अगर अभी नहीं - मुझे यकीन है कि यह भविष्य में काम आएगा।
क्रिस्टोफर

3

बहुत अच्छी तरह से तैयार सवाल!

इसलिए- सभी वास्तु निर्णयों में व्यापार शामिल हैं। यदि आप ट्रेडऑफ की चर्चा के लिए उत्सुक हैं, तो शायद उस दिशा में अपने प्रश्न को संपादित करें। इसके बजाय, चूंकि सवाल सिर्फ एक स्थिति के लिए पूछता है, मैं MessageHandler के पक्ष में बहस करने का पक्ष लूंगा। मैं एक कदम आगे बढ़ाने के लिए सुझाव दूंगा, जिसमें एक डेटाबेस शामिल नहीं है- कम से कम SQL डेटाबेस नहीं, कम से कम शुरू नहीं करने के लिए। सिर्फ MessageHandler ने JSON को फाइल सिस्टम में सेव किया है, निर्देशिका-प्रति-घंटे-के-प्राप्त अलर्ट (मात्रा के आधार पर), और निश्चित रूप से एपीआई के पास है, जब अलर्ट प्रबंधक द्वारा पिछले 2 से अधिक निर्देशिकाओं को देखा गया है यह तय करने के लिए कि क्या ईमेल वितरित करना है (प्राथमिकता के आधार पर)।

इस समस्या में चबाने के लिए एक टन अच्छा सामान है, और प्रारंभिक अवस्था में एक डेटाबेस को चित्र से बाहर रखने से बहुत अधिक शोर और अनावश्यक समस्या का समाधान हो जाएगा। बेशक, शायद आपके पास संबंधपरक डेटा मॉडल बनाने और SQL लिखने का सपना है। उस स्थिति में, यह उत्तर पूरी तरह से गलत है। लेकिन आम तौर पर यहां तक ​​कि सबसे चुस्त डेटाबेस बोलना भयानक अनुप्रयोग प्लेटफॉर्म हैं, और वे केवल सिस्टम में शामिल होते हैं क्योंकि वे स्थायित्व और अनुक्रमित क्वेरी के विशेषज्ञ हैं।

सौभाग्य!


1
मैं सिर्फ एक रिलेशनल डेटाबेस का उपयोग करने के बारे में ईमेल समूहों, सदस्यों, और विभिन्न अन्य अच्छी चीजों को नियंत्रित करने में सक्षम होने की क्षमता को पसंद करता हूं। डेटाबेस डिजाइन वास्तव में है जो मैंने प्रोजेक्ट में शुरू किया था - इसलिए मैंने इसे हटाने के बारे में कभी सोचा भी नहीं था। उस इनपुट और देखने के लिए धन्यवाद !!
क्रिस्टोफर

मुझे पता था! :) यह समझना कि आप वास्तव में किसी चीज़ से बाहर निकलना चाहते हैं, सबसे महत्वपूर्ण बात है। चीयर्स!
जोनाह बेंटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.