GH GambleHub

Հաղորդագրությունների գծերը ՝ Kafka և RabbitMQ

Հաղորդագրությունների գծերը ՝ Kafka, RabbitMQ

(Բաժին ՝ Տեխնոլոգիաներ և ենթակառուցվածքներ)

Live ռեզյումե

Հաղորդագրությունների հերթերը iGaming-ում իրադարձական կողմնորոշված ճարտարապետության հիմքն են (EDA)։ Նրանք կապում են միգրանտների, վճարումների, հակաֆրոդի, CRM, նոտարական և վերլուծաբանների։ Գործնականում ամենից հաճախ հանդիպում են որոշումների երկու դասարաններ

Apache Kafka-ը իրադարձությունների բաշխված ամսագիր է (log), հիմնված է հոսքի մշակման, կրկնապատկման և հորիզոնական սկեյլինգի միջոցով կուսակցության միջոցով։

RabbitMQ-ը AMQP-ի հերթերի բրոկերն է, ճկուն միկրոօրգանիզացիայի հետ (exchanges/bindings), գերակայությունները, TTL-ը, ապացույցները և հերթերի դասական առաջադրանքները։

Երկու գործիքները հասուն են, բայց լուծում են տարբեր խնդիրներ 'Kafka-ը' մեծացված սթրիմների և վերլուծաբանների համար, RabbitMQ-ը 'առաջադրանքների, RPC և բազմաշերտ ուղղման համար։

Որտե՞ ղ է տեղին iGaming-ում

Kafka-ը ընտրում ենք, երբ

Անհրաժեշտ են բարձր TPS իրադարձություններ (տոկոսադրույքներ, խաղային իրադարձություններ, հեռուստացույցներ) և հորիզոնական սկեյլ կուսակցության միջոցով։

Կարևոր է սառը/տաք re-condum (լենտային տվյալների կրկնվող կարդալը), ռենտենշը և կոմպակշինը ագրեգատների համար (հավասարակշռություն, խաղացողի վիճակը)։

Անհրաժեշտ են հոսքային գործընթացներ (Kafka Streams/ksqlDB/Flink) realtime-ագրեգատների համար 'մրցույթների առաջնորդներ, պատասխանատու խաղի սահմաններ, հակաֆրոդ ազդանշաններ։

RabbitMQ-ն ընտրում է, երբ

Առաջադրանքների դասական գծեր 'KYC-ստուգում, հետաձգված/կրկնվող վճարումներ, e-mail/SMS/push, webhooks PBS։

Ճկուն միկրոօրգանիզացիա (topic/www.ru/fanout), գերակայություններ, TTL, dead-letter և RPC-patterns։

Պահանջում են խիստ per-consumer սահմանափակումներ (www.fetch/QoS), բեռի պարզ կառավարում և արագ ռետրեր։

Հաճախակի արդյունքը 'Kafka իրադարձությունների և վերլուծությունների համար + RabbitMQ նվագախմբի և ինտեգրման համար։

Տվյալների մոդելը և երթուղայնացումը

Kafka

Տեղանունները բաժանվում են կուսակցության վրա, յուրաքանչյուրը կարգավորված լոգ է։

Հաղորդագրության ստեղնը որոշում է վերջնական պատվիրման կուսակցությունը բանալին։

Կոնսուումերները կարդում են set-ով, կոնսուումերների խմբերը ավելացնում են մշակումը։

Retenshn ժամանակի/ծավալի; log compaction պահում է ստեղնաշարի վերջին տարբերակը։

RabbitMQ

Exchanges (wwww.ru/fanout/topic/headers) + bindings-ի հաղորդագրությունները հայտնվում են queues-ում։

Հաստատումներ (ack/nack/requeue), publisher medirections, priorities, TTL, dead-letter (DLX/DLQ)։

Corrum queues (Raft) բարձր հասանելիության համար։ lazy queues խնայելու RAM։

Առաքման երաշխիքները և գաղափարախոսությունը

At-most-once: առանց retrav; ռիսկը, նվազագույն ուշացումը։

At-leport-once: Լռելյայն պարամետրերը հնարավոր են didempotent hendlers (հարցման բանալին/գործարքի, ups.ru, dedup-2019, wwww.box)։

Exactly-once: Kafka-ում ձեռք է բերվում idempotent dowser + գործարքային տեղանուններ + համաձայնեցված սպառումը, բայց ավելի շատ ավելի թանկ և բարդ։ RabbitMQ-ում սահմանափակ է նաև ոսկորների հետ։ Իրական ստացիոնար/ստեղնաշարային հոսքերում օգտագործվում է at-lement-once + խիստ impotenty։

Idempotenty պրակտիկան

Յուրահատուկ idempotency-keys (UUID/ULID) միջոցառման/թիմի համար։

Windobox-pattern BD-ում + Change Express Capture (Debezae) կանխատեսում է «կրկնակի ձայնագրման» կանխումը։

Dedup-ը (key, created _ at) TTL-ի հետ առանձին աթոռում։

