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

From Vigyanwiki
Revision as of 14:10, 9 March 2023 by alpha>Rajkumar

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

अवलोकन

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

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

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

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

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

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

घटना संरचना

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

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

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

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


घटना निर्माता

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

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

घटना प्रणाली

यह दूसरी वैचारिक परत है। एक घटना प्रणाली घटना जेनरेटर से एकत्रित जानकारी को घटना इंजन [6] या सिंक में प्रसारित करने का एक तंत्र है

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

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

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


अनुप्रवाह घटना-संचालित गतिविधि

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

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

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


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

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

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

घटना प्रवाह प्रसंस्करण

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

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

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


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

ऑनलाइन घटना प्रसंस्करण (ओएलईपी) जटिल घटनाओं को संसाधित करने और निरंतर दत्त-सामग्री को प्रबंधित करने के लिए अतुल्यकालिक वितरित घटना-लॉग का उपयोग करता है।[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”.


बाहरी संबंध