GH GambleHub

घटना वास्तुकला

इवेंट आर्किटेक्चर (EDA)

1) एक घटना क्या है और ईडीए क्यों है

घटना - एक अपरिवर्तनीय तथ्य जो पहले से ही डोमेन में हुआ है ("प्लेयरवेरिफाइड", "कैप्चर्ड")। EDA इन तथ्यों के प्रकाशन और उनके प्रति प्रतिक्रियाओं के आसपास एकीकरण का निर्माण करता है:
  • सेवाओं की कमजोर कनेक्टिविटी,
  • उपभोक्ताओं को स्वतंत्र रूप से स्
  • अनुमानों की पुनर्व्यवस्था/पुनर्व्यवस्था,
  • पारदर्शी लेखा परीक्षा।

EDA तुल्यकालिक API को रद्द नहीं करता है - यह अतुल्यकालिक परत में क्रॉस-सेवा निर्भरता लाकर उन्हें पूरक करता है।


2) घटना प्रकार

डोमेन: महत्वपूर्ण व्यावसायिक तथ्य (ऑर्डर्ड प्लेस्ड, बोनसफीड)।

एकीकरण: बाहरी प्रणालियों के लिए "स्नैपशॉट्स "/परिवर्तन (UsereUpdated, WalletTyChanged)।

तकनीकी: जीवन चक्र और टेलीमेट्री (दिल की धड़ कन, पाइपलफेल्ट)।

कमांड (घटनाओं नहीं, बल्कि पास में): "डू एक्स" (CapchearPayed) निर्देश।

सिफारिश: डोमेन इवेंट प्राथमिक हैं; एकीकरण विशिष्ट उपभोक्ताओं के लिए अनुमानों द्वारा बनाया ग


3) घटना अनुबंध और स्कीमा

Схема: एवरो/प्रोटोबुफ/JSON स्कीमा + स्कीमा रजिस्ट्री; संगतता रणनीति: उपभोक्ता विकास के लिए 'बैकवर्ड', महत्वपूर्ण विषयों पर 'पूर्ण'।

CloudEvents (id, source, type, time, datacontenttype) - वर्दी शीर्षिका।

आवश्यक मेटाडेटा: 'ईवेंट _ आईडी' (ULID/UUID), 'heased _ at', 'product', 'schema _ version', 'correlation _ id '/' cousation _ id', 'idempotency _ key'।

वर्शनिंग: ऐड-ओनली फ़ील्ड्स, नाम बदलने/सिमेंटिक ब्रेक का निषेध; नए प्रकार - नए विषय/प्रकार।

उदाहरण (एवरो, टुकड़ा):
json
{
"type":"record","name":"PaymentCaptured","namespace":"events.v1",
"fields":[
{"name":"event_id","type":"string"},
{"name":"occurred_at","type":{"type":"long","logicalType":"timestamp-micros"}},
{"name":"payment_id","type":"string"},
{"name":"amount","type":{"type":"bytes","logicalType":"decimal","precision":18,"scale":2}},
{"name":"currency","type":"string"},
{"name":"player_id","type":"string"}
]
}

4) डिलीवरी, ऑर्डर और स्थिरता

डिफ़ॉल्ट के रूप में कम से कम एक बार हैंडलर आइडेम्पोटेंसी की आवश्यकता होती है।

आदेश: एक पार्टी (काफ्का) या कतार (RabbitMQ) के भीतर गारंटी, लेकिन पीछे हटने से टूट सकता है; घटना कुंजी को क्रम के एक डोमेन दाने को प्रतिबिंबित करना चाहिए (उदाहरण के लिए, 'प्लेयर _ आईडी')।

स्थिरता: धन/ऋण के लिए - केवल पत्रिकाओं/सागों/मुआवजे के माध्यम से; LWW से बचें।

पढ़ ने का मॉडल: अनुमान और कैश अंततः हो सकते हैं - "प्रगति में अद्यतन"... दिखाएं और सख्त रास्तों के लिए RNOT रणनीतियों का उपयोग करें।


5) आउटबॉक्स/इनबॉक्स и सीडीसी

