Միկրովայրիկ ճարտարապետություն
1) Ինչու՞ են միկրովայրկյանները iGaming-ում
Փոփոխության արագությունը 'անկախ ֆիչեր թիմերի (վճարումներ, բովանդակություն, ռիսկ, ռիթմեր)։
Տե՛ ս. Մեկ ռուբլու հրաժարվելը չի նվազեցնում ամբողջ ապրանքը (մերժման սահմանները)։
Մասշտաբը 'հորիզոնական սկեյլ «տաք» համաձուլվածքներ (դրամապանակ, լոբբի, ստրիմա)։
Կոմպլասենսը 'տվյալների տարանջատումը տարածաշրջաններում/միգրացիաներում։
Երբ չարժե 'փոքր թիմը/ծավալը, չկա DevOps-պրակտիկա, թեստերի թույլ ավտոմատացում, ապա մոդուլային մոնոլիտը ավելի լավ է։
2) Ալմաթիի, սահմանների և թիմերի (DDD + Team Topologies)
Հիբրիդային ուրվագծեր ՝ Ակկաունթ/Պրոֆիլ, KUS/Complaens, Վճարումներ/Կոշելեկ, Խաղային բովանդակություն/ագրեգացիա, Բոնուս/Առաքելություն, Aleksra, Մարքեթինգ/CRM, Հաշվետվություններ/BI։
Bounded Disext = տվյալների և լեզվի մոդելների պայմանագիրը։
Ռուսական թիմի փոփոխությունների հոսքերը 'մեկ թիմ = մեկ խաղացող + իրենց SLO-ն։
BFF (Backend for Frontend) 'Web/Mobile/Partner-ի տակ գտնվող առանձին ֆասադներ, որպեսզի չստեղծի «նվագախումբը»։
3) Հաղորդակցություն ՝ սինխրոն vs asinhron
Սինխրոն (REST/gRPC) 'երբ անհրաժեշտ է չարտոնված պատասխանը (դեպոզիտի ժամանակ սահմանների ստուգում)։
Ասինհրոնը (Kafka/NATS/MSS) 'իրադարձություններ և ֆոնային գործընթացներ (հաշվարկել քեշբեքը, հաղորդագրությունները, վարկանիշների նորարարությունը)։
Կանոնները
Քննադատական ճանապարհը = նվազագույն ցանցային հոփներ։
Միջմայրցամաքային ինտեգրումը իրադարձությունների և պայմանագրային API-ի միջոցով է։
Չի կառուցում «5 + սինխրոն զանգերի շղթաներ» առցանց պլանավորվում է օգտագործել EDA/sagi։
4) Պայմանագրեր և տարբերակումներ
Առաջին պայմանագիրը 'OpenAPI/AsyncAPI + Schema Registry (Avro/JSON Schema)։
SemVer + համատեղելիությունը 'դաշտերի ավելացումը չի կոտրում հաճախորդներին։
Consumer-driven drac.ru (CDC) 'CI (ռեգրեսիայի դեմ)։
Deprecation policy 'աջակցության պատուհանը (12-18 մեզ), հեռուստատեսությունը հին տարբերակներով։
5) Իրադարձություններ, սագեր և խորհրդատվություն
Medibox/Transaction Log Tailing: Ատոմային ձայնագրությունը «տվյալները + իրադարձություն»։
Saga-patterns
Օրկեստրացիան (կենտրոնական ֆորումը) վճարելու/եզրակացության համար։
Խորեոգրաֆիա (արձագանք իրադարձությունների վրա) բոնուսների/07 համար։
Idempotention: բանալիները '«entum Id + action + nonce», dedup-2019 պահպանումը։
Կոնսիստենտություն '«արտաքին»' իրադարձությունների միջոցով։ «ներքին» գործարքներ են մրցույթի սահմաններում։
6) Տվյալները և պահպանումը
«Իր սթորը» սկզբունքը, յուրաքանչյուր ծառայություն ունի իր BD (սխեմաների մեկուսացում)։
Ընտրությունն իրականացվում է հասանելիության արտոնագրով
Գործարքներ/հավասարակշռություններ - ռեալիստական (PostgreSQL) ստրոգիական ինվարանտների հետ։
Իրադարձությունները/log - append-only (Kafka/Redpanda)։
Քեշ/նստաշրջաններ - Redis/Kast DB; առաջնորդները Redis Sorted Sets-ն են։
Որոնումը OpenSearch/Elastic-ն է։
Կարդալու նյութականացված պրոյեկտները (CQRS) արագ ցուցակներ/հաշվետվություններ են։
7) Կայունություն և կայունություն
Timeouts/Retry with jitter/Retry-budget միայն գաղափարական վիրահատությունների համար։
Circuit-breaker/Medier-ej.ru ծառայությունների միջև։
Bulkhead 'առանձին փամփուշտներ «աղմկոտ» ապստրիմայի վրա։
Rate limits per-client/route, backpressure (503 + Retry-After).
Dead-letter + poison-enthandling հերթերում։
8) Դիտարկումը (Observability)
Ուղեգիր ՝ OpenTelemetry («trace _ id») կողպեքների միջով։
Մետրիկները ՝ RPS, p50/p95/p99, error rate 4xx/5xx, saturation (CPU/mem/queue), բիզնես մետրիկները (TTP, TtW)։
Լոգներ ՝ կառուցվածքային JSON, PII/PAN/IBAN դիմակավորում, կորլացիա '«trace _ id»։
SLO/alerts: երթուղու/ֆունկցիայի վրա (օրինակ ՝ "Deposit p95-300 մգ", "success 498։ 5%`).
9) Անվտանգություն և բաղադրիչներ
Zero-Trust: mTSA ծառայությունն է (SPIFFE/SPIRE), որը կարճ է։
AuthN/Z: OAuth2/JWT (aud/scope/exp), դերերի կանոնավոր տարբերությունը։
Գաղտնիքները ՝ KFC/Secrets Express/Sealed Secrets, կոդավորման։
GDPR/տվյալների տեղայնացումը 'տարածաշրջանային կլաստերներ, geo-fencing API-ի վրա։
Աուդիտ 'անփոփոխ ամսագրեր (WORM), ադմինի գործողությունների հետք։
10) Մոսկվան և Ալմաթիան
Բեռնարկղերը/K8s: մեկ ծառայություն = մեկ deploy; ռեսուրսներ/լիմիտներ; PodDisruptionBudget.
CI/CD 'ոսպնյակներ, unit/www.ract/integ թեստեր, www.scan, SBMS։
Ալյումինները ՝ canary/blue-green/shadow, բարդ սխեմաներ expand-and-intract-ի միջոցով։
Ավտոսկեյլ 'HPA CPU + RPS + p95 + queue-depth; Altain, երբ փոխկապակցված է։
11) Արտադրողականությունը և արժեքը
Ավելացումը 'p95/99 «ծառայությունների և ծառայությունների վրա», flame գրաֆիկներ։
Քեշինգը 'read-through/write-through; TTL/հաշմանդամություն իրադարձությունների համար։
Internality: պահել տաք տվյալները մոտ հաշվարկին։
FinOps: 60-70 տոկոսը, «warm poope», ոչ ակտիվ գողերի մեքենան։
12) Ածխաջրածինների ձևանմուշները (iGaming)
12. 1 Վճարումներ/Դրամապանակ
Ծառայություններ ՝ «payments-gw» (ֆասադ), «wallet», «pox-adapters», «fraud-4k»։
Հոսքը '«init medicroserve medicapture/rollback» (saga)։
События: `PaymentInitiated`, `PaymentAuthorized`, `PaymentSettled/Failed`.
«Idempotency-Key», «wallet»։
12. 2 KUS/Complaens
Сервисы: `kyc-flow`, `doc-storage`, `sanctions-check`, `pep-screening`.
События: `KycSubmitted/Approved/Rejected`, `RiskScoreUpdated`.
Աուդիտ և ETA 'առաջադրանքների հերթը, գործի թայմ-լայնությունը, post-acions-ը։
12. 3 Բոնուսներ/Առաքելություններ
Ծառայությունները ՝ «bonus-entine», «wallet-bonus», «eligibility»։
Խորեոգրաֆիա ՝ «BetPlaced of BonusEngine 2019 BonusGranted of WalletCredited»։
Պաշտպանություն չարաշահումներից 'idempotent grants, limits, կանոնների սիմուլյատոր։
12. 4 Aleksandra/Առաջնորդներ
Ծառայություններ ՝ «tournament-svc», «scoring», «leaderboard»։
Պահեստավորում: Redis ZSET + պարբերական «նետումը» OLAP-ում։
События: `ScoreUpdated`, `TournamentClosed`, `RewardIssued`.
13) «Պայմանագիր + իրադարձության» օրինակը (պարզեցված)
OpenAPI (հատված) - Wallet
yaml paths:
/v1/wallet/{userId}/credit:
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreditRequest'
responses:
'202': { description: 'Enqueued' }
components:
schemas:
CreditRequest:
type: object required: [amount, currency, reason, idempotencyKey]
properties:
amount: { type: number }
currency: { type: string, example: UAH }
reason: { type: string, enum: [Deposit, Bonus, Adjustment] }
idempotencyKey: { type: string }
AsyncAPI (հատված) - իրադարձություն
yaml channels:
wallet. credit. applied:
publish:
message:
name: WalletCreditApplied payload:
type: object required: [userId, amount, currency, sourceEventId]
14) Թեստավորում
Unit/Property-based սանիտարական կանոնների համար։
CDC (Pact/Assertible) - պրովայդերների/սպառողների պայմանագիրը։
Ինտեգրալ տեղական բրոկերների հետ (Testcontainers)։
E2E կրիտիկական ֆլոուը (Noble-ը պահեստավորում է խաղի սկզբնական սկիզբը։
Chaos/Failover թեստեր 'PSA/բրոքերի նվազում/գոտու կորուստ։
15) Մետրիկի և SLO (նվազագույն)
Ծառայությունների հասանելիությունը '«07 99»։ 9% "մետրոպոլիտենի/դրամապանակի համար։
Latency p95: API քննադատական ճանապարհը 300-500 մզ է։
Error budget: 0. 1–0. Հինգ տոկոսը թաղամասում, burn-aler.ru։
Հերթերը ՝ lead time իրադարձություններ (www.uce www.consume), DLQ 380։ 1%.
Բիզնեսը ՝ TTP, TtW, FTD-success, KYC-TtV։
16) Չեկ թերթերը
Շարժիչի նախագծումը
- Հստակ արբիտրաժային սահմանը և տվյալների սեփականատերը։
- OpenAPI/AsyncAPI + Registry-ի պայմանագրերը։
- SLO/ալերտները որոշվում են. մետրերը/treiss/logs ներկառուցված են։
- Թայմաուտների/ռեցոտների/կուռքերի քաղաքականությունները։
- Windows: expand and-medract։
Նախքան թողարկումը
- Unit/CDC/ինտեգրացիոն թեստերը կանաչ են։
- Կանարյան ճանապարհը և արձագանքման պլանը։
- Rate-limits/քաշային երթուղիները տրամադրված են։
- Գաղտնիքները/բանալիները/հավաստագրերը պտտվում են։
- Ֆիչա դրոշները և ֆոլբեկները։
17) Anti-patterna
Ցանցը որպես տվյալների անվադողեր 'իրադարձությունների փոխարեն խորը սինխրոն շղթաներ։
Ընդհանուր «աստված» -BD-ն բոլոր ծառայությունների համար։
Idempotenty-ի բացակայությունը կրկնակի մարում/հաշվարկել է։
Մութ ֆորումները առանց հեռուստատեսության և kill-switch։
Թաքնված նստաշրջանը (լիպտությունը ամենուր արտաքին վիճակի փոխարեն)։
Պայմանագրերը «կոդում» առանց տարբերակի և CDC-ի։
API դարպասի տրամաբանությունը ծառայությունների փոխարեն (դարպասը = բարակ)։
18) Միգրացիան մոնոլիտից (Strangler Fig) (Strangler Fig)
1. Առանձնացնել ֆասադ դարպասը և առաջին վճարումը (օրինակ վճարումները)։
2. Հեռացնել երկուական տրամաբանությունը (www.box) մոնոլիտից իրադարձություններում։
3. Աստիճանաբար փոխակերպել էնդպոյնտները նոր ծառայության (միկրոօրգանիզացիա/կանարական քաշներ)։
4. Սեղմել մոնոլիտը մինչև «միջուկը» և անջատել։
19) Սթեքը և ենթակառուցվածքը (օրինակ)
Հաղորդակցություն ՝ REST/gRPC, Kafka/NATS; Schema Registry.
Մոսկվա: PostgreSQL, Redis, OpenSearch, S3/MinIO; OLAP — ClickHouse/BigQuery.
Բեռնարկղերը/նվագախումբը 'Docker, Kubernetes (Ingress/Gateway), Black Mesh (Istio/Linkerd) անհրաժեշտության դեպքում։
Դարպասը ՝ Envoy/Kong/Traefik/NGINX։
CI/CD: GitHub Actions/GitLab CI + ArgoCD/Flux; Pact/OWASP/ZAP.
Observability: OpenTelemetry, Prometheus, Tempo/Jaeger, Loki.
20) Գլամուրային փուչիկ
Նախագծեք սահմանները և տվյալների պատասխանատվությունը։
Սինքրոնը միայն այնտեղ է, որտեղ այժմ պետք է պատասխանը։ մնացած մասը իրադարձություններ են։
Պայմանագրեր/սխեմաներ/CDC - ռեգրեսիայի ապահովագրություն։
Sagi + www.box + idempotenty-ը հուսալիության հիմքն է։
Դիտարկումը և SLO-ը ոչ թե ստանդարտ են, այլ «պատրաստ» չափանիշը։
Ալգորիթմները canary/blue-green, 108-expand-and-intract-ի միջոցով։
Անվտանգությունը/համադրումը ՝ mTSA, JWT, KFC, տարածաշրջանային տվյալները։
Սկզբում մոդուլային մոնոլիտը, ապա էվոլյուցիան, եթե մասշտաբը և թիմը պատրաստ են։