GH GambleHub

Շարդինգը և տվյալների կոդավորման կրկնօրինակումը

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

Ռուսական ռեզյումե

IGaming պլատֆորմների համար հաճախորդների աճը (տոկոսադրույքներ, ավանդներ, PSA webhuks, խաղերի իրադարձություններ) և հասանելիության պահանջները (3699։ 9–99. 99%) արագորեն հենվում են մեկ BD-ի սահմաններում։ Կրկնօրինակումը տալիս է ընթերցանության և անկայունության հորիզոնական մեծացում։ Շարդինգը ձայնագրման և տվյալների հորիզոնական մեծացում է։ Բանալին PACELC-ի գիտակցված փոխզիջումներ են (հրաժարվելուց հետո ՝ CA/P, հակառակ դեպքում ՝ Latency vs Consistency), հստակ SLO և սխեմաների կարգապահություն/։


Տերմինները և մոդելները

Կրկնությունը հանգույցների միջև տվյալների պատճենումն է։

Leader-Follower (Primary-Replica), մեկ ձայնագրություն շատ ընթերցումներ է կատարվում։

Multi-Leader (Active-Action) 'ձայնագրություններ մի քանի տարածաշրջաններում, հակամարտություններ/մերջ։

Consensus-replant (Raft/Paxos, Direct SQL): Cassandra/Scylla - AP-quorums, CockroachDB/Yugabyte - CP-kuma)։

Winnc/Semi-entnc/Async: vs RPO-ի ուշացման հավասարակշռությունը։

Շարդինգը աղյուսակների/աղյուսակների հորիզոնական բաժանումն է շարդների վրա։

Hash-sharding (հավասարություն, ավելի բարդ է, քան միջակայքը)։

Range-շարդինգը (միջակայքը), «տաք» վերջի ռիսկը։

Consistent hashing (փափուկ ավելացում/նոդի սպանում)։

Geo-շարդինգը (տարածաշրջանի/իրավասության)։

Ֆունկցիոնալ շարդինգը (բյուջեներով 'վճարումներ/տոկոսադրույքներ/CRM)։


Երբ և ինչ ընտրել iGaming-ում

Միայն կրկնօրինակումը (առանց շարդինգի), երբ ընթերցման հիմնական խնդիրը 'իրադարձությունների ժապավենները, հաշվետվությունները, հրապարակայնությունը և։ Գրառումները տեղադրվում են մեկ առաջնորդի, ընթերցանության մեջ 'կրկնօրինակով։

Շարդինգը, երբ ձայնագրման/պահեստավորման նեղ տեղն է 'շարժիչների հոսքը, հավասարակշռությունների գործարքները, ձգողական իրադարձությունները։

Multi-region:
  • Խաղացողների/PSA-ի լատենտը տեղական ընթերցումներ է տալիս կրկնօրինակով։
  • Կարգավորողը (տվյալների տեղայնացումը) մեջբերում է geo-շարդինգը։
  • Միջտարածաշրջանային DR-ն բացատրում է ասինխրոն կրկնօրինակը + պլանը։

PACELC և երաշխավոր հատկություններ

CAP 'ցանցում մենք ընտրում ենք C (կոնսիստենտություն) կամ A (հասանելիություն)։

PACELC 'ձախողումների բացակայության դեպքում ընտրում ենք Latency (L) և Consistency (C) միջև։

Կանխիկ ճանապարհները (հավասարակշռություն, ապամոնտաժում), սովորաբար C/strict serializable կամ Serializable + բիզնես idempotent)։

Ավելի քիչ քննադատական ենթահամակարգեր (կլիկաների, կոդերի) 'L-կողմնորոշված (AP/EC, eventae)։


Կրկնօրինակումը 'պրակտիկա

Leader–Follower

Ռուսական առաջնորդի գրառումները, ռուսական կրկնօրինակի ընթերցումները (read scaling)։

