घटना-संचालित वास्तुकला

From Vigyanwiki
Revision as of 21:57, 7 March 2023 by alpha>Rajkumar

घटना-संचालित वास्तुकला (EDA) एक सॉफ़्टवेयर वास्तुशिल्प प्रतिमान है जो घटना (कंप्यूटिंग) के उत्पादन, पहचान, खपत और प्रतिक्रिया को बढ़ावा देता है।

अवलोकन

एक घटना को स्थिति (कंप्यूटर विज्ञान) में एक महत्वपूर्ण परिवर्तन के रूप में परिभाषित किया जा सकता है।[1] उदाहरण के लिए, जब कोई उपभोक्ता कार खरीदता है, तो कार की स्थिति बिक्री के लिए से बेची गई में परिवर्तित हो जाती है। एक कार विक्रेता की प्रणाली वास्तुकला इस स्थिति परिवर्तन को एक घटना के रूप में मान सकता है जिसकी घटना को वास्तुकला के अन्दर अन्य अनुप्रयोगों के लिए जाना जा सकता है। एक औपचारिक दृष्टिकोण से, जो उत्पादित, प्रकाशित, प्रचारित, पता लगाया या उपभोग किया जाता है, वह एक (सामान्यतः अतुल्यकालिक) संदेश होता है, जिसे घटना अधिसूचना कहा जाता है, न कि स्वयं घटना, जो स्थिति परिवर्तन है जो संदेश उत्सर्जन को ट्रिगर करता है। घटनाएँ यात्रा नहीं करतीं, वे बस घटित होती हैं।चूंकि, घटना शब्द का उपयोग अधिकांशतः अधिसूचना संदेश को निरूपित करने के लिए लाक्षणिक रूप का उपयोग किया जाता है, जिससे कुछ भ्रम हो सकता है। यह घटना-संचालित वास्तुकला के कारण अधिकांशतः 'संदेश-संचालित वास्तुकला' के ऊपर डिज़ाइन किया जा रहा है, जहां इस तरह के संचार स्वरूप में प्रत्येक संचार को कैसे संभाला जाना चाहिए, यह अंतर करने के लिए इनपुट में से एक को टेक्स्ट-ओनली, संदेश की आवश्यकता होती है।

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

एक घटना-संचालित वास्तुकला के आसपास बिल्डिंग प्रणाली वितरित कंप्यूटिंग मॉडल में क्षैतिज मापनीयता को सरल करता है और उन्हें विफलता के प्रति अधिक लचीला बनाता है। ऐसा इसलिए है क्योंकि उच्च-उपलब्धता के लिए कई समांतर स्नैपशॉट में एप्लिकेशन स्थिति की प्रतिलिपि बनाई जा सकती है।[2] नई घटनाओं को कहीं भी शुरू किया जा सकता है, लेकिन इससे भी महत्वपूर्ण बात यह है कि डेटा स्टोर के नेटवर्क में आने पर प्रत्येक को अपडेट करते हुए प्रसारित किया जाता है। अतिरिक्त नोड्स जोड़ना भी तुच्छ हो जाता है: आप बस आवेदन की स्थिति की एक प्रति ले सकते हैं, इसे घटनाओं की एक धारा खिला सकते हैं और इसके साथ चल सकते हैं।[3]

घटना-संचालित वास्तुकला सेवा-उन्मुख वास्तुकला (SOA) का पूरक हो सकता है क्योंकि सेवाओं को आने वाली घटनाओं पर ट्रिगर द्वारा सक्रिय किया जा सकता है।[4][5]

यह प्रतिमान विशेष रूप से तब उपयोगी होता है जब सिंक कोई प्रदान नहीं करता है .

घटना-संचालित SOA|SOA 2.0 उन निहितार्थों को विकसित करता है जो SOA और EDA वास्तुकला एक नए ईवेंट स्वरूपबनाने के लिए पहले के अज्ञात कारण संबंधों का लाभ उठाकर एक समृद्ध, अधिक मजबूत स्तर प्रदान करते हैं।[vague] यह नया व्यापारिक सूचना स्वरूपआगे स्वायत्त मानव या स्वचालित प्रसंस्करण को ट्रिगर करता है जो मूल्य-वर्धित जानकारी को मान्यता प्राप्त स्वरूपमें इंजेक्ट करके उद्यम के लिए घातीय मूल्य जोड़ता है जो पहले प्राप्त नहीं किया जा सकता था।[vague]

घटना संरचना