Պատվեր/հաղորդագրությունների կարգը

Kafka-ն երաշխավորում է կուսակցության ներսում կարգը։ Ընտրեք բանալին այնպես, որ մեկ բանալին լինի ամբողջ «կյանքը» էությունը (օրինակ ՝ «player _ id» հավասարակշռության համար)։

RabbitMQ-ի կարգը խիստ երաշխավորված չէ կրկնվող առաքումների/մի քանի կոնսյումերի ժամանակ։ կրիտիկական պարամետրերը ավելի լավ են Kafka-ում կամ single-actival consumer-ի միջոցով և հոսքի շարքը։

Տոպիկների նախագծումը և հերթերը

Kafka:
  • Գրանուլյացիա '"domain. event '(օրինակ ՝ "payments. deposit. created`).
  • Բանալիներ ՝ «player _ id», «account _ id», «bet _ id» պատվիրելու համար։
  • Կուսակցությունը = N-ն TPS-ով (կանոն ՝ 1 կուսակցություն NX հաղորդագրությունների/վայրկյանների/կոնսյուրմերի); բարձրացնել պահուստը։
  • Retenshn 'իրադարձություններ' ժամացույց/օրեր; կոմպակշն է «պետությունների» համար։
RabbitMQ:
  • Exchanges-ը կոդերով '«payments»։ direct`, `risk. topic`.
  • Սպառողների համար գծերը '"kyc. checker. q`, `psp. webhooks. retry. q`.
  • DLQ-ը յուրաքանչյուր աշխատանքային հերթում։ www.ay backoff.
  • Difetch-ը տալիս է զուգահեռ, գծերը ՝ HA-ի համար։

Սխալներ, ակնարկներ և DLQ

Դասակարգեք սխալները 'ժամանակավոր (ցանցային/PMS 5xx) Express; ֆատալ (վալիդացիա, սխեմա) անմիջապես DLQ-ն է։

Exponential backoff + jitter, ռետրերի սահմանը, «poison-pill» դետեկտորը։

Առանձին retry-queues քայլերով (5s, 1m, 5m, 1h)։

DLQ-վերամշակող 'ալերտ, թրեյս, ձեռքով կողպեքներ, փամփուշտներ։

Տվյալների և սխեմայի պայմանագիրը

Օգտագործեք Avro/Delobuf + Schema Registry (Kafka-ի համար - www.de ֆակտո)։

Տարբերակումը 'backward-compatible փոփոխությունը (ավելացնելը), կոտրող տարածքների արգելքը։

PII դաշտերը կոդավորում/թունավորում են։ հետևեք GDPR-ին և տեղական նորմերին։

J, դիտարկումը և SLO

Դիզայներների/կոնսուումերների մետրերը 'lag, throughput, սխալներ, retray, վերամշակման ժամանակ։

Լոգները + թրեյսինգը (հարաբերական ID: «trace _ id», «բանաձև _ id»)։

SLO 'հրապարակման/առաքման պ99-լատենտ, թույլատրելի consumer lag, ֆեյլներից հետո վերականգնման ժամանակը։

Ալերտները DLQ-ի աճի, lag-ի ավելցուկ, կուսակցության/քվորումի անկում։

Անվտանգություն և ընկերակցություն

TFC-ը տրանզիտում, գաղտնիքների կոդավորումը (SOPS/Vox), որը սահմանափակված է ACL/RBAC-ով։

Առանձին տոպիկներ/գծեր զգայուն օրինագծերի համար (վճարումներ, KYC)։

Հրատարակությունների աուդիտ-լոգ/ստորագրություններ, կոդից դուրս պահեստավորում։

Տարածաշրջանային պահանջները (EU/Թուրքիա/LatAm) 'rentenshn, պահեստավորման տեղայնացում, դիմակավորում։

Բարձր հասանելիություն, անկայունություն և DR

Kafka:
  • Կլաստեր 3-5 բրոկերներ առնվազն; replication. factor ≥ 3.
  • min. insync. replicas և acks = all ամուր ձայնագրությունների համար։
  • Քրոս-տարածաշրջանային կրկնօրինակները (MirrorMaker-2) DR-ի համար։
RabbitMQ:
  • Corrum queues-ի համար, HA-ի համար, պարզ/պարզ թիվ, որը կվորումա է։
  • Federation/Shovel-ի միջև, DR-2019։
  • Սառը/տաք պատը, թեստերը։

Արտադրողականություն և թյունինգ

Kafka (վաճառող)

`linger. ms` и `batch. size 'batching; "compression. type` (lz4/zstd).

«acks = all», բայց վերահսկել լատենտությունը։ թյունը 'max։ in. flight. requests. per. connations 'հետ։

Kafka (բրոքեր/տոպիկ)

Բավականին կուսակցություններ; NCD VMe; ցանցը 10/25G; GC-24JVM։

Kafka (կոնսյումեր)

Ճիշտ group 2019, "max. poll. interval. 07 ', դադարեցնել կուսակցությունները բեքոֆի ժամանակ։

RabbitMQ (RabbitMQ)։

Publisher express-ը մարտերում; channels օգտագործել։

RabbitMQ (հերթեր/վահանակներ)

«www.fetch» (օրինակ ՝ 50-300) վերամշակման ժամանակ; lazy queues մեծ beklogs համար։

Կոտրել տաք գծերը նոդների վրա։ TSR/հիբրիդային ձայնագրիչներ։

Տիպիկ արտոնագրեր iGaming-ի համար

Medibox + Kafka-ը երկրորդային իրադարձությունների հուսալի հրապարակման համար (դրույքաչափը տեղադրված է, դեպոզիտը վերացված է)։

RabbitMQ RPC-ը ինտեգրման համաժամանակյա հարցումների համար (KYC փաստաթղթի ստուգումը, բոնուսի հաշվարկը)։

Saga-pattern: Նվագախումբը իրադարձությունների միջոցով (Kafka) և թիմերը (RabbitMQ) փոխհատուցող քայլերով։

Fan-out ծանուցումները 'CRM-ի մեկ իրադարձությունից, հակաֆրոդից, վերլուծաբանից։

Smart-retry PMS-webhuks-ը առաջադեմ ուշացումներով և DLQ-ով։

Միգրացիան և հիբրիդային ճարտարապետությունները

Սկսեք RabbitMQ-ից «վիրահատության» համար, ավելացրեք Kafka իրադարձությունների և վերլուծաբանների համար։

Կրկնօրինակեք հրատարակությունները 'www.box ծառայությունը երկու ուղղություններով կոնեկտոր է (Kafka + RabbitMQ) մինչև ամբողջական։

Աստիճանաբար փոխանցեք բաժանորդներին վերլուծաբաններ/հոսող միավորներ Kafka Streams/ksqlDB-ում։

1. System/TPS> տասնյակ հազարավոր/վրկ? Kafka.

2. Անհրաժեշտ է ռետենշն ու նորից կարդալ որպես ամսագրի ընթերցում։

3. Ճկուն միկրոօրգանիզմներ, գերակայություններ, հետաձգված առաքում, RPC, RabbitMQ։

4. Խիստ կարգը բանալին և հորիզոնական սկեյլը Kafka (բանալին/կուսակցություն)։

5. Պարզ առաջադրանքներ/work-ku զուգահեռ կառավարման հետ RabbitMQ-ն։

6. Իդեալում 'համադրություն' Kafka (իրադարձություններ) + RabbitMQ (նվագախումբ)։

Նվազագույն միգրացիայի օրինակներ

Օրինակ 'ձերբակալված և DLQ-ը RabbitMQ-ում (policy միջոցով)

Աշխատանքային հերթը '"p.ru. webhooks. q`

Գետերի հերթը '' 'p.ru։ webhooks. retry. 1m. q '(TTL = 60s, DLX ցույց է տալիս աշխատանքային)

DLQ: `psp. webhooks. dlq`

Քաղաքական (գաղափարական)

`psp. webhooks. q` → `x-dead-letter-exchange=psp. retry. exchange`

`psp. webhooks. retry. 1m. q` → `x-message-ttl=60000`, `x-dead-letter-exchange=psp. work. exchange`

`psp. webhooks. dlq 'international և ձեռքի վերլուծություն։

Օրինակ 'Kafka տեղանունը ռուսական համար

Թոպիկը '"bets. placed. v1 ', կուսակցությունը ՝ 24, RF = 3, rentenshn 7 օր։

Հաղորդագրության բանալին '«player _ id» կամ «bet _ id» (ընտրեք, որ ավելի կարևոր է կարգի համար)։

Схема: Protobuf/Avro с `bet_id`, `player_id`, `stake`, `odds`, `ts`, `idempotency_key`.

Փորձարկումը և որակը

Direract-թեստերը dowuser/consumer + ստուգել սխեմաները (Schema Registry)։

Chaos-թեստեր 'զրոյի նվազում, ցանցի ուշացում, split-brain։

Ծանրաբեռնվածությունը TPS-ով, p99 ստուգումը, lag աճը և վերականգնումը։

Արդյունքները

Kafka-ը իրադարձությունների մագիստրոսն է և սթրիմինգը 'բանալին, ռետենշն/կոմպակշն, բարձր TPS, իրական ժամանակում վերլուծություն։

RabbitMQ-ը առաջադրանքների վիրահատական հերթն է 'ճկուն միկրոօրգանիզացիա, հաստատում, գերակայություններ, retray/DLQ, RPC։

IGaming-ում ամենալավ փորձը կոմպլեմենտային օգտագործումն է 'Kafka-ի իրադարձություններն ու վերլուծաբանները, RabbitMQ-ում ինտեգրացիոն/նվագախմբային առաջադրանքները, սխեմաների միասնական ստանդարտներով, գաղափարախոսությամբ, մոնիտորինգով և SLO-ով։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։