Read-after-write: Օգտագործողի վիրահատությունների համար կատարվում է առաջնորդի հետ կամ սպասեք լագին (ստուգում 'lport _ committed _ lsn/' wait _ for _ replay _ lag)։

Semi-nc-ը կրիտիկական ճանապարհների վրա (RPO-ի նվազումը լատենտության գնով)։

Failover: ավտոմատ (patroni/raft-2019) + fencing (որպեսզի կրկնակի առաջնորդ չլինի)։

Multi-Leader

Այն հարմար է բաժանված օրինագծերի և ցածր հակամարտության համար (օրինակ ՝ բովանդակություն/օրինակ), բայց ոչ խաղացողի մեկ հաշվի համար առանց հատուկ միջոցառումների։

Մերջի քաղաքական գործիչները ՝ last-write-interns, CRDT, վճարման կանոններ։

Consensus/Quorum BD

Քվորումի ձայնագրությունը (օրինակ ՝ «WRITE SYRUM»), կվորումի ընթերցումը («READ SYRUM») ուժեղ/հարմարեցված կոնսիստենտություն է։

Հաշվի առեք-AZ/տարածաշրջանների լատինականությունը և կվորումի արժեքը։


Շարդինգ 'ռազմավարություններ և բանալիների ընտրություն

Ինչպես ընտրել բանալին

Կայուն բաշխումը player _ id/account _ id/bet _ id։

Խուսափեք մոնոտոնային բջիջներից (105-incream) range շարդինգում '«տաք» պոչը։

Վճարումների համար հաճախ «player _ id» կամ «account _ id»; լոգարանների համար '«event _ time» + bucketing; բովանդակության համար 'tenium _ id'։

Ռազմավարություններ

Hash-sharding-ը player _ id-ով 'հավասարակշռություն 112/հավասարակշռության հոսքի վրա։

Range-շարդինգը ժամանակի ընթացքում վերլուծության/արխիվների համար։

Geo-sharding: EU խաղացողները մեջբերում են EU-shard (տեղական օրենքների համապատասխանությունը)։

Հիբրիդ 'hash տարածաշրջանի ներսում + geo իրավասության մեջ։

Պայքարը «տաք» բեկորների դեմ

Key-salting (ավելացնել աղ/bucket բանալին)։

Write-throttling-ը իրականում, կոմունի հերթերը (serial executor)։

Նյութականացնել «ագրեգատները» (հավասարակշռությունը) առանձին տարբերակով հաջորդականության հերթով։


Քրոս Շարդի վիրահատությունները

Դրամական փոխանցումը/փոխհատուցումը 'խուսափել 2PC-ից տաք ճանապարհներով։

Saga-pattern: կոտրել տեղական գործարքների վրա + փոխհատուցող գործողություններ, կոշտ կուռքեր և www.box։

2RS/համայնքի արձանագրությունները 'թույլատրելի են կետային (back-գրասենյակային), բայց թանկ են լատենտով և անկայունությամբ։

Պրոյեկտներ ՝ ընթերցողական ներկայացումներ (read models) միջմայրցամաքային էկրանների համար, որոնք նորարարվել են սթրիմից։


Սխեմաներ, ինդեքսներ և էվոլյուցիա

Սխեմայի տարբերակումը 'back-compat, feature-flags կոդի վրա։

Ինդեքսները շարդինգի մասերի և հաճախակի պահանջների մասին։ խուսափել cross-shard join (արեք pre-join/denormalization)։

JSON/dook պահեստավորման համար - validium սխեմաները (JSON-Schema/Drobuf) և TTL-ը «աղմկոտ» հավաքածուների համար։


Առցանց մեծացում և resharding

Պլանավորեք N-ը վիրտուալ գնդակների (slots) ներկա քանակն է ճկուն ռեբլալանսը։

Consistent hashing-ը կամ «վիրտուալ նոդները» հանգույցների փափուկ ավելացման համար։

Onls-resharding

կրկնակի ձայնագրություն (հին + նոր գնդակ), պահպանողականության վալիդացիա;

