Oceny w czasie rzeczywistym: architektura techniczna
Ocena w czasie rzeczywistym to pakiet usług, który zmienia miliony wydarzeń w zaktualizowane pozycje w setkach milisekund, przy zachowaniu uczciwości, audytorialności i ekonomicznego zarządzania. Poniżej znajduje się praktyczny konstruktor od wymagań do pracy.
1) Wymagania i cele
Opóźnienie do interfejsu użytkownika: ≤ 200-300 ms p95 od przyjazdu do aktualizacji pozycji.
Dokładność: poprawne przesunięcie „najlepszego N „/przegrody/tie-breaks podczas obciążenia i awarii.
Dostępność: ≥ 99. 9% na okres turnieju; degradacja bez utraty integralności.
Idempotencja: „dokładnie raz” na poziomie memoriałowym, „przynajmniej raz” w transporcie.
Skala: wzrost poziomy według regionu/dywizji/drużyny (top-K na piłce).
Audyt: niezmienne dzienniki zasad, zdarzeń, opłat i problemów.
2) Schemat systemu (poziom 10 000 stóp)
Клиена → Event Ingest → Scoring Engine → Stream Aggregator (Top-K/Top-M) → Write-Optimized Store → Hot Cache/Edge → UI/Comms → Rewards/Claim
Монова: Snapshotter, Anti-Fraud/RG, Analytics & A/B, Audit/Observability.
3) Impreza Ingest
Zadania: ochrona przed duplikatami, wybuchami, stratami sieci.
Idempotencja: każde wydarzenie ma 'event _ uuid'; kontrola „widziana/narosła”.
Semantyka dostawy: transport - co najmniej raz, rachunkowość punktów - dokładnie raz.
Backpressure: kolejki z dynamicznymi partiami; w przeciążeniu - priorytetowe określenie „aktywnych” wycieczek.
Okna czasowe: zezwalaj na późne zdarzenia (na przykład do 90 sekund) - droga do „okna przeliczania”.
Czas: serwer UTC, na kliencie - tylko mapowanie lokalizacji.
4) Silnik punktowy
Zasady: zmienione zasady, anty-pay-to-win, łatwy zwrot.
Wersioning: 'rule _ set _ id' + feature-flags per-region/division.
Modele: mnożnik ('Score = runda (100log2 (Win/Bet + 1))'), oparty na wygranej z krzywą dziennika, oparty na zakładach (tylko jako meta tła).
Offset "best N': zachować strukturę top-N na gracza/dzień/wycieczkę; sumowanie/mediana według formatu.
Wyjątki: bonus funds 'coef _ bonus ≤ 0. 5 "lub" 0 "; nasadka na obrót/dzień; kwoty na dostawcę.
Tie-break: 1) wcześniejsze osiągnięcie prędkości końcowej; 2) większa różnorodność; 3) nasiona deterministyczne.
5) Agregacja strumieniowa i górna K
Cel: aby szybko przeliczyć pozycje bez skanowania całego zestawu.
6) Przechowywanie: pisać vs read
Sklep zoptymalizowany zapisem: dziennik memoriałowy, stany best-N, przerwy wiązania, metadane (tylko rekord/aktualizacje).
Sklep zoptymalizowany do odczytu (zapytanie): denormalizowane „prezentacje” dla interfejsu użytkownika: top 100, „moja pozycja”, „góra dnia/podział”, wkład do zespołu.
Migawka: godzinne „migawki” płyty lidera; szybki zwrot/powtórka, raporty i audyty.
Spójność: ostatecznie dla szerokich list, czytaj-swoje pisma dla „mojej pozycji”.
7) Gotówka i krawędź
Hot cache: ostatnie pozycje i wynik graczy na odłamku; TTL 1-5 sek; niepełnosprawność według zdarzeń.
Warstwa krawędzi/CDN: bloki statyczne, strony wyników „zimnych”, ale nie logika memoriałowa.
Fallback: podczas degradacji - „tryb brązu”: UI aktualizować co X sekund + ciężki blok widżetu.
8) Czas, okna i strefy czasowe
Pojedynczy „prawdziwy” czas: UTC na usługi; terminy w UTC.
Lokalizacja - konwersja czasu na kliencie (strefa czasu użytkownika).
Granice: „miękkie okno” zamykające 1-3 min dla opóźnień sieciowych (w T&C).
Idziemy do klasy słów: monitoring zegara-skew, alerty NTP, pomiar dryfu.
9) Radzenie sobie z późnymi i duplikatami wydarzeń
Późne wydarzenia: zachować „okno pojednania”; ponowne obliczenie lokalnie + „spokojne” dostosowanie pozycji z paszy powiadamiającej.
Doubles: 'event _ uuid' + (gracz, gra, zakład, ts) w wąskim oknie; czasopismo „widziane”.
Memoriałowa idempotencja - Zdarzenie → zmiana transakcji ze statusem applied/rolled_back
10) Zwalczanie nadużyć finansowych i RG (wbudowane w rurociągu)
Punktacja behawioralna: jednolite przedziały, super-prędkość, „brak hałasu” - flagi.
Wykres połączenia: wspólne urządzenia/IP/płatności → klastry; posiadać nagrody, ręczną weryfikację.
Kwoty i pułapy: N najlepsze próby/dzień, kwoty dla jednego czasu na start lub lądowanie/dostawca, punkty limitowe na spin/dzień.
Fundusze bonusowe: szanse/eliminacje.
RG: punkty przyznawane są wyłącznie w dobrowolnych terminach (czas/depozyty/straty); złamać przypomnienia.
11) Tolerancja wielobranżowa i błędna
Aktywa według regionów: odłamki regionalne + skarbiec globalny; routing bliskości.
RTO/RPO: RTO <15 min (folback on snapshots), RPO = 0 for accruals (idempotent log replay).
Tolerancja partycji: w przypadku luki sieciowej - lokalna tablica liderów, późniejsza konsolidacja i korekta pozycji miękkiej.
FX i waluty: jeśli nagrody są w różnych walutach, ustalamy moment konwersji, bufor FX 1-3%.
12) Bezpieczeństwo i prywatność
Dane: minimalizacja (pseudonimy, bez PII w agregatorze), szyfrowanie „w locie” i „w spoczynku”.
Dostęp: zasada najmniejszych przywilejów, tajemnice w KMS, kontrola dostępu.
T & C/jurysdykcje: dzienniki reguły/wersji, bloki geograficzne, ograniczenia wiekowe.
13) Obserwowalność i praktyki SRE
SLO: UI lag ≤ 300 ms p95, czas składania oświadczeń ≤ 10 min p95, czas uptime ≥ 99. 9%.
Metryka: zdarzenia/sekunda, odsetek odbiorów/odrzuceń, późne tempo, wzrost hałasu w górnej części K, opóźnienie strumienia, błędy memoriałowe, wskaźnik roszczeń.
Odwzorowanie: ingest → scoring → cache → UI.
Wpisy: przycisk stop (wyłączyć ciężkie eksperymenty/zmniejszyć N najlepiej), auto degradacji.
pośmiertnie: RCA przez 24-48 godzin, lista pozycji działania, polityka dotycząca błędów w budżecie.
14) Nagrody i roszczenia
Automatyczna nagroda: w przypadku bliskiego zdarzenia - obliczanie pozycji, emisja, wpływy.
Okno reklamacyjne: ≤ 72 godziny, przekaźnik dostawy, deterministyczny porządek płatności.
Przejrzystość: historia nagród w profilu: reguła, czas, kwota, źródło.
Uchwyty: dla rzadkich/cennych nagród przed KYC/AML.
15) Eksperymenty A/B i ewolucja obwodów
Co sprawdzić: N best (10/20), cap per spin (on/off), bonus za różnorodność (0/50/100), typ agregacji (ilość/mediana).
Randomizacja: według regionu/kanału/klastra - unikać przelewów.
Poręcze: RTP, reklamacje/10k, sygnały RG - nie zdegradowane.
Migracje: kompatybilność systemu składowania, podwójne zapisy na czas migracji.
16) Oceny w czasie rzeczywistym wzorów UX
Centrum oceny: zasada zwycięstwa, timer, twój wynik, pozostałe próby, następna nagroda.
Opinie na żywo: „+ 40 punktów za x3”, „2 próby z 20 pozostały”, „wspiąłeś się 3 miejsca”.
Prezentacje: ogólny top 100, „moja pozycja”, „góra dnia/podział”, wkład do zespołu.
A11y: kontrast, duża liczba, skupienie stanów, wyrażanie postępu.
Lokalizacja: terminy/zegary w lokalnej TZ, wielojęzyczność.
17) Częste awarie i scenariusze degradacji
18) Lista kontrolna uruchamiania ocen w czasie rzeczywistym
Zasady/Ekonomia
- Formuła, top N, tiebreaker, działy
- Współczynnik zwrotu, szerokość wypłaty, zakłady, roszczenie ≤ 72 h
Sprzęt
- Idempotent Ingest, Późne okno, Sharding
- Agregator strumieniowy (тоς-K/Top-M), Snapshotter
- Hot Cache/Edge, Health/Status API, przycisk Stop
Bezpieczeństwo/RG
- Punktacja behawioralna, wykres powiązań, ustniki/kwoty
- Limity RG, przypomnienia, KYC/AML dla dużych nagród
Dane/A/B
- Deski rozdzielcze: opóźnienie, opóźnienie, dwukrotność, wskaźniki sprawiedliwości
- Eksperymentalna konstrukcja i poręcze, podwójne zapisy podczas migracji
UX
- Centrum ratingowe, mikro-opinie, A11y, lokalizacja
- Krótkie zasady w 1 ekranie + pełny T&C
Niezawodna ocena w czasie rzeczywistym nie jest jedną usługą, ale zdyscyplinowanym ekosystemem: odbiór idempotentny, weryfikowane punktowanie, agregacja strumienia top-K, szybka pamięć podręczna, migawki stanu i wbudowane mechanizmy zwalczania oszustw/RG. Dodaj ścisłe SLO/SLA, zrozumiałe UX i zmienić weryfikację za pośrednictwem A/B - i dostajesz liderów, że gracze ufają, a produkt dostaje przewidywalny wzrost retencji, lepkość i LTV.