Հաղորդագրությունների գծերը ՝ 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 'իրադարձություններ' ժամացույց/օրեր; կոմպակշն է «պետությունների» համար։
- 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-ի համար։
- 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-ով։