Չանկերի ֆոնային պատճենները (logical dump/table move/streaming clone);

«Մարկերի» միջոցով + դիտարկման պատուհանը, ապա կրկնակի ձայնագրումը։

Առաջնորդի տեղափոխումը առանց անցյալի 'դերերի փոխակերպումը, կոնդենսացիան։


SLO, դիտարկումը և ալերտինգը

SLO ձայնագրություններ/ընթերցումներ: p99 մգ X ms տաք գյուղացիների վրա, թույլատրելի lag կրկնօրինակը Y- վայրկյանում, www.Z- ի հասանելիությունը։

Մետրիկները ՝ TPS, p95/p99, replanslag, հակամարտություն (multi-leader), retry rate, deadlocks, wait, cache hit ratio, IOPS/latency սկավառակ։

Ճանապարհը '«trace _ id», BD-ի պահանջներում, կապել բրոքերի/իրադարձությունների անվադողերի հետ։

Կանարյան հարցումները և www.nthetic transactions-ը վաղ դեգրադացիայի համար։


Անվտանգությունը և պահանջների համապատասխանությունը

Կոդավորումը հանգստի և տրանզիտում (TFC), կոդավորման մեջ։

RBAC/ACL, խողովակաշարերի/տենանտների հատվածներ, առանձին վճարումների համար/KUS։

Տվյալների տեղայնացումը (EU/TR/LATAM) - համատեղեք geo-շարդինգը և վերականգնման քաղաքականները։

Աուդիտ 'ով և ինչ էր կարդում/կանոններ։ PII դիմակավորում; ռուսական էքսպորտը։


Bakaps, PITR, DR

Ամբողջական + պերիմենտալ bakaps, օֆսայթ պահեստ։

PITR (point-in-time recovery) առաջնորդի կլաստերների համար։

RPO/RTO:
  • Կրիտիկական ֆորումները (հավասարակշռություն) - RPO 240-30c (semi-winnc կամ հաճախակի WAL-shipping), RTO-ը 210 րոպե ավտոմատ failover հետ։
  • Ավելի քիչ քննադատական 'RPO մինչև րոպե/ժամ։
  • DR ուսուցումները (game day) և փաստաթղթավորված runbook-ը։

Արտադրողականությունը և թյունինգը (հակիրճ)

Հիշողությունը/քեշը 'ավելացրեք (shared buffers/innodb buffer pool), հետևեք cache-hit-95 տոկոսին։

Ամսագիրը/շարժիչը 'արագ NVMe, առանձին WAL/redo-ի տակ։

Պուլ կղզիներ (PgBouncer/Hikari)։

Պլանավորող/վիճակագրությունը 'ավտովանալիզա/ավտովակում (Postgres), GC (LSM շարժիչներ) կոմպակտիա/թյունինգ։

Քվորումի/կրկնօրինակման գործոնը 'հավասարակշռությունը p99-ի և ձախողման միջև։


iGaming-ի տիպիկ տոպոլոգիաներ

1) Հավասարակշռություններ և վճարումներ (CP-2019)

Leader-Follower-ը խաղացողի տարածքում, semi-winnc-ը մոտ կրկնօրինակին։

Hash-շարդինգը 'account _ id'։

Կարդալը «ձայնագրությունից հետո» առաջնորդից։ Redis-ում API-latency-ի համար։

Medibox-ը կանխատեսում է իրադարձությունների անվադողերը ռուսական/վերլուծության համար։

2) Ռուսական/խաղային իրադարձությունների պատմությունը (AP-կողմնորոշված լոգ)

Range-շարդինգը ժամանակի կամ hash-ով 'player _ id' կոլոնայում/LSM-պահեստում։

Ասինխրոն կրկնօրինակներ հաշվետվության/OLAP-ի համար։

Eventium consistency ընդունելի է, ավելի կարևոր է թողունակությունը։

3) Պրոֆիլի/CRM (Multi-region read, տեղայնացում)