आउटबॉक्स: सेवा अपने डेटाबेस और एक लेनदेन में आउटबॉक्स टेबल पर एक तथ्य लिखती है - कार्यकर्ता बस को प्रकाशित करता है।

इनबॉक्स: डिडप्लिकेशन के लिए कंज्यूमर स्टोर्स इवेंट _ आईडीविथ प्रोसेसिंग परिणाम।

सीडीसी (डेटा कैप्चर बदलें): अनुप्रयोग परिवर्तन के बिना एकीकरण का निर्माण करने के लिए डेटाबेस (binlog/WAL) से बस में परिवर्तन का प्रवाह।

idempotency: 'idempotency _ key '/' event _ id' द्वारा प्रसंस्करण, बाहरी दुनिया को तब तक न बदलें जब तक तय न हो।


6) CQRS и इवेंट सोर्सिंग

CQRS: अलग लेखन मॉडल और पढ़ ने के अनुमान; अनुमानों का निर्माण घटनाओं से किया जाता है और पीछे रह सकता है।

इवेंट सोर्सिंग: एग्रीगेट स्टेट = इसकी घटनाओं का रोलअप। पेशेवरों: पूर्ण ऑडिट/रीप्ले; विपक्ष: पलायन/योजनाओं/स्नैपशॉट की जटिलता।

अभ्यास: ईएस - हर जगह नहीं, लेकिन जहां इतिहास और मुआवजा महत्वपूर्ण है; CQRS - लगभग हमेशा EDA में।


7) सागास: ऑर्केस्ट्रेशन और कोरियोग्राफी

ऑर्केस्ट्रेशन: समन्वयक कमांड भेजता है और प्रतिक्रिया घटनाओं का इंतजार करता है; जटिल प्रक्रियाओं (KYC→Deposit→Bonus) के लिए सुविधाजनक।

कोरियोग्राफी: सेवाएं एक-दूसरे की घटनाओं पर प्रतिक्रिया देती हैं; आसान लेकिन कठिन ट्रेस करने के लिए।

हमेशा मुआवजे और चरण समय सीमा को परिभाषित करें।


8) टोपोलॉजी डिजाइन (काफ्का/रैबिटएमक्यू)

काफ्का

प्रति डोमेन घटना विषय: 'भुगतान। कब्जा कर लिया। v1 ',' खिलाड़ी। सत्यापित। v1 '।

विभाजन कुंजी: 'player _ id '/' बटुआ _ id' - जहाँ क्रम महत्वपूर्ण है.

'पुनर्वितरण। फैक्टर = 3 ',' मिनट। Insync। प्रतिकृतियाँ = 2 ', निर्माता' acks = all '।

प्रतिधारण: समय के अनुसार (उदा। 7-90 दिन) और/या संघनन (कुंजी द्वारा अंतिम स्थिति)।

बैकऑफ के साथ रीट्री और डीएलक्यू के लिए विषय।

RabbitMQ

एक्सचेंज: 'विषय '/' डायरेक्ट', रूटिंग कुंजी 'भुगतान। कब्जा कर लिया v1 '।

एक विस्तृत प्रशंसक के लिए - 'विषय' + कई कतारें; आरपीसी/कमांड के लिए - अलग कतारें।

एचए के लिए कोरम कतारें; रिट्रे के लिए TTL + डेड-लेटर एक्सचेंज।


9) अवलोकन और एसएलओ ईडीए

SLI/SLO:
  • एंड-टू-एंड लेटेंसी (occurred_at → संसाधित): p50/p95/p99।
  • लैग/आयु: उपभोक्ता अंतराल (काफ्का उपभोक्ता अंतराल, खरगोश बैकलॉग आयु)।
  • थ्रूपुट प्रकाशन/प्रसंस्करण।
  • DLQ-दर और दोहराव का अनुपात।
  • व्यावसायिक लेनदेन की सफलता (जैसे) "जमा की पुष्टि ≤ 5c")।
अभ्यास:
  • 'trace _ id '/' correlation _ id' (OTel) के माध्यम से घटनाओं का सहसंबंध।
  • संरेखण से उदाहरण → मेट्रिक्स।
  • बर्न-रेट अलर्ट के साथ डैशबोर्ड "Producer→Broker→Consumer"।

