संदेश कतारें: काफ्का और रैबिटएमक्यू
संदेश कतारें: काफ्का, रैबिटएमक्यू
(धारा: प्रौद्योगिकी और बुनियादी ढांचा)
संक्षिप्त सारांश
संदेश कतारें iGaming में घटना-उन्मुख वास्तुकला (EDA) की नींव हैं। वे दरों, भुगतान, धोखाधड़ी-विरोधी, सीआरएम, सूचनाओं और एनालिटिक्स के माइक्रोसर्विसेस को जोड़ ते हैं। व्यवहार में, समाधान के दो वर्ग सबसे आम हैं:- अपाचे काफ्का एक वितरित घटना लॉग (लॉग) है जो पार्टियों के माध्यम से स्ट्रीमिंग, प्रतिकृति और क्षैतिज स्केलिंग पर केंद्रित है।
- RabbitMQ लचीला मार्ग (एक्सचेंज/बाइंडिंग), प्राथमिकताओं, टीटीएल, पुष्टि और क्लासिक कतार कार्यों के साथ एक AMQP कतार दलाल है।
दोनों उपकरण परिपक्व हैं, लेकिन विभिन्न समस्याओं को हल करते हैं: काफ्का - स्केलेबल धाराओं और एनालिटिक्स के लिए, रैबिटएमक्यू - परिचालन कार्य ऑर्केस्ट्रेशन, आरपीसी और विविध मार्ग के लिए।
iGaming में यह उपयुक्त कहाँ है
काफ्का - चुनें कब:- हमें पार्टियों के माध्यम से उच्च टीपीएस घटनाओं (दांव, खेल की घटनाओं, टेलीमेट्री) और क्षैतिज पैमाने की आवश्यकता है।
- ठंडे/गर्म फिर से उपभोग (फिर से पढ़ ने वाले टेप डेटा), समुच्चय (संतुलन, खिलाड़ी की स्थिति) के लिए प्रतिधारण और संघनन महत्वपूर्ण हैं।
- हमें रियलटाइम एग्रीगेट के लिए स्ट्रीम प्रक्रियाओं (काफ्का स्ट्रीम/ksqlDB/Flink) की आवश्यकता है: टूर्नामेंट के नेता, जिम्मेदार गेम लिमिट, धोखाधड़ी विरोधी संकेत।
- हमें क्लासिक कार्य कतारों की आवश्यकता है: केवाईसी चेक, आस्थगित/दोहराया भुगतान, ई-मेल/एसएमएस/पुश, वेबहूक को पीएसपी को भेजना।
- लचीला रूटिंग (विषय/प्रत्यक्ष/फैनआउट), प्राथमिकताएं, टीटीएल, देरी, मृत-पत्र और आरपीसी पैटर्न।
- सख्त प्रति-उपभोक्ता प्रतिबंध (प्रीफेच/क्यूओएस), सरल लोड प्रबंधन और तेज रिट्रे की आवश्यकता होती है।
लगातार परिणाम: ऑर्केस्ट्रेशन और एकीकरण के लिए घटनाओं और एनालिटिक्स + रैबिटएमक्यू के लिए काफ्का।
डेटा मॉडल और रूटिंग
काफ्का
विषयों को पार्टियों में विभाजित किया गया है, प्रत्येक एक आदेशित लॉग है।
संदेश कुंजी कुंजी के भीतर बैच → ऑर्डर को परिभाषित करता है।
उपभोक्ताओं ने ऑफसेट, उपभोक्ताओं के स्केल प्रोसेसिंग
समय/मात्रा द्वारा प्रतिधारण; लॉग कंपेक्शन कुंजी के नवीनतम संस्करण को संग्रहीत करता है
RabbitMQ
एक्सचेंज (डायरेक्ट/फैनआउट/टॉपिक/हेडर) + बाइंडिंग्स - संदेश कतारों में मिलते हैं।
पुष्टि (ack/nack/अनुरोध), प्रकाशक पुष्टि करता है, प्राथमिकताएं, TTL, मृत-अक्षर (DLX/DLQ)।
उच्च उपलब्धता के लिए कोरम कतारें (बेड़ा); रैम को बचाने के लिए आलसी कतारें।
डिलीवरी गारंटी और पहचान
सबसे अधिक एक बार: कोई रिट्रेज़नहीं; नुकसान का जोखिम, न्यूनतम देरी।
कम से कम-एक बार: डिफ़ॉल्ट मानक → डुप्लिकेट्स → आइडेम्पोटेंट हैंडलर (अनुरोध/लेनदेन कुंजी, अपसर्ट, डीडअप टेबल, आउटबॉक्स) संभव हैं।
बिल्कुल एक बार: काफ्का में, एक आदर्श निर्माता + लेनदेन विषय + सहमत खपत संयोजन में प्राप्त की जाती है, लेकिन अधिक बार यह अधिक महंगा और अधिक कठिन होता है; RabbitMQ में - सीमित और हड्डियों के साथ। वास्तविक भुगतान/शर्त प्रवाह में, कम से कम एक बार + सख्त पहचान लागू की जाती है।
पहचान प्रथा:- अद्वितीय पहचान कुंजी (UUID/ULID) प्रति घटना/कमांड.
- आउटबॉक्स पैटर्न + चेंज डेटा कैप्चर (डेबेजियम) सेवा डेटाबेस → डबल राइट रोकथाम।
- TTL के साथ एक अलग पंक्ति में (कुंजी, created_at) द्वारा डेडअप करें।
आदेश/संदेश क्रम
काफ्का पार्टी के भीतर आदेश की गारंटी देता है। कुंजी चुनें ताकि इकाई का पूरा "जीवन" (उदाहरण के लिए, संतुलन के लिए 'प्लेयर _ आईडी') एक कुंजी में हो।
RabbitMQ आदेश बार-बार प्रसव/कई उपभोक्ताओं के साथ सख्ती से गारंटी नहीं है; ऑर्डर करने के लिए महत्वपूर्ण पाइपलाइनें - काफ्का में या एकल-सक्रिय उपभोक्ता और धारावाहिक के माध्यम से बेहतर।
सामयिक और कतारों का डिजाइन
काफ्का:- ग्रैनुलरिटी: 'डोमेन। घटना '(उदाहरण के लिए,' भुगतान। जमा करें। बनाया ')।
- कुंजियाँ: 'player _ id', 'खाता _ id', ऑर्डर करने के लिए 'bet _ id'.
- बैच = एन लक्ष्य TPS द्वारा (नियम: 1 बैच ≈ X संदेश/सेकंड/उपभोक्ता); वृद्धि के लिए स्टॉक रखें।
- प्रतिधारण: घटनाएँ - घंटे/दिन; संघनन - "राज्यों" के लिए।
- डोमेन द्वारा एक्सचेंज: 'भुगतान। प्रत्यक्ष ',' जोखिम। विषय '।
- उपभोक्ताओं के लिए कतारें: 'kyc। जाँचकर्ता। Q ',' psp। webhooks। फिर से कोशिश करें। Q '।
- बैकऑफ के लिए डीएलक्यू प्रति कार्य कतार देरी।
- प्रीफेच एचए के लिए संगामिति, कोरम कतारों को निर्दिष्ट करता है।
त्रुटियाँ, रिट्रेज़और डीएलक्यू
वर्गीकृत त्रुटियां: अस्थायी (नेटवर्क/PSP 5xx) → रिट्रे; घातक (सत्यापन, योजना) → तुरंत डीएलक्यू।
घातीय बैकऑफ + जिटर, रिट्रे सीमा, जहर-गोली का पता लगाना।
चरणों (5s, 1m, 5m, 1h) द्वारा अलग-अलग रीट्री-कतारें।
DLQ हैंडलर: अलर्ट, ट्रेस, मैनुअल पार्सिंग, पैच के साथ री-इंजेक्शन।
डेटा संविदा और योजनाबद्ध विज्ञान
एवरो/प्रोटोबुफ + स्कीमा रजिस्ट्री (काफ्का - डी वास्तविक मानक के लिए) का उपयोग करें।
वर्शनिंग: पिछड़े-संगत परिवर्तन (वैकल्पिक क्षेत्रों को जोड़ ना), प्रवास को तोड़ ने का निषेध।
पीआईआई क्षेत्र - एन्क्रिप्शन/टोकन; GDPR और स्थानीय नियमों का पालन करें।
निगरानी, अवलोकन और एसएलओ
उत्पादकों/उपभोक्ताओं के मेट्रिक्स: लैग, थ्रूपुट, त्रुटियां, रेट्राई, प्रसंस्करण समय।
लॉग + ट्रेसिंग (सहसंबंध आईडी: 'ट्रेस _ आईडी', 'संदेश _ आईडी')।
SLO: प्रकाशन/वितरण की p99-विलंबता, अनुमेय उपभोक्ता अंतराल, फाइलों के बाद वसूली का समय।
DLQ वृद्धि के लिए अलर्ट, पिछले अतिरिक्त, पार्टियों/कोरम में गिरावट।
सुरक्षा और अनुपालन
पारगमन में टीएलएस, गुप्त एन्क्रिप्शन (एसओपीएस/वॉल्ट), सीमित एसीएल/आरबीएसी।
संवेदनशील डोमेन (भुगतान, केवाईसी) के लिए अलग विषय/कतारें।
प्रकाशनों/सदस्यताओं का लेखा परीक्षा लॉग, कोड के बाहर कुंजियों का भंडारण।
क्षेत्रीय आवश्यकताएं (ईयू/तुर्की/लैटम): प्रतिधारण, भंडारण स्थानीयकरण, मास्किंग।
उच्च उपलब्धता, दोष सहिष्णुता और डीआर
काफ्का:- कम से कम 3-5 दलालों का समूह; प्रतिकृति। कारक ≥ 3।
- min. insync। टिकाऊ रिकॉर्ड के लिए प्रतिकृतियाँ और acks = सभी।
- डीआर के लिए क्रॉस रीजनल प्रतिकृति (MirrorMaker-2)।
- एचए के लिए कोरम कतारें, कोरम के साथ नोड्स की भी/विषम संख्या।
- अंतर-डेटा केंद्र प्रतिकृति के लिए फेडरेशन/फावड़ा, डीआर स्क्रिप्ट।
- ठंडा/गर्म स्टैंड, स्विचिंग परीक्षण।
प्रदर्शन और ट्यूनिंग
काफ्का (निर्माता):- 'linger। ms 'и' बैच। आकार 'कसाई के लिए;' संपीड़न। प्रकार '(lz4/zstd)।
- 'बैक = सभी', लेकिन विलंबता के लिए देखते हैं; धुन 'मैक्स। में। उड़ान। अनुरोध। per. कनेक्शन 'पहचान के साथ।
- पर्याप्त पार्टियां; एनवीएमई ड्राइव 10/25G ग्रिड; जेवीएम जीसी सेटिंग्स।
- सही समूह प्रबंधन, 'अधिकतम। सर्वेक्षण। अंतराल। सुश्री ', बैकऑफ में पार्टियों को रोकें।
- प्रकाशक कसाई में पुष्टि करता है; चैनल फिर से उपयोग करते हैं।
- 'प्रीफेच' (उदा। 50-300) उपचार समय द्वारा; बड़े बैकलॉग के लिए आलसी कतारें।
- नोड्स के लिए गर्म कतारें पोस्ट करें; टीसीपी ट्यून/फ़ाइल विवरणकर्ता।
iGaming के लिए विशिष्ट पैटर्न
डोमेन घटनाओं के विश्वसनीय प्रकाशन के लिए आउटबॉक्स + काफ्का (शर्त रखी गई, जमा क्रेडिट)।
एकीकरण के लिए तुल्यकालिक अनुरोध के लिए RabbitMQ RPC (KYC दस्तावेज़ जांच, छूट गणना)।
सागा पैटर्न: प्रतिपूरक चरणों के साथ घटनाओं (काफ्का) और टीमों (रैबिटएमक्यू) के माध्यम से ऑर्केस्ट्रेशन।
फैन-आउट सूचनाएं: एक घटना से → CRM, एंटी-फ्रॉड, एनालिटिक्स।
प्रगतिशील देरी और डीएलक्यू के साथ स्मार्ट-रीट्री पीएसपी वेबहूक।
माइग्रेशन और हाइब्रिड आर्किटेक्चर
"ऑपरेटिंग सिस्टम" के लिए RabbitMQ के साथ शुरू करें, घटनाओं और एनालिटिक्स के लिए काफ्का जोड़ें।
डुप्लिकेट प्रकाशन: सेवा → आउटबॉक्स → कनेक्टर दोनों दिशाओं में (काफ्का + RabbitMQ) पूर्ण स्थिरीकरण तक।
धीरे-धीरे एनालिटिक्स/स्ट्रीम एग्रीगेशन ग्राहकों को काफ्का स्ट्रीम/ksqlDB में पलायन करें।
मिनी चयन जाँच सूची
1. लोड/टीपीएस> दसियों हज़ार/सेकंड? → काफ्का।
2. एक पत्रिका से प्रतिधारण और फिर से पढ़ ने की आवश्यकता है? - काफ्का।
3. लचीली रूटिंग, प्राथमिकताएं, विलंबित डिलीवरी, आरपीसी? → RabbitMQ।
4. सख्त कुंजी क्रम और क्षैतिज स्केल → काफ्का (कुंजी/पक्ष)।
5. संगामिति नियंत्रण के साथ सरल कार्य/कार्य-केयू → RabbitMQ।
6. आदर्श रूप से, एक संयोजन: काफ्का (घटनाएँ) + RabbitMQ (ऑर्केस्ट्रेशन)।
न्यूनतम विन्यास के उदाहरण
उदाहरण: RabbitMQ में विलंबित रिट्राई और DLQ (नीति के माध्यम से)
कार्य कतार: 'psp। webhooks। क्यू '
रेट्रास कतार: 'psp। webhooks। फिर से कोशिश करें 1 मी। q '(TTL = 60 के दशक, DLX वापस परिचालन के लिए इंगित करता है)
DLQ: 'psp। webhooks। dlq '
नीतियां (वैचारिक रूप से):- 'psp। webhooks। Q '→' एक्स-डेड-लेटर-एक्सचेंज = psp। फिर से कोशिश करें। आदान-प्रदान '
- 'psp। webhooks। फिर से कोशिश करें। 1 मी। Q '' x-message-ttl = 60000 ',' एक्स-डेड-लेटर-एक्सचेंज = psp। काम करते हैं। आदान-प्रदान '
- 'psp। webhooks। dlq '→ मॉनिटरिंग और मैनुअल डिबगिंग।
उदाहरण: काफ्का का सट्टेबाजी विषय
विषय: 'दांव। रखा। v1 ', पार्टियां: 24, आरएफ = 3, प्रतिधारण 7 दिन।
संदेश कुंजी 'player _ id' या 'bet _ id' है (चुनें जो क्रम के लिए अधिक महत्वपूर्ण है)।
Схема: Protobuf/Avro с 'bet _ id', 'player _ id', 'स्टेक', 'ऑड्स', 'ts', 'idempotency _ key'।
परीक्षण और गुणवत्ता
अनुबंध परीक्षण निर्माता/उपभोक्ता + स्कीमा रजिस्ट्री।
अराजकता परीक्षण: नोड ड्रॉप, नेटवर्क देरी, विभाजन-मस्तिष्क।
लोड लक्ष्य TPS, p99 चेक, लैग ग्रोथ और रिकवरी के साथ चलता है।
सारांश
काफ्का - घटना राजमार्ग और स्ट्रीमिंग: प्रमुख आदेश, प्रतिधारण/संपीड़न, उच्च टीपीएस, वास्तविक समय एनालिटिक्स।
RabbitMQ - परिचालन कार्य कतार: लचीला मार्ग, पुष्टि, प्राथमिकताएं, रिट्रे/डीएलक्यू, आरपीसी।
IGaming में, सबसे अच्छा अभ्यास पूरक उपयोग है: काफ्का में घटनाओं और एनालिटिक्स, RabbitMQ में एकीकरण/ऑर्केस्ट्रेशन कार्य, समान स्कीमा मानकों, पहचान, निगरानी और सख्त SLO के साथ।