Меъмории чорабинӣ
Архитектураи чорабинӣ (EDA)
1) Ҳодиса чист ва чаро EDA
Ҳодиса - як далели тағйирнопазире, ки аллакай дар домен рух додааст ("Player EDA ҳамгироиро дар атрофи нашри ин далелҳо ва аксуламал ба онҳо эҷод мекунад:- пайвасти заифи хидматҳо,
- миқёси истеъмолкунандагон мустақилона,
- такрорӣ/азнавташкилдиҳии пешгӯиҳо,
- аудити шаффоф.
EDA API-ҳои синхрониро бекор намекунад - он онҳоро тавассути ворид кардани вобастагии хизматрасонӣ ба қабати асинхронӣ пурра мекунад.
2) Намудҳои ҳодиса
Домен: Далелҳои назарраси корӣ (Фармоиш дода шудааст, Bonus
Интегратсия: "лаҳзаҳо "/тағирот барои системаҳои беруна (User
Техникӣ: Давраи зиндагӣ ва телеметрия (Зарбаи дил, Pipeline .Failed).
Фармонҳо (на рӯйдодҳо, балки дар наздикӣ): дастурҳои "do X" (Capture
Тавсия: чорабиниҳои домейн аввалиндараҷа мебошанд; интегратсия бо пешгӯиҳо барои истеъмолкунандагони мушаххас ташаккул меёбад.
3) Шартномаҳо ва схемаҳои чорабинӣ
Схема: Avro/Protobuf/JSON Schema + Феҳристи схема; стратегияи мутобиқат: 'BACKWARD' барои таҳаввулоти истеъмолкунандагон, 'FULL' дар мавзӯъҳои муҳим.
Cloud Events (id, манбаъ, намуд, вақт, мавзӯъ, datacontenttype) - сарлавҳаҳои ягона.
Метамаълумоти зарурӣ: 'event _ id' (ULID/UUID), 'рух дод _ at', 'истеҳсолкунанда', 'schema _ version', 'correlation _ id '/' causation _ id', 'idempotency _ key'.
Версия: майдонҳои иловагӣ, манъи номгузорӣ/танаффусҳои семантикӣ; намудҳои нав - мавзӯъҳо/намудҳои нав.
json
{
"type":"record","name":"PaymentCaptured","namespace":"events.v1",
"fields":[
{"name":"event_id","type":"string"},
{"name":"occurred_at","type":{"type":"long","logicalType":"timestamp-micros"}},
{"name":"payment_id","type":"string"},
{"name":"amount","type":{"type":"bytes","logicalType":"decimal","precision":18,"scale":2}},
{"name":"currency","type":"string"},
{"name":"player_id","type":"string"}
]
}
4) Таҳвил, фармоиш ва пайдарҳамӣ
Ҳадди аққал як маротиба ҳамчун номутобиқатии дастӣ лозим аст.
Фармоиш: дар дохили як ҳизб (Кафка) ё навбат (RabbitMQ) кафолат дода мешавад, аммо метавонад бо ақибнишинӣ вайрон карда шавад; калиди ҳодиса бояд гранулаи домени тартиботро инъикос кунад (масалан, 'player _ id').
Мутобиқат: барои пул/қарз - танҳо тавассути маҷаллаҳо/сагҳо/ҷубронпулӣ; пешгирӣ LWW.
Модели хониш: Пешгӯиҳо ва кэшҳо метавонанд оқибат бошанд - "навсозиро идома диҳед"... нишон диҳед ва стратегияҳои RNOT-ро барои роҳҳои қатъӣ истифода баред.
5) Outbox/Inbox i CDC
Outbox: хизматрасонӣ ба пойгоҳи додаҳои худ ва ҷадвали баромад дар як транзаксия § коргар ба автобус нашр мекунад.
Паёмдони қуттӣ: Натиҷаи коркарди мағозаҳои истеъмолкунанда барои такрорӣ.
CDC (Change Data Capture): ҷараёни тағирот аз пойгоҳи додаҳо (binlog/WAL) ба автобус барои сохтани ҳамгироӣ бидуни тағироти барнома.
Idempotency: коркард бо 'idempotency _ key '/' event _ id', ҷаҳони берунаро то собит тағир надиҳед.
6) CQRS i Event Sourcing
CQRS: модели алоҳидаи навиштан ва пешгӯиҳои хондан; пешгӯиҳо аз рӯйдодҳо сохта мешаванд ва метавонанд ақиб монанд.
Сарчашмаи чорабинӣ: ҳолати умумӣ = ҷамъбасти рӯйдодҳои он. Тарафдор: аудити пурра/такрорӣ; муқобил: мураккабии муҳоҷират/схемаҳо/лаҳзаҳо.
Амал: ES - на дар ҳама ҷо, балки дар куҷо таърих ва ҷуброн муҳим аст; CQRS - қариб ҳамеша дар EDA.
7) Сагас: Оркестр ва хореография
Оркестр: ҳамоҳангсоз фармонҳо мефиристад ва рӯйдодҳои вокунишро интизор мешавад; барои равандҳои мураккаб қулай аст (KYC → Амонат → Бонус).
Хореография: хидматҳо ба рӯйдодҳои ҳамдигар вокуниш нишон медиҳанд; осонтар, аммо пайгирӣ кардан душвортар аст.
Ҳамеша ҷубронпулӣ ва мӯҳлатҳои қадамро муайян кунед.
8) Тарҳи топология (Кафка/Харгӯш)
Кафка
Мавзӯъ барои як чорабинии домейн: 'пардохтҳо. асир гирифта шудааст. v1 ',' бозингарон. санҷида шудааст. v1 '.
Калиди тақсимкунӣ: 'player _ id '/' wallet _ id' - дар куҷо фармоиш муҳим аст.
'такрорӣ. омил = 3 ',' мин. insync. нусхаҳои = 2 ', истеҳсолкунанда' acks = ҳама '.
Нигоҳ доштан: бо мурури замон (масалан, 7-90 рӯз) ва/ё фишурдасозӣ (ҳолати охирин аз рӯи калид).
Мавзӯъҳо барои такрорӣ ва DLQ бо бозгашт.
Харгӯш MQ
Мубодила: 'мавзӯъ '/' мустақим', равона кардани пардохтҳо '. асир гирифта шудааст. v1 '.
Барои мухлиси васеъ - 'мавзӯъ' + якчанд навбатҳо; барои RPC/фармонҳо - навбатҳои алоҳида.
Навбатҳои кворум барои HA; TTL + мубодилаи мактубҳои мурда барои бозхонд.
9) Мушоҳидакорӣ ва SLO EDA
SLI/SLO:- Ниҳонии ниҳоӣ (occurred_at → коркард шудааст): p50/p95/p99.
- Қафо/синну сол: ақибмонии истеъмолкунандагон (ақибмонии истеъмолкунандаи Кафка, синну соли ақибмонии харгӯш).
- Интишори/коркарди интиқол.
- Сатҳи DLQ ва таносуби такрорӣ.
- Муваффақияти амалиётҳои тиҷоратӣ (масалан, "пасандоз тасдиқ шудааст ≤ 5c").
- Таносуби рӯйдодҳо тавассути 'trace _ id '/' correlation _ id' (OT bel).
- Мисолҳо аз ҳамоҳангсозӣ → ченакҳо.
- Панели панели "Истеҳсолкунанда → Брокер → Истеъмолкунанда" бо огоҳиҳои сӯхтан.
10) Бозсозӣ, нигоҳдорӣ ва бозгашт
Бозсозӣ барои барқарор кардани пешгӯиҳо/ислоҳи иштибоҳҳо: ба проексия/фазои нав гузаред ва баъд хонишро иваз кунед.
Нигоҳдорӣ: Талаботи ҳуқуқӣ/тиҷорӣ (GDPR/PCI); майдонҳои ҳассос - рамзгузорӣ ва/ё токенизатсия.
Backfill: мавзӯъҳо/навбатҳои якдафъаина, маҳдудиятҳои RPS-ро тоза кунед, то ки prod-ро пешгирӣ накунед.
11) Бехатарӣ ва риояи
TLS in-transit, MTLS барои муштариёни дохилӣ.
Иҷозат: ҳар як мавзӯъ/барои мубодилаи ACL; бисёрҷониба тавассути фазои ном/vhost.
PII: майдонҳоро дар чорабинӣ кам кунед; метамаълумоти лифофа алоҳида, бори зарурӣ рамзгузорӣ карда мешавад.
Дастрасии аудит ба рӯйдодҳо, калидҳои "пуриқтидор" -ро манъ мекунад.
Сиёсати нигоҳдорӣ ва ҳуқуқи нест кардан (GDPR): ё маълумотномаҳои маълумот ё рӯйдодҳои қабрро нигоҳ доред ва дар пешгӯиҳо нест кунед.
12) Озмоиш дар EDA
Санҷишҳои шартномавӣ: истеъмолкунандагон интизориҳои худро аз схемаҳо тасдиқ мекунанд (аз ҷониби истеъмолкунандагон).
Санҷишҳои такрорӣ: гузаронидани намунаҳои таърихӣ тавассути версияи нави дастӣ/схема.
Сенарияҳои бесарусомонӣ: таъхир/талафи брокер, тарки гиреҳ, ақибмонии истеъмолкунандагон → SLO дар дохили он боқӣ мемонанд.
Дуд дар CI: лӯлаи кӯтоҳ то ба охир дар мавзӯъҳои вақт.
13) Муҳоҷирати "ҳамгироии CRUD → EDA"
1. Муайян кардани далелҳои домейн.
2. Ҷойгиркунии қуттиҳо дар хадамоти манбаъ.
3. Рӯйдодҳои ҳадди аққали доменро нашр кунед ва 1-2 пешгӯиҳоро пайваст кунед.
4. Оҳиста-оҳиста интегратсияи синхронизатсияи нуқтаро хомӯш кунед ва онҳоро бо обунаҳо иваз кунед.
5. Феҳристи намуди схема ва сиёсати мутобиқат.
6. Васеъ кардани чорабиниҳои иловагӣ танҳо бо майдонҳо; танаффус - танҳо тавассути намудҳои нав.
14) Анти-намунаҳо
Ҳодисаҳо = "DTO API" (хеле фарбеҳ, аз модели дохилӣ вобаста аст) - истеъмолкунандагонро шикаст.
Набудани Феҳристи схема ва мутобиқат - ҳамгироии "нозук".
Нашр аз рамз ва навиштан ба пойгоҳи додаҳо атомӣ нест (outbox нест) - шумо ҳодисаҳоро аз даст медиҳед.
"Маҳз як маротиба дар ҳама ҷо" - нархи баланд бидуни фоида; беҳтар аз ҳадди аққал як маротиба + idempotency.
Як калиди тақсимоти "универсалӣ" → қисмати гарм.
Такрори рост ба дурнамои истеҳсолӣ - шикастани SLO-ҳои онлайн.
15) Рӯйхати назорати амалисозӣ (0-45 рӯз)
0-10 рӯз
Муайян кардани рӯйдодҳои домейн ва калидҳои онҳо (гранулҳои тартибот).
Феҳристи схемаро ҷойгир кунед ва стратегияи мутобиқатро тасдиқ кунед.
Ба хидматҳои 1-2 outbox/паёмдони илова кунед; лифофаи ҳадди ақали Cloud-Events.
11-25 рӯз
Retry/DLQ, backoff, idempotency-ро ворид кунед.
Панели панелҳо: ақибмонӣ/синну сол/охири-ба-охир; огоҳиҳои сатҳи сӯхтан.
Ҳуҷҷатҳои ҳодиса (каталог), соҳибон ва равандҳои баррасии схема.
26-45 рӯз
Бозсозӣ/азнавсозии лоиҳаи аввал; такрори дафтарчаи runbook ва backfill.
Сиёсати амният (TLS, ACL, PII), нигоҳдорӣ, тартиботи GDPR.
Бетартибиҳои мунтазам ва рӯзҳои бозӣ барои брокер ва истеъмолкунандагон.
16) Нишондиҳандаҳои камолот
100% рӯйдодҳои домейн аз рӯи схемаҳо тавсиф ва ба қайд гирифта шудаанд.
Outbox/паёмдони қуттӣ ҳамаи истеҳсолкунандагон/истеъмолкунандагони Tier-0/1 фаро мегирад.
SLO: p95 таъхири ниҳоӣ ва ақибмонии истеъмолкунандагон дар доираи ҳадафҳо ≥ 99%.
Такрори/Backfill бе вақти корӣ имконпазир аст; китобҳои санҷидашуда мавҷуданд 'ва.
Версия: майдонҳои нав - бе шикастан; истеъмолкунандагони кӯҳна намеафтанд.
Амният: TLS + mTLS, ACL барои як мавзӯъ, гузоришҳои дастрасӣ, сиёсати PII/нигоҳдорӣ.
17) порчаҳои мини
Истеҳсолкунандаи Кафка (нашри боэътимод, ғояҳо):properties acks=all enable.idempotence=true max.in.flight.requests.per.connection=1 compression.type=zstd linger.ms=5
Коркарди истеъмолкунандагон (idempotency, псевдокод):
python if inbox.contains(event_id): return # дедуп process(event) # побочные эффекты детерминированы inbox.commit(event_id) # atomically with side-effect commit_offset()
Такрори харгӯш тавассути DLX (идея):
- 'queue: вазифаҳо' → оид ба вазифаҳои nack → DLX '. такрор кунед. 1м '(TTL = 60s) → бозгашт ба' tasks '; минбаъд '5м/15м'.
18) Хулоса
EDA интегратсияро ба ҷараёни далелҳои корӣ бо шартномаҳои возеҳ ва пайдарҳамии идорашаванда табдил медиҳад. Таҳкурсӣ созед: схемаҳо + сабти ном, қуттиҳо/паёмдонҳо, калидҳои фармоиш, коркардкунандагони номатлуб, SLO ва мушоҳидаҳо, нигоҳдорӣ ва такрори бехатар. Он гоҳ ҳодисаҳо "манбаи ҳақиқат" -и шумо барои миқёс, таҳлил ва хусусиятҳои нав - бидуни робитаҳои нозук ва муҳоҷирати шабона мешаванд.