10) रिप्ले, रिप्लेसमेंट और बैकफिल

अनुमानों के पुनर्निर्माण/फिक्स करने के लिए रीप्ले करें: नए प्रक्षेपण/स्थान पर ड्राइव करें, फिर रीडिंग स्विच करें।

प्रतिधारण: कानूनी/व्यावसायिक आवश्यकताएं (जीडीपीआर/पीसीआई); संवेदनशील क्षेत्र - एन्क्रिप्ट और/या टोकनाइज़।

बैकफिल: एक-बंद थीम/कतारें, स्पष्ट आरपीएस सीमा को रोकने से बचने के लिए।


11) सुरक्षा और अनुपालन

टीएलएस इन-ट्रांजिट, आंतरिक ग्राहकों के लिए एमटीएलएस।

प्राधिकरण: प्रति-विषय/प्रति-विनिमय एसीएल; Namespace/vhost के माध्यम से मल्टीटेंसी।

पीआईआई: घटना में क्षेत्रों को कम से कम करें; लिफाफा मेटाडेटा अलग से, यदि आवश्यक हो तो एन्क्रिप्टेड पेलोड।

घटनाओं तक पहुंच, "सर्व-शक्तिशाली" कुंजियों को प्रतिबंधित करें।

अवधारण और हटाने का अधिकार (GDPR) नीतियां: या तो डेटा संदर्भ या समाधि की घटनाओं को संग्रहीत करें और अनुमानों में हटा दें।


12) EDA में परीक्षण

अनुबंध परीक्षण: उपभोक्ता योजनाओं की अपनी अपेक्षाओं को मान्य करते हैं (उपभोक्ता

रीप्ले परीक्षण: एक नए हैंडलर/स्कीमा संस्करण के माध्यम से ऐतिहासिक नमूना चलाएं।

अराजकता के परिदृश्य: ब्रोकर देरी/हानि, नोड ड्रॉप, उपभोक्ता अंतराल SLO के भीतर रहते हैं।

सीआई में धुआं: समय विषयों पर एक छोटी एंड-टू-एंड पाइपलाइन।


13) "CRUD एकीकरण → EDA" का प्रवासन

1. डोमेन तथ्यों की पहचान करें।

2. स्रोत सेवाओं में एम्बेड आउटबॉक्स।

3. न्यूनतम डोमेन घटनाओं को प्रकाशित करें और 1-2 अनुमानों को कनेक्ट करें।

4. धीरे-धीरे बिंदु तुल्यकालिक एकीकरण अक्षम करें, उन्हें सदस्यता के साथ बदल दें।

5. टाइप स्कीमा रजिस्ट्री और एक संगतता नीति।

6. खेतों के साथ केवल ऐड-इवेंट का विस्तार करें; टूटता है - केवल नए प्रकारों के माध्यम से।


14) एंटी-पैटर्न

घटनाएँ = "डीटीओ एपीआई" (बहुत वसा, आंतरिक मॉडल पर निर्भर करता है) - उपभोक्ताओं को तोड़ दें।

स्कीमा रजिस्ट्री और संगतता की कमी - "नाजुक" एकीकरण।

कोड से प्रकाशित करना और डाटाबेस में लिखना परमाणु नहीं है (कोई आउटबॉक्स नहीं) - आप घटनाओं को खो देते हैं।

"बिल्कुल हर जगह एक बार" - बिना लाभ के उच्च मूल्य; बेहतर कम से कम एक बार + पहचान।

एक "सार्वभौमिक" विभाजन कुंजी - एक गर्म विभाजन।

सीधे उत्पादन प्रक्षेपण में रीप्ले करें - ऑनलाइन एसएलओ को तोड़ ता है।


15) कार्यान्वयन चेकलिस्ट (0-45 दिन)

0-10 दिन

डोमेन घटनाओं और उनकी कुंजियों (क्रम के दाने) की पहचान करें।

स्कीमा रजिस्ट्री तैनात करें और संगतता रणनीति को मंजूरी दें।

