Шарҳи пойгоҳи додаҳо ва нусхабардорӣ
(Қисм: Технология ва инфрасохтор)
Хулосаи мухтасар
Барои платформаҳои IGaming, афзоиши трафик (гаравҳо, амонатҳо, вебхукҳои PSP, чорабиниҳои бозӣ) ва талабот ба дастрасӣ (≈ 99). 9–99. 99%) зуд ба маҳдудияти як DB зад. Реплика миқёси уфуқии хониш ва таҳаммулпазирии гуноҳро таъмин мекунад; sharding - миқёси уфуқии сабт ва маълумот. Калид ин созишномаҳои огоҳонаи PACELC мебошад (пас аз нокомӣ: CA/P, дар акси ҳол: Latency vs Consistency), SLO-ҳои тоза ва интизоми схема/интизоми асосӣ.
Истилоҳот ва моделҳо
Нусхабардорӣ - Нусхабардории маълумот дар байни сайтҳо.
Роҳбар-пайрав (ибтидоӣ-реплика): як вуруд → бисёр мехонад.
Multi-Leader (Active-Active): вурудот дар якчанд минтақаҳо, муноқишаҳо/якҷояшавӣ.
Такрори консенсус (Raft/Paxos, NewSQL): сабтҳои кворум (Кассандра/Скилла - кворумҳои AP, Cockroach .DB/Yugabyte - кворумҳои CP).
Sync/Semi-sync/Async: тавозуни таъхир vs RPO.
Sharding - тақсимоти уфуқии ҷадвалҳо/калидҳо аз рӯи shards.
Hash-sharding (якрангӣ, диапазонҳои сахттар).
Диапазон (диапазонҳои асосӣ, хатари охири гарм).
Хэшинги пайваста.
Ҷуғрофия (аз рӯи минтақа/қаламрав).
Sharding функсионалӣ (аз рӯи домен: пардохтҳо/нархҳо/CRM).
Кай ва чӣ интихоб кардан дар IGaming
Танҳо нусхабардорӣ (якбора нест) - вақте ки мушкилоти асосӣ хондан аст: каналҳои чорабиниҳо, гузоришҳо, феҳристҳои ҷамъиятӣ. Сабтҳо дар як пешво гузошта мешаванд, аз нусхаҳо хонда мешавад.
Sharding - ҳангоми душвориҳои навиштан/нигоҳ доштан: ҷараёни нархҳо, муомилоти тавозун, рӯйдодҳо.
- Таъхири Player/PSP → аз нусхаҳои маҳаллӣ хонда мешавад.
- Танзим (маҳаллисозии маълумот) → гео-шарк.
- Нақшаи байниминтақавии DR → асинхронӣ + нақшаи гузариш.
Хусусиятҳои кафолати PACELC
CAP: бо шабакаи тақсимшуда, C (пайдарҳамӣ) ё A (мавҷудият) -ро интихоб кунед.
PACELC: агар ягон хатогӣ набошад, байни Latency (L) ва Consistency (C) -ро интихоб кунед.
Роҳҳои нақдӣ: одатан ба C нигаронида шудааст (CP/serializable ё Serializable + idempotency business).
Зерсистемаҳои камтар интиқодӣ (кликҳои сабти ном, феҳристҳо): L-нигаронидашуда (AP/EC, оқибат).
Амалияи такрорӣ
Роҳбар-пайрав
Менависад → роҳбар, мехонад, → миқёси хондан.
Хондан пас аз навиштан: барои амалиёти корбар, аз роҳбар хонед ё ақибмондагиро интизор шавед (санҷед 'last _ overed _ lsn '/' wait _ for _ replay _ lag').
Синхронизатсия дар роҳҳои критикӣ (кам кардани RPO аз ҳисоби таъхир).
Нокомӣ: ҳамоҳангсози автоматӣ (patroni/raft) + тавораҳо (то ки пешвои дугона вуҷуд надошта бошад).
Мулти-пешво
Мувофиқ барои доменҳои тақсимшуда ва муноқишаи паст (масалан, мундариҷа/танзимот), аммо на барои ҳисоби ягонаи бозингар бидуни ченакҳои махсус.
Якҷоя кардани сиёсатҳо: охирин навиштан-ғолиб, CRDT, қоидаҳои муттаҳидсозии домейн.
Пойгоҳи додаҳои консенсус/кворум
Навиштани кворум (масалан, 'WRITE QUORUM'), хониши кворум ('READ QUORUM') → мувофиқати қавӣ/танзимшаванда.
Дар бораи таъхири байни AZ/минтақа ва арзиши кворум фикр кунед.
Sharding: Стратегияҳо ва интихоби калидӣ
Чӣ тавр калидро интихоб кардан мумкин аст
Тақсимоти устувор аз ҷониби player_id/ account_id/ bet_id.
Нагузоред, ки калидҳои якхела (худкор афзоиш) дар думи диапазон - думи "гарм".
Барои пардохтҳо - аксар вақт 'player _ id' ё 'account _ id'; барои гузоришҳо - 'event _ time' + сатил; барои мундариҷа - 'иҷорагир _ ид'.
Стратегия
Hash-sharding by player_id: тавозун дар ҷараёни нархҳо/тавозунҳо.
Мубодилаи вақт дар асоси диапазон барои таҳлил/бойгонӣ.
Geo-sharding: Бозингарони ИА → Иттиҳоди Аврупо (риояи қонунҳои маҳаллӣ).
Гибрид: ҳаш дар минтақа + гео аз рӯи салоҳият.
Мубориза бо калидҳои гарм
Намаки калидӣ (ба калид намак/сатил илова кунед).
Навиштан-дротлинг аслан навбати фармон аст (иҷрокунандаи силсилавӣ).
"Агрегатҳо" (тавозун) -ро дар қатори алоҳида бо навбати пайдарпай амалӣ кунед.
Амалиёти кросс-шард
Интиқоли пул/ҷуброн: аз роҳҳои гарм дурӣ ҷӯед.
Намунаи Saga: тақсим ба транзаксияҳои маҳаллӣ + амалҳои ҷубронӣ, idempotence сахт ва outbox.
2PC/commit протоколҳо: нуқтаи иҷозатдодашуда (бастаҳои бэк-офис), аммо дар ниҳоят гарон ва таҳаммулпазирии гуноҳ.
Дурнамоҳо: моделҳои хондан барои экранҳои домейнҳо, ки аз ҷараён нав карда мешаванд.
Схемаҳо, нишондиҳандаҳо ва эволютсия
Версияи схема: муҳоҷират аз back-compat, парчамҳои хусусият дар рамз.
Нишондиҳандаҳо дар бораи калидҳои тез ва дархостҳои зуд-зуд; аз пайвастани кросс-шард канорагирӣ кунед (пеш аз ҳамроҳ/denormalization).
Барои анборҳои JSON/docking - схемаҳоро тасдиқ кунед (JSON-Schema/Protobuf) ва TTL барои коллексияҳои "ғалоғула".
Миқёси онлайн ва азнавсозӣ
Ба нақша гиред, ки шумораи shards (слотҳо) → мувозинати тағйирёбанда дошта бошед.
Хэшинги пайваста ё "гиреҳҳои виртуалӣ" барои илова кардани гиреҳи мулоим.
- вуруди дукарата (кӯҳна + shard нав), тасдиқи пайдарҳамӣ;
- нусхаҳои пасзаминаи қисмҳо (партови мантиқӣ/ҳаракати миз/ҷараёни клон);
- гузариш аз ҷониби "маркер" + равзанаи мушоҳида, пас дубора сабт кунед.
- Ҷойивазкунии пешво бидуни истироҳат: иваз кардани нақшҳо, пайвастшавӣ.
SLO, мушоҳида ва огоҳӣ
SLO нависед/хонед: p99 ≤ X ms дар мизҳои гарм, нусхаҳои ақибмонда ≤ Y сония, мавҷудият ≥ Z.
Нишондиҳандаҳо: TPS, p95/p99, ақибмонии такрорӣ, бисёр пешво, суръати такрорӣ, монеаҳо, интизории қулф, таносуби зарбаи кэш, IOPS/диски ниҳонӣ.
Пайгирӣ: 'trace _ id' дар дархостҳои пойгоҳи додаҳо, ҳамроҳ бо брокер/автобуси ҳодиса.
Дархостҳои канарӣ ва амалиётҳои синтетикӣ барои ташхиси барвақти таназзул.
Амният ва мувофиқат
Рамзгузорӣ ҳангоми истироҳат ва транзит (TLS), гардиши калидҳо.
RBAC/ACL, тақсимот аз ҷониби домен/иҷорагир, кластерҳои алоҳида барои пардохт/LCC.
Маҳаллисозии маълумот (EU/TR/LATAM) - сиёсати ҷуғрофӣ ва нигоҳдориро муттаҳид мекунад.
Аудит: кӣ ва чӣ хонда/қоидаҳо; Ниқоби PII; Аудити содиротӣ.
Нусхабардорӣ, PITR, DR
Нусхабардории пурра + афзоишёбанда, нигаҳдории берунӣ.
PITR (барқароркунии вақт-вақт) барои кластерҳои пешво.
- Соҳаҳои интиқодӣ (тавозун/пардохт) - RPO ≈ 0-30 (нимҳаракат ё зуд-зуд интиқол додани WAL), RTO ≤ дақиқа бо нокомии автоматӣ.
- Камтар танқидӣ - RPO то дақиқа/соат.
- Машқҳои DR (рӯзи бозӣ) ва дафтарчаи сабтшудаи гузариш.
Иҷро ва танзими (мухтасар)
Хотира/кэш: зиёд кардани буферҳо (буферҳои муштарак/ҳавзи буферии innodb), назорат кардани кэш-хит ≥ 95%.
Маҷалла/муҳаррик: NVM-и зуд, ҳаҷми алоҳида дар зери WAL/redo.
Ҳавзи пайвастшавӣ (PGBouncer/Hikari).
Банақшагирӣ/омор: худкори таҳлил/худкори вакуум (Postgres), фишурдасозӣ/танзими GC (муҳаррикҳои LSM).
Омили кворум/реплика: тавозун байни p99 ва таҳаммулпазирии гуноҳ.
Топологияҳои маъмулӣ барои IGaming
1) Тавозун ва пардохтҳо (CP-ҳалқа)
Роҳбар-пайрав дар минтақаи плеер, нимҳимоятгар ба нусхаи наздик.
Hash-sharding аз ҷониби 'account _ id'.
Мутолиаи "баъди навиштан" - аз роҳбар; пешгӯиҳо ба Редис барои API-ниҳонӣ.
Outbox → автобуси ҳодиса барои ҳисобҳо/таҳлил.
2) Таърихи букмекерӣ/рӯйдодҳои бозӣ (сабти ба AP нигаронидашуда)
Диапазон аз рӯи вақт ё хэш аз ҷониби 'player _ id' дар сутун/нигоҳдории LSM.
Нусхаҳои асинхронӣ барои гузориш/OLAP.
Мувофиқати оқибат қобили қабул аст, фарохмаҷро муҳимтар аст.
3) Профилҳо/CRM (Хондани бисёр минтақа, маҳаллисозӣ)
Ҷуғрофия аз рӯи салоҳият, нусхаҳои маҳаллӣ барои хондан.
Воридот тавассути роҳбари наздиктарин; минтақаи байнисоҳавӣ - асинхронӣ + ҳалли муноқишаҳо танҳо барои соҳаҳои ғайримуқаррарӣ.
Намунаҳо (консептуалӣ)
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. Пасандозро ба shard-A (idempotent) хориҷ кунед.
2. Ирсоли чорабинӣ "хориҷ" → хадамоти пардохт (shard-B).
3. Агар қадами 2 иҷро нашавад, қадами 1-ро бо ҳодисаи "бозгашт" ҷуброн кунед.
Рӯйхати санҷиши амалисозӣ
1. Доменҳои маълумот ва SLO-ҳоро муайян кунед (p99, RPO/RTO, сабти нусхабардорӣ).
2. Модели такрорӣ (пешво/пайрав, кворум) ва стратегияи sharding -ро интихоб кунед.
3. Калидҳои тез ва схемаро ислоҳ кунед (тағирнопазир аст!).
4. Сиёсати пас аз навиштан ва хатсайрҳои хонишро нависед.
5. Тарроҳии онлайн (shards виртуалӣ, вуруди дугона).
6. idempotency ва outbox-ро барои рӯйдодҳо/фармонҳо таъмин кунед.
7. Насб кардани нусхаҳои эҳтиётӣ, PITR, DR ва машқҳои мунтазам.
8. Мушоҳидаҳоро дар бар гиред: ақибмонӣ, кворумҳо, калидҳои гарм, муноқишаҳо.
9. Дафтарчаи ҳуҷҷатӣ: нокомӣ, тақсимшавӣ, таназзул.
10. Дар қуллаҳои мувофиқ санҷишҳои сарборӣ/бетартибӣ анҷом диҳед.
Анти-намунаҳо
Як риштаи азим "барои ҳама чиз" ва "пас бурида".
Кросс-шард ба роҳи гармии дархост ҳамроҳ мешавад.
Сиёсати хондан пас аз навиштан нест (иштибоҳҳои шинокунанда).
Муҳоҷирати схемаҳо калидҳои тезро "вайрон" мекунанд.
Роҳбари бисёрҷониба барои суратҳисобҳои пулӣ бидуни ҳалли қатъии муноқишаҳо.
Не PITR/DR - Натавонистам аз хатои мантиқӣ барқарор шавам.
Натиҷаҳо
Реплика хондан ва тобовариро ҳал мекунад, якбора навиштан ва ҳаҷмро ҳал мекунад. Архитектураи муваффақ дар IGaming ин созишномаҳои равшани SLO ва PACELC, калидҳои устувори устувор, ҳадди аққал ҳамоҳангсозии байнисоҳавӣ (ба ҷои 2PC), интизоми хондан пас аз навиштан, азнавсозии хуби онлайн ва машқҳои муқаррарии DR мебошад. Ин равиш ба қуллаҳои мусобиқа меафзояд, ба маҳдудиятҳои танзимкунандаи маҳаллисозии маълумот тоб меорад ва дар амал пешгӯишаванда боқӣ мемонад.