एक ईवेंट को दो भागों में बनाया जा सकता है, घटना हेडर और घटना बॉडी। घटना हेडर में घटना का नाम, घटना के लिए टाइम स्टैम्प और घटना के प्रकार जैसी जानकारी शामिल हो सकती है। घटना बॉडी पता लगाए गए स्थिति परिवर्तन का विवरण प्रदान करती है। एक घटना निकाय को स्वरूपया तर्क के साथ भ्रमित नहीं होना चाहिए जो कि घटना की घटना की प्रतिक्रिया में लागू हो सकता है।

घटना प्रवाह परतें

एक घटना संचालित वास्तुकला को चार तार्किक परतों पर बनाया जा सकता है, जो एक घटना के संवेदन (यानी, एक महत्वपूर्ण अस्थायी स्थिति या तथ्य) से शुरू होती है, एक घटना संरचना के रूप में इसके तकनीकी प्रतिनिधित्व के निर्माण के लिए आगे बढ़ती है और एक गैर के साथ समाप्त होती है। उस घटना पर प्रतिक्रियाओं का खाली सेट।[6]


घटना प्रोड्यूसर

पहली तार्किक परत घटना निर्माता है, जो एक तथ्य को समझती है और एक घटना संदेश के रूप में उस तथ्य का प्रतिनिधित्व करती है। एक उदाहरण के रूप में, एक घटना प्रोड्यूसर एक ईमेल क्लाइंट, एक ई-कॉमर्स प्रणाली, एक मॉनिटरिंग एजेंट या किसी प्रकार का भौतिक सेंसर हो सकता है।

इस तरह के विविध डेटा स्रोतों से एकत्र किए गए डेटा को मूल्यांकन के लिए डेटा के एकल मानकीकृत रूप में परिवर्तित करना इस पहली तार्किक परत के डिजाइन और कार्यान्वयन में एक महत्वपूर्ण कार्य है।[6]हालाँकि, यह देखते हुए कि एक घटना एक जोरदार घोषणात्मक ढांचा है, किसी भी सूचनात्मक संचालन को आसानी से लागू किया जा सकता है, इस प्रकार उच्च स्तर के मानकीकरण की आवश्यकता समाप्त हो जाती है।[citation needed]

घटना चैनल

यह दूसरी तार्किक परत है। एक ईवेंट चैनल एक घटना जेनरेटर से ईवेंट इंजन में एकत्रित की गई जानकारी को प्रसारित करने का एक तंत्र है[6]यासिंको। यह एक टीसीपी/आईपी कनेक्शन, या किसी भी प्रकार की इनपुट फ़ाइल (फ्लैट, एक्सएमएल प्रारूप, ई-मेल, आदि) हो सकता है। एक ही समय में कई ईवेंट चैनल खोले जा सकते हैं। सामान्यतः, क्योंकि घटना प्रोसेसिंग इंजन को उन्हें लगभग वास्तविक समय में प्रोसेस करना होता है, घटना चैनल एसिंक्रोनस रूप से पढ़े जाएंगे। घटनाओं को एक कतार में संग्रहीत किया जाता है, बाद में घटना प्रोसेसिंग इंजन द्वारा संसाधित किए जाने की प्रतीक्षा की जाती है।

घटना प्रोसेसिंग इंजन

घटना प्रोसेसिंग इंजन एक तार्किक परत है जो किसी घटना की पहचान करने और फिर उचित प्रतिक्रिया का चयन करने और निष्पादित करने के लिए जिम्मेदार है। यह कई दावों को भी ट्रिगर कर सकता है। उदाहरण के लिए, यदि घटना प्रोसेसिंग इंजन में आने वाली घटना स्टॉक में कम उत्पाद आईडी है, तो यह "ऑर्डर उत्पाद आईडी" और "कर्मचारियों को सूचित करें" जैसी प्रतिक्रियाओं को ट्रिगर कर सकती है।[6]


डाउनस्ट्रीम घटना-संचालित गतिविधि

यह तार्किक परत है जहां घटना के परिणाम दिखाए जाते हैं। यह कई अलग-अलग तरीकों और रूपों में किया जा सकता है; उदाहरण के लिए, एक ईमेल किसी को भेजा जाता है और एक एप्लिकेशन स्क्रीन पर किसी प्रकार की चेतावनी प्रदर्शित कर सकता है।[6]सिंक (ईवेंट प्रोसेसिंग इंजन) द्वारा प्रदान किए गए स्वचालन के स्तर के आधार पर डाउनस्ट्रीम गतिविधि की आवश्यकता नहीं हो सकती है।