1-2 सेवाओं में आउटबॉक्स/इनबॉक्स जोड़ें; न्यूनतम CloudEvents-लिफाफा।

11-25 दिन

रेट्री/डीएलक्यू, बैकऑफ, हैंडलर की पहचान दर्ज करें।

डैशबोर्ड: लैग/एज/एंड-टू-एंड; बर्न-रेट अलर्ट।

घटना प्रलेखन (कैटलॉग), मालिकों और स्कीमा समीक्षा प्रक्रियाओं।

26-45 दिन

पहले प्रक्षेपण की रीप्ले/पुनर्व्यवस्था; रनबुक रीप्ले और बैकफिल।

सुरक्षा नीतियां (टीएलएस, एसीएल, पीआईआई), प्रतिधारण, जीडीपीआर प्रक्रियाएं।

दलाल और उपभोक्ताओं के लिए नियमित अराजकता और खेल के दिन।


16) परिपक्वता मैट्रिक्स

100% डोमेन घटनाओं को योजनाओं और पंजीकृत द्वारा वर्णित किया गया है।

आउटबॉक्स/इनबॉक्स सभी Tier-0/1 उत्पादकों/उपभोक्ताओं को कवर करता है।

SLO: लक्ष्य के भीतर p95 एंड-टू-एंड विलंबता और उपभोक्ता अंतराल ≥ 99%।

रीप्ले/बैकफिल डाउनटाइम के बिना संभव हैं; सत्यापित रनबुक हैं 'और।

संस्करण: नए क्षेत्र - बिना तोड़े; पुराने उपभोक्ता नहीं गिर रहे हैं।

सुरक्षा: टीएलएस + एमटीएलएस, एसीएल प्रति विषय, एक्सेस लॉग, पीआईआई/रिटेंशन पॉलिसी।


17) मिनी स्निपेट्स

काफ्का निर्माता (विश्वसनीय प्रकाशन, विचार):
properties acks=all enable.idempotence=true max.in.flight.requests.per.connection=1 compression.type=zstd linger.ms=5
उपभोक्ता हैंडलर (पहचान, स्यूडोकोड):
python if inbox.contains(event_id): return # дедуп process(event)            # побочные эффекты детерминированы inbox.commit(event_id)        # atomically with side-effect commit_offset()
RabbitMQ Retry DLX (विचार) के माध्यम से:
  • 'queue: tarks' nak पर DLX 'कार्य। फिर से कोशिश करें 1m '(TTL = 60 के दशक) →' tasks 'पर लौटें; आगे '5 मी/15 मी'।

18) निष्कर्ष

EDA स्पष्ट अनुबंधों और प्रबंधित स्थिरता के साथ एकीकरण को व्यावसायिक तथ्यों के प्रवाह में बदल देता है। नींव बनाएं: स्कीमा + रजिस्ट्री, आउटबॉक्स/इनबॉक्स, ऑर्डर कीज़, आइडेम्पोटेंट हैंडलर, एसएलओ और अवलोकन, सुरक्षित प्रतिधारण और रीप्ले। फिर घटनाएं स्केलिंग, एनालिटिक्स और नई विशेषताओं के लिए आपका "सत्य का स्रोत" बन जाएंगी - बिना नाजुक कनेक्शन और रात के प्रवास के।

Contact

हमसे संपर्क करें

किसी भी प्रश्न या सहायता के लिए हमसे संपर्क करें।हम हमेशा मदद के लिए तैयार हैं!

इंटीग्रेशन शुरू करें

Email — अनिवार्य है। Telegram या WhatsApp — वैकल्पिक हैं।

आपका नाम वैकल्पिक
Email वैकल्पिक
विषय वैकल्पिक
संदेश वैकल्पिक
Telegram वैकल्पिक
@
अगर आप Telegram डालते हैं — तो हम Email के साथ-साथ वहीं भी जवाब देंगे।
WhatsApp वैकल्पिक
फॉर्मैट: देश कोड और नंबर (उदा. +91XXXXXXXXXX)।

बटन दबाकर आप अपने डेटा की प्रोसेसिंग के लिए सहमति देते हैं।