अतुल्यकालिक अंतर संचार से निपटने के लिए सबसे अच्छा अभ्यास?


10

क्रेडिट कार्ड प्रसंस्करण को संभालने के लिए हाल ही में एक परियोजना पूरी की। जिन कठिनाइयों का मुझे सामना करना पड़ा, उनमें से एक अधिसूचना संदेशों की देरी / संभावित विफलता को संभाल रही थी। सबसे जटिल उदाहरण था:

  • भुगतान के लिए अनुरोध भेजने वाला एक बाहरी सिस्टम
  • मेरा सिस्टम उस अनुरोध को भुगतान गेटवे के लिए एक अनुरोध में बदल रहा है
  • उपयोगकर्ता को गेटवे पर भेज रहा है
  • भुगतान करने के लिए उपयोगकर्ता की प्रतीक्षा कर रहा है
  • उपयोगकर्ता मेरे सिस्टम में वापस आ रहा है लेकिन तब तक आयोजित किया जा रहा है जब तक कि सिस्टम को सफलता / विफलता की सूचना नहीं मिल जाती
  • विफलता के आधार पर उपयोगकर्ता को बाहरी सिस्टम में वापस भेजना

इससे भी अधिक कठिन तथ्य यह था कि अधिसूचना को भेजने में विफल होने पर गेटवे हर 15 मिनट में कई घंटों के लिए अधिसूचना भेजने का प्रयास करता है।

मैंने इसे लंबित लेन-देन के डेटाबेस रिकॉर्ड का उपयोग करके हल किया और फिर रिटर्न से सफलता और असफलता का पता लगाने और अधिसूचना और लेनदेन से निपटने के लिए समयबद्ध देरी श्रोता ...

यथोचित कठिन!

लेकिन इससे पहले एक गजिल बार हल किया गया होगा तो सबसे अच्छा अभ्यास क्या है?

मैं देख सकता हूं कि मेरा भविष्य इन सभी प्रणालियों के बीच की हैंडलिंग लिख रहा है और समय की देरी और संभावित नेटवर्क विफलताओं को प्रबंधित करना है इसलिए मैं सर्वोत्तम प्रथाओं का पालन करना चाहता हूं।

पुस्तक / लेख की सिफारिशें बहुत अच्छी होंगी।

अग्रिम में धन्यवाद!

जवाबों:


13

वितरित सिस्टम का निर्माण करते समय, एक 'सिंक्रोनस' सिस्टम और एक 'एसिंक्रोनस' सिस्टम के बीच का अंतर यह है: एक सिंक्रोनस सिस्टम ने कम्प्यूटेशन और संदेश डिलीवरी समय पर ऊपरी सीमा को जाना है। तो: आपके पास एक अतुल्यकालिक प्रणाली है जहां कुछ घटनाओं में इन ज्ञात ऊपरी सीमाएं नहीं होती हैं। आप इसे कैसे संभालते हैं?

  1. यदि इन अतुल्यकालिक प्रक्रियाओं में संभाव्य ऊपरी सीमा होती है, तो आप अपने सिस्टम को आंशिक रूप से तुल्यकालिक प्रणाली की तरह बनाने के लिए टाइमआउट का उपयोग कर सकते हैं । अगर पेमेंट गेटवे का 98 वाँ प्रतिशत प्रतिक्रिया समय 5 सेकंड है तो 5 सेकंड का समय आपके 98% अनुरोधों को सफल बना देगा और अन्य 2% बस विफल हो जाएगा। इसका मतलब है कि अब आपके पास एक ज्ञात ऊपरी सीमा है कि इस प्रक्रिया को सफल या असफल होने में कितना समय लगेगा। यह संभाव्य विफलता विफलता अतुल्यकालिक प्रणालियों को सिंक्रोनस सिस्टम में बदलने के लिए एक महत्वपूर्ण उपकरण है।

  2. इन घटनाओं का एक टिकाऊ रिकॉर्ड रखें ताकि आप सिस्टम की विफलता की स्थिति में अपने सिस्टम की स्थिति को पुनर्प्राप्त कर सकें। यदि आपका भुगतान गेटवे हैंडलर इन घटनाओं को अस्थिर स्मृति में रख रहा है और यह क्रैश हो जाता है तो आप खराब हो जाएंगे।

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

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

संदर्भ के लिए, मुझे विश्वसनीय और सुरक्षित वितरित प्रोग्रामिंग से परिचय से बेहतर कुछ नहीं मिला । यह आपको पहले सिद्धांतों से सिंक्रोनस और एसिंक्रोनस दोनों प्रणालियों को समझने के लिए एक मजबूत एल्गोरिथम आधार देगा।

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