Მოვლენების რეალური ფიდი: არქიტექტურა და უსაფრთხოება
მოვლენების რეალური დრო არის პროდუქციის „სისხლძარღვთა სისტემა“, რომელსაც აქვს გეიმიფიკაცია, ანტიფროდი, CRM გამომწვევი და გადახდები. იმისათვის, რომ იგი პროგნოზირებულად მუშაობდეს მწვერვალებზე, არ დააჯილდოოს ჯილდოები და არ მოხდეს მონაცემები, საჭიროა მკაცრი არქიტექტურა: ოქმებიდან და საბურავებიდან ხელმოწერამდე, idempotenty, ბიუჯეტის კერძო და დაკვირვება.
1) მიზნები და მოთხოვნები
საიმედოობა: მინიმალური ლაგამის მქონე მოვლენების მიწოდება (p95-250 ms ინჯესტი, p95-1-2 წმ მომხმარებლამდე).
ადგილზე მიტანა: at-least-once ტრანსპორტი + ლოგიკური exactly-once იდემპოტენტურობის გზით.
შეკვეთა: გასაღები მოწესრიგება (ჩვეულებრივ 'user _ id') ხელახალი დარღვევის ფანჯრებით.
უსაფრთხოება: MTLS, HMAC/JWT, კლავიშების როტაცია, replay/დუბლიკატებისგან დაცვა, PII- ის მინიმიზაცია.
მასშტაბი: ჰორიზონტალური შარდვა, დაბალანსება, დაბალანსება, DLQ/raples.
მართვა: schema registry, ვერსია, მიგრაცია სისუსტის გარეშე.
შესაბამისობა: აუდიტი (WORM), RG/KYC კარიბჭეები, გეო პოლიტიკა, GDPR/ანონიმიზაცია.
2) დამხმარე არქიტექტურა (ფენის უკან ფენა)
1. Producters (წყაროები): თამაშის სერვერი, საფულე/გადახდა, KYC/AML, კლიენტი SDK (ვებ/iOS/Android).
2. API Gateway (Ingress): HTTP/gRPC მიღება, მიკროსქემის შესაბამისობა, ავთენტიფიკაცია, HMAC/MTLS, დროის ნორმალიზაცია.
3. Queue/Stream: Kafka/Rabbit/Cloud Pub/Sub - ბუფერიზაცია, განაწილება 'user _ id'.
4. Stream Processor: ნორმალიზატორი, გამდიდრება, თემების მარშრუტიზაცია, დროშის ანორმალია/ანტიბოტი, იდემპოტენტური ჩანაწერი.
5. Consumers: Rules/Scoring, Reward Orchestrator, CRM/CDP კონექტორები, ანტიფროდი, ანალიტიკური sink 'და
6. სცენა: ნედლეული მოვლენები, ფანჯრები, იდემპოტენტურობის ინდექსი, აუდიტის ჟურნალი.
7. Observability: მეტრიკა, ლოგოები, ტრეკები, ალერტები; panics → DLQ.
8. Admin Plane: schema registry, გასაღებები/საიდუმლოებები, RBAC/ABAC, ficheflages, replay მომსახურება.
3) ადგილზე მიტანის ოქმები
HTTP/JSON (ვებჰუკის სერვერის სერვერი): უბრალოდ, თავსებადია, კარგია გარე პარტნიორებისთვის. დაამატეთ HMAC + იდემპოტენტობა.
GRPC/Protobuf: დაბალი შეფერხება, მკაცრი სქემები, bidi ნაკადები შიდა სერვისებისთვის.
WebSocket/SSE: კლიენტი push, UI გამოწერა ლიდერებისთვის და პროგრესი.
CDC/Kafka Connect: როდესაც წყაროები არის BD/საფულეები და არა ბიზნეს სერვისები.
რეკომენდაცია: გარე პერიმეტრი - HTTP + HMAC + MTLS; შიგნით - gRPC/Protobuf.
4) მოვლენისა და კონვენციის მოდელი
json
{
"event_id": "e_01HF3Z8Z7Q8Q2K", "event_type": "bet", "schema_version": "1. 3. 0", "occurred_at": "2025-10-24T11:37:21Z", "ingested_at": "2025-10-24T11:37:21. 183Z", "key": { "user_id": "u_12345" }, "ctx": {
"session_id": "s_778", "platform": "ios", "geo": "TR", "device_fp": "fp_4a1..."
}, "payload": {
"game_id": "slot_wolf", "bet": 0. 5, "win": 1. 25, "currency": "EUR", "provider": "GameCo"
}, "sig": {
"algo": "HMAC-SHA256", "kid": "k_2025_10", "ts": 1730061441, "mac": "c7b7b3...f1"
}
}
წესები:
- ორი დრო: 'occurred _ at' (წყარო) და 'ungested _ at' (კარიბჭე). დაუშვით საათის დრიფტი ± 300.
- მარშრუტიზაციის გასაღები არის ის, რაც განსაზღვრავს წესრიგს (ჩვეულებრივ 'user _ id').
- PII მხოლოდ 'ctx '/' payload' -ში მინიმიზაციის პრინციპით; მგრძნობიარე ატრიბუტებისთვის - ტოკენიზაცია.
5) მშობიარობა, წესრიგი და იდემპოტენტობა
At-least-once ტრანსპორტი შესაძლებელია დუბლიკატები და ხელახალი დარღვევა.
Exactly-once ლოგიკა: შეინახეთ idempotenty ცხრილი უნიკალური ინდექსით '(event _ id)' და/ან '(user _ id, source _ seq) "; გამეორება - არა-op.
SQL ესკიზი:sql
CREATE TABLE event_log (
event_id TEXT PRIMARY KEY, user_id TEXT, event_type TEXT, occurred_at TIMESTAMPTZ, payload JSONB
);
- ჩანართი დუბლისგან დასაცავად
INSERT INTO event_log(event_id, user_id, event_type, occurred_at, payload)
VALUES (:event_id,:user_id,:event_type,:occurred_at,:payload)
ON CONFLICT (event_id) DO NOTHING;
შეკვეთა: ნაკადის განაწილება 'user _ id' + reordering window 60-120 პროცესორში. მოგვიანებით, მოვლენები ხდება მაკორექტირებელი ფუნქციების „რეპლიკაში“.
6) Backpressure და მწვერვალების მართვა
Token-bucket rate limiting на ingress (per-IP, per-partner, per-key).
Circuit breaker: შინაგანი მომხმარებლებისგან 5xxx- ზე, დეგრადაცია (არჩევითი მოვლენების დეგრადაცია, რიგების გაზრდა).
DLQ: მუდმივი მცდარი შეტყობინებები (გატეხილი სქემა, ხელმოწერა არ არის შესაფერისი, აღემატება TTL ხელმოწერებს).
Replay service: DLQ- ის ნიმუშის გამეორება 'event _ id '/დროის დიაპაზონში.
7) სქემები და ევოლუცია
Schema Registry: JSON Schema/Protobuf; თავსებადობის პოლიტიკა: backward პროდიუსერებისთვის, forward for forward.
ვერსია: 'schema _ version', მაჟორიტარული - მხოლოდ ძაფისა და ორმაგი ჩაწერის საშუალებით (ორმაგი ჩაწერა).
კონტრაქტები: სქემის პოპულარიზაცია კანარის პერიოდის შემდეგ და მწვანე მეტრიკა.
YAML შემოწმების წესის მაგალითი:yaml compatibility:
enforce: true mode: backward blocked_fields:
- payload. ssn
- payload. card_number required_fields:
- event_id
- event_type
- occurred_at
8) საფრთხის მოდელი და დაცვა
საფრთხეები: სხეულის შეცვლა, გამეორება (გამეორება), PII- ის გაჟონვა, გასაღების კომპრომისი, სქემა-პოზირება, DoS, MITM, ხელმოწერა-სტრიპინგი.
დაცვა:- MTLS პერიმეტრზე: კლიენტის სერთიფიკატები მოკლე ვადით, CRL/OCSP.
- HMAC სხეულის ხელმოწერა + 'X-Timestamp' და TTL (± 300 s).
- JWT (client credentials/OAuth2) - სკოპის ავტორიზაციისა და შეზღუდვებისთვის.
- ღილაკების როტაცია (KMS): 'kid' თავში; როტაციის გეგმა 30-90 დღე; ორმაგი შემოწმება მიგრაციის ფანჯარაში.
- Nonce/idempotention: 'X-Request-Id' მოთხოვნის მოთხოვნისთვის (გადახდა, პრემია); შეინახეთ TTL დრო.
- შინაარსის ტიპი pinning, max body size, allow-list IP/ASN კრიტიკული ინტეგრაციისთვის.
- WORM აუდიტი ყველა შემომავალი raw-payload + სათაურით (უცვლელი საცავი).
python body = request. raw_body ts = int(request. headers["X-Timestamp"])
assert abs(now() - ts) <= 300 # анти-replay kid = request. headers["X-Key-Id"]
secret = kms. fetch(kid)
mac = hmac_sha256(secret, body)
assert hmac_eq(mac, request. headers["X-Signature"])
9) კონფიდენციალურობა, PII და RG/KYC
მინიმიზაცია: PII გადასცეს ბმული ნიშნით (5-15 წუთის განმავლობაში) ინლაინის ნაცვლად; აკრძალულია ნედლეულის ლოგოებში რედაქტირება/ანონიმიზაცია - გამოიყენეთ ინდივიდუალური PII სტრანტები.
წვდომა: ABAC იურისდიქციისა და როლის ატრიბუტების შესახებ; ყველა კითხვა - აუდიტის ჟურნალში.
GDPR: მოხსნის უფლება გააცნობიერეთ key-mapping- ით, რათა PII წაშალოთ მოვლენების ფაქტების გარეშე.
RG/KYC: ღონისძიებები, რომლებიც მოითხოვს ღირებული ჯილდოების გაცემას, გამოტოვეთ მხოლოდ მოქმედი KYC დონეზე და RG დროშები „OK“.
10) დაკვირვება და SLO
SLO (მაგალითი):- Ingest p95-250 ms; end-to-end p95 ≤ 2 с; უარი - 0. 1% დღეში.
- ხელმოწერის შეცდომები (HMAC/JWT) - 0. მთლიანი ნაკადის 02%.
- DLQ fill rate ≤ 0. 1%; „დუბლიკატები“ იდემპოტენტურობის შემდეგ 0. 005%.
- RPS წყაროების თანახმად, p50/p95 latence, 4xx/5xx, ხელმოწერის შეცდომები, time-skew.
- წვეულებებზე Lag, დამუშავება/წმ, fill DLQ, retries, replay მოცულობა.
- სქემები: ვერსიების შეტყობინებების წილი, თავსებადობის დარღვევა.
- უსაფრთხოება: rps-throttle, circuit-breakers, ანომალიები IP/ASN.
- SRM ნაკადი (ერთი წყაროდან მკვეთრი ტრეფიკი).
- ლატენტობა p95> სამიზნე 5 წთ +, ზრდა DLQ> X/min.
- შეცდომის ხელმოწერები> Y ppm, გამეორებების ზრდა „X-Request-Id“.
- Drift საათი> 120 წყაროდან.
11) მულტფილმის რეგიონი და წინააღმდეგობა
აქტიური რეგიონები, გლობალური როუტინგი (GeoDNS/Anycast), sticky-key 'user _ id' რეგიონში.
ჯვარედინი რეგიონალური რეპლიკაციის ტოპიკა კრიტიკული მოვლენებისთვის (ფული, KYC).
Blast radius: იზოლაცია ტენანტებზე/ბრენდებზე, ცალკეული ბიუჯეტები და გასაღებები.
DR გეგმა: RPO - 5 წთ, RTO - 30 წთ; რეგულარული რეპეტიციები.
12) ჭუჭყიანი და რეპლიკის პოლიტიკოსები
ნედლეული მოვლენები: 7-30 დღე (ღირებულებით), აგრეგატები/ფანჯრები - უფრო მეტხანს.
წარწერა ნებადართულია მხოლოდ ხელმოწერილი runbook- ით (ვინ, რატომ, დროის დიაპაზონი).
Replay ყოველთვის მიდის ახალ stream ვერსიაში 'replayed = Real' დროშით ანალიტიკური გამჭვირვალეობისთვის.
13) კონფიგურაციის მაგალითები
Ingress (NGINX სტილი) შეზღუდვები:nginx limit_req_zone $binary_remote_addr zone=req_limit:10m rate=300r/s;
limit_req zone=req_limit burst=600 nodelay;
client_max_body_size 512k;
proxy_read_timeout 5s;
კაფკა (მაგალითი):
properties num. partitions=64 min. insync. replicas=2 acks=all retention. ms=604800000 # 7 days compression. type=zstd
გასაღების პოლიტიკა (KMS):
yaml rotation_days: 45 grace_period_days: 7 allow_algos: ["HMAC-SHA256"]
key_scopes:
- topic: "wallet_events"
producers: ["wallet-svc"]
consumers: ["ledger-svc","risk-svc"]
14) რეალური დროის ფიდის გაშვების ჩეკის სია
- MTLS პერიმეტრზე, HMAC/JWT, გასაღების როტაცია ('kid').
- Idempotention ლოგიკაზე (უნიკალური გასაღებები, upsert/on CONFLICT).
- 'user _ id', reording window, raplay მომსახურება.
- Schema registry + თავსებადობის პოლიტიკა; ორმაგი write major apdates.
- rate limiting, circuit breakers, DLQ + სახელმძღვანელო ხვრელი.
- დაკვირვება: SLO, ხელმოწერის/ლატენტობის ალერტები/DLQ/lag.
- პოლიტიკა PII/ანონიმიზაცია, ABAC, WORM აუდიტი.
- DR/მულტფილმის რეგიონი, ფეილოვერის რეპეტიციები.
- Runbooks: ინციდენტები, რეპლიკები, სქემები/გასაღებები.
15) მინი შემთხვევა (სინთეზური)
კონტექსტი: ტურნირების პიკი, 120 RPS ingress, 64 თამაში, აქტიური აქტიურობის 2 რეგიონი.
სულ 4 კვირაში: ingest p95 210 ms, e2e p95 1. 6 გვ; DLQ 0. 05%; ხელმოწერის შეცდომები 0. 009%; დუბლიკატები idempotence 0-ის შემდეგ. 003%.
ინციდენტი: პარტნიორისთვის საათების დრიფტი (− 9 წუთი) - ანტის სიჩქარე. Circuit breaker- მა ნაკადი გადაიტანა „ბუფერული“ ენდოინტში, შეატყობინა CSM partner health; Sink NTP- ის შემდეგ - ფანჯარა 12 წუთის განმავლობაში ყველა კონსიუმისთვის. ზარალი და ორმაგი გადახდა არ არის.
16) რეზიუმე
საიმედო რეალური ფიდი არ არის „მხოლოდ ვებჰუკი“. ეს არის ფენიანი სისტემა მკაფიო კონტრაქტებით: at-least-once ტრანსპორტი + ლოგიკური exactly-once, რეესტრი და ვერსიის სქემა, MTLS/HMAC/JWT და გასაღების როტაცია, backpressure/DLQ A A Ad, PAIId, PIIaNIIIIaNId და მკაცრი და მკაცრი. ამ პრაქტიკის დაცვით, თქვენ მიიღებთ მოვლენების სწრაფ, უსაფრთხო და პროგნოზირებად ნაკადს, რომელზედაც შეგიძლიათ დამაჯერებლად ააწყოთ თამაში, ანტიფროდი, CRM და გადახდები.