घटना प्रोसेसिंग स्टाइल्स

घटना प्रोसेसिंग की तीन सामान्य शैलियाँ हैं: सरल, धारा और जटिल। एक परिपक्व घटना-संचालित वास्तुकला में तीन शैलियों का अधिकांशतःएक साथ उपयोग किया जाता है।[6]


सरल घटना प्रसंस्करण

सरल घटना प्रसंस्करण उन घटनाओं से संबंधित है जो स्थिति के विशिष्ट, औसत दर्जे के परिवर्तनों से सीधे संबंधित हैं। साधारण ईवेंट प्रोसेसिंग में, एक उल्लेखनीय घटना घटित होती है जो डाउनस्ट्रीम क्रिया(ओं) को आरंभ करती है। सरल घटना प्रसंस्करण का उपयोग सामान्यतः काम के वास्तविक समय के प्रवाह को चलाने के लिए किया जाता है, जिससे अंतराल समय और लागत कम हो जाती है।[6]

उदाहरण के लिए, टायर के दबाव या परिवेश के तापमान में परिवर्तन का पता लगाने वाले सेंसर द्वारा साधारण घटनाओं का निर्माण किया जा सकता है। कार का टायर गलत दबाव सेंसर से एक साधारण घटना उत्पन्न करेगा जो चालक को टायर की स्थिति के बारे में सलाह देने वाली पीली रोशनी को ट्रिगर करेगा।

घटना स्ट्रीम प्रोसेसिंग

घटना स्ट्रीम प्रोसेसिंग (ईएसपी) में सामान्य और उल्लेखनीय दोनों तरह की घटनाएं होती हैं। सामान्य घटनाओं (आदेशों, आरएफआईडी प्रसारण) को उल्लेखनीयता के लिए जांचा जाता है और सूचना ग्राहकों को प्रवाहित किया जाता है। घटना स्ट्रीम प्रोसेसिंग का उपयोग सामान्यतः उद्यम में और उसके आसपास सूचना के वास्तविक समय के प्रवाह को चलाने के लिए किया जाता है, जो समय पर निर्णय लेने में सक्षम बनाता है।[6]


जटिल घटना प्रसंस्करण

कॉम्प्लेक्स घटना प्रोसेसिंग (सीईपी) सरल और सामान्य घटनाओं के स्वरूपको अनुमान लगाने की अनुमति देता है कि एक जटिल घटना हुई है। जटिल घटना प्रसंस्करण घटनाओं के संगम का मूल्यांकन करता है और फिर कार्रवाई करता है। घटनाएँ (उल्लेखनीय या साधारण) घटना प्रकारों को पार कर सकती हैं और लंबी अवधि में घटित हो सकती हैं। घटना सहसंबंध कारण, लौकिक या स्थानिक हो सकता है। सीईपी में परिष्कृत ईवेंट दुभाषियों, घटना स्वरूपकी परिभाषा और मिलान, और सहसंबंध तकनीकों के रोजगार की आवश्यकता होती है। सीईपी का उपयोग सामान्यतः व्यावसायिक विसंगतियों, खतरों और अवसरों का पता लगाने और उनका जवाब देने के लिए किया जाता है।[6]


ऑनलाइन घटना प्रोसेसिंग

OLEP (OLEP) जटिल घटनाओं को संसाधित करने और लगातार डेटा को प्रबंधित करने के लिए अतुल्यकालिक वितरित ईवेंट-लॉग का उपयोग करता है।[7] ओएलईपी विषम प्रणालियों में एक जटिल परिदृश्य की संबंधित घटनाओं को मज़बूती से बनाने की अनुमति देता है। यह उच्च मापनीयता के साथ बहुत लचीले वितरण स्वरूपको सक्षम बनाता है और मजबूत स्थिरता प्रदान करता है।चूंकि, यह प्रसंस्करण समय के लिए ऊपरी सीमा की गारंटी नहीं दे सकता है।

अत्यधिक ढीला युग्मन और अच्छी तरह से वितरित

एक घटना संचालित वास्तुकला अत्यंत शिथिल युग्मित और अच्छी तरह से वितरित है। इस वास्तुकला का महान वितरण उपस्थित है क्योंकि एक घटना लगभग कुछ भी हो सकती है और लगभग कहीं भी उपस्थित हो सकती है। वास्तुकला अत्यंत शिथिल युग्मित है क्योंकि घटना स्वयं इसके कारण के परिणामों के बारे में नहीं जानती है। उदा. यदि हमारे पास एक अलार्म प्रणाली है जो सामने का दरवाजा खुलने पर सूचना रिकॉर्ड करता है, तो दरवाजा खुद नहीं जानता है कि दरवाजा खुलने पर अलार्म प्रणाली सूचना जोड़ देगा, बस दरवाजा खोल दिया गया है।[6]


