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 # dedup process (event) # side effects are deterministic 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

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

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

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

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

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

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