Geo-շարդինգը իրավասության մեջ, տեղական դիտողություններ կարդալու համար։

Գրառումները մոտակա առաջնորդի միջոցով։ Քրոս շրջան 'ասինխրոն + հակամարտությունների լուծումը միայն ոչ ռիթմիկ դաշտերի համար։


Օրինակներ (հայեցակարգային)

Postgres: Player _ id '

sql
CREATE TABLE player_wallet (
player_id BIGINT NOT NULL,
balance_cents BIGINT NOT NULL,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
PRIMARY KEY (player_id)
) PARTITION BY HASH (player_id);

CREATE TABLE player_wallet_p0 PARTITION OF player_wallet FOR VALUES WITH (MODULUS 32, REMAINDER 0);
--... p1..p31

-- Репликация: публикация WAL на реплики, синхронность для «горячего» региона.
ALTER SYSTEM SET synchronous_standby_names = 'FIRST 1 (replica_eu1, replica_eu2)';

Կվորումի ձայնագրությունը (կեղծ)


WRITE CL=QUORUM  -- запись подтверждена большинством реплик
READ CL=LOCAL_QUORUM -- локальный кворум для низкой задержки

Սագա 2PC-ի փոխարեն (պարզեցված)

1. Ապամոնտաժել շարդ-A-ի վրա (idempotent)։

2. Ուղարկել իրադարձությունը «նկարահանված» ռուսական ծառայությունը (Շարդ-B)։

3. Եթե երկու քայլը անհաջող է, ապա փոխհատուցեք քայլը 1-ին իրադարձությամբ «112»։


Ներդրման չեկի ցուցակ

1. Տվյալների ալգորիթմները և SLO (p99, RPO/RTO, լագը կրկնօրինակը)։

2. Ընտրեք վերարտադրման մոդել (leader/follower, kvorum) և շարդինգի ռազմավարություն։

3. Ամրագրեք շարդինգի և սխեմայի բանալիները (անփոփոխ)։

4. Մուտքագրեք read-after-write քաղաքականությունը և ընթերցանության միկրոակտիվացումը։

5. Նախագծեք on.ru-resharding (վիրտուալ շարդներ, կրկնակի ձայնագրություն)։

6. Երաշխավորել idempotention և www.box իրադարձությունների համար/թիմերի համար։

7. Պարամետրերը, PITR, DR և ռուսական ուսմունքները։

8. Միացրեք դիտարկումը 'լագ, կվորումա, տաք բանալիներ, հակամարտություններ։

9. Փաստարկեք runbook: failover, split-brain, դեգրադացիա։

10. Անցկացրեք բեռ/քաոս թեստեր խաղային պիկի տակ։


Antipatterns

Մի հսկա գնդակ «ամեն ինչի վրա» և «հետո կտրենք»։

Cross-shard-join-ները տաք հարցման ճանապարհին։

Read-after-write քաղաքականության բացակայությունը (լողացող ուղիներ)։

Համապատասխան սխեմաները «կոտրող» շարդինգի բանալիները։

Multi-leader դրամական հաշիվների համար առանց խիստ ֆինանսական հակամարտությունների։

Ոչ PITR/DR-ը անհնար է վերականգնվել տրամաբանական սխալից հետո։


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

Կրկնօրինակումը լուծում է ընթերցանությունն ու անկայունությունը, շարդինգը 'ձայնագրությունները և ծավալը։ iGaming-ում հաջողակ ճարտարապետությունը պարզ SLO և PACELC փոխզիջումներ են, շարդինգի կայուն բանալիները, նվազագույն քրոսային-շարդային համակարգումը (սագա 2PC-ի փոխարեն), read-after-write կարգապահությունը, որը կարգադրվել է onault-resharding և DR-ուսուցումները։ Այս մոտեցումը մեծանում է ածխաջրածինների պիկի տակ, դիմանում է տվյալների ավելացման կարգավորող սահմանափակումներին և մնում է կանխատեսելի շահագործման մեջ։

Contact

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

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

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

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

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

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