सिमेंटिक कपलिंग और आगे का शोध

घटना संचालित वास्तुकला में स्थान, समय और तुल्यकालन के अन्दर ढीला युग्मन है, सूचना विनिमय और वितरित वर्कफ़्लोज़ के लिए एक स्केलेबल बुनियादी ढांचा प्रदान करता है। हालांकि, घटना सब्सक्रिप्शन और स्वरूपके माध्यम से घटना-वास्तुकला कसकर युग्मित हैं, अंतर्निहित घटना स्कीमा और मूल्यों के शब्दों के लिए। स्मार्ट शहरों और सेंसर वेब जैसे बड़े और खुले परिनियोजन में घटनाओं की सिमेंटिक विषमता का उच्च स्तर घटना-आधारित प्रणाली को विकसित करने और बनाए रखने में मुश्किल बनाता है। घटना-आधारित प्रणालियों के अन्दर सिमेंटिक कपलिंग को संबोधित करने के लिए घटनाओं के अनुमानित सिमेंटिक मिलान का उपयोग अनुसंधान का एक सक्रिय क्षेत्र है।[8]


कार्यान्वयन और उदाहरण

जावा स्विंग

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

public class FooPanel extends JPanel implements ActionListener {
    public FooPanel() {
        super();

        JButton btn = new JButton("Click Me!");
        btn.addActionListener(this);

        this.add(btn);
    }

    @Override
    public void actionPerformed(ActionEvent ae) {
        System.out.println("Button has been clicked!");
    }
}

वैकल्पिक रूप से, एक अन्य कार्यान्वयन विकल्प श्रोता को ऑब्जेक्ट में क्लास (कंप्यूटर प्रोग्रामिंग) के रूप में जोड़ना है # अनाम और इस प्रकार लैम्ब्डा नोटेशन (जावा 1.8 के बाद से) का उपयोग करना है। नीचे एक उदाहरण है।

public class FooPanel extends JPanel {
    public FooPanel() {
        super();

        JButton btn = new JButton("Click Me!");
        btn.addActionListener(ae -> System.out.println("Button has been clicked!"));
        this.add(btn);
    }
}


जावास्क्रिप्ट

(() => {
  'use strict';

  class EventEmitter {
    constructor() {
      this.events = new Map();
    }

    on(event, listener) {
      if (typeof listener !== 'function') {
        throw new TypeError('The listener must be a function');
      }
      let listeners = this.events.get(event);
      if (!listeners) {
        listeners = new Set();
        this.events.set(event, listeners); 
      }
      listeners.add(listener);
      return this;
    }

    off(event, listener) {
      if (!arguments.length) {
        this.events.clear();
      } else if (arguments.length === 1) {
        this.events.delete(event);
      } else {
        const listeners = this.events.get(event);
        if (listeners) {
          listeners.delete(listener);
        }
      }
      return this;
    }

    emit(event, ...args) {
      const listeners = this.events.get(event);
      if (listeners) {
        for (let listener of listeners) {
          listener.apply(this, args);
        }
      }
      return this;
    }
  }

  this.EventEmitter = EventEmitter;
})();

उपयोग:

const events = new EventEmitter();
events.on('foo', () => { console.log('foo'); });
events.emit('foo'); // Prints "foo"
events.off('foo');
events.emit('foo'); // Nothing will happen


वस्तु पास्कल

घटनाएँ ऑब्जेक्ट पास्कल भाषा के मूलभूत तत्वों में से एक हैं। यूनी-कास्ट मॉडल (वन-टू-वन) का उपयोग यहां किया जाता है, यानी प्रेषक केवल एक प्राप्तकर्ता को सूचना भेजता है। इस सीमा का लाभ यह है कि इसके लिए किसी विशेष ईवेंट श्रोता की आवश्यकता नहीं होती है। घटना स्वयं किसी अन्य वस्तु में एक विधि के लिए सूचक है। यदि पॉइंटर खाली नहीं है, तो जब कोई ईवेंट होता है, तो ईवेंट हैंडलर को कॉल किया जाता है। घटनाओं का उपयोग सामान्यतः उन कक्षाओं में किया जाता है जो जीयूआई का समर्थन करते हैं।चूंकि, यह घटनाओं के लिए आवेदन का एकमात्र क्षेत्र नहीं है। निम्नलिखित कोड घटनाओं का उपयोग करने का एक उदाहरण है:

unit MyCustomClass;  

interface

uses
  Classes;
  
type
  {definition of your own event}
  TAccidentEvent = procedure(Sender: TObject; const AValue: Integer) of object;

  TMyCustomObject = class(TObject)
  private
    FData: Integer;              // an example of a simple field in a class
    FOnAccident: TAccidentEvent; // event - reference to a method in some object
    FOnChange: TNotifyEvent;     // event - reference to a method in some object 
    procedure SetData(Value: Integer); // a method that sets the value of a field in the class 
  protected
    procedure DoAccident(const AValue: Integer); virtual; // a method that generates an event based on your own definition 
    procedure DoChange; // a method that generates an event based on a definition from the VCL library 
  public
    constructor Create; virtual;   // class constructor 
    destructor Destroy; override;  // class destructor
  published
    property Data: TAccidentEvent read FData write SetData; // declaration of a property in a class
    property OnAccident: TAccidentEvent read FOnAccident write FOnAccident; // exposing the event outside the class
    property OnChange: TNotifyEvent read FOnChange write FOnChange;         // exposing the event outside the class
    procedure MultiplyBy(const AValue: Integer);  // a method that uses its own definition of the event
  end;
  
implementation

constructor TMyCustomObject.Create;
begin
  FData := 0;
end;

destructor TMyCustomObject.Destroy;
begin
  FData := 0;
  inherited Destroy;
end;

procedure TMyCustomObject.DoAccident(const AValue: Integer);
begin
  if Assigned(FOnAccident)
   then FOnAccident(Self, AValue);
end;

procedure TMyCustomObject.DoChange;
begin
  if Assigned(FOnChange)
   then FOnChange(Self);
end;

procedure TMyCustomObject.MultiplyBy(const AValue: Integer);
begin
  FData := FData * AValue;
  if FData > 1000000
   then DoAccident(FData);
end;

procedure TMyCustomObject.SetData(Value: Integer);
begin
  if FData <> Value
   then
    begin
     FData := Value;
     DoChange;
    end;
end.

निर्मित वर्ग का उपयोग इस प्रकार किया जा सकता है:

...
procedure TMyForm.ShowCustomInfo(Sender: TObject);
begin
  if Sender is TMyCustomObject
   then ShowMessage('Data has changed.');
end;

procedure TMyForm.PerformAcident(Sender: TObject; const AValue: Integer);
begin
  if Sender is TMyCustomObject
   then ShowMessage('The data has exceeded 1000000! New value is: ' + AValue.ToString);
end;
...
{declaring a variable that is an object of the specified class}
var
  LMyObject: TMyCustomObject; 
...
{creation of the object}
LMyObject := TMyCustomObject.Create;
...
{assigning a methods to an events}
LMyObject.OnChange := MyForm.ShowCustomInfo;
LMyObject.OnAccident := MyForm.PerformAcident;
...
{removing an object when it is no longer needed}
LMyObject.Free; 
...


यह भी देखें

लेख

संदर्भ

  1. K. Mani Chandy Event-driven Applications: Costs, Benefits and Design Approaches, California Institute of Technology, 2006
  2. Martin Fowler, Event Sourcing, December, 2005
  3. Martin Fowler, Parallel Model, December, 2005
  4. Hanson, Jeff (January 31, 2005). "SOA में घटना-संचालित सेवाएं". JavaWorld. Retrieved 2020-07-21.
  5. Sliwa, Carol (May 12, 2003). "घटना-संचालित वास्तुकला व्यापक रूप से अपनाने के लिए तैयार है". Computerworld. Retrieved 2020-07-21.
  6. 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 Brenda M. Michelson, Event-Driven Architecture Overview, Patricia Seybold Group, February 2, 2006
  7. "ऑनलाइन इवेंट प्रोसेसिंग - एसीएम कतार". queue.acm.org. Retrieved 2019-05-30.
  8. Hasan, Souleiman, Sean O’Riain, and Edward Curry. 2012. “Approximate Semantic Matching of Heterogeneous Events.” In 6th ACM International Conference on Distributed Event-Based Systems (DEBS 2012), 252–263. Berlin, Germany: ACM. “DOI”.


बाहरी संबंध