GH GambleHub

Adaptery dostawców

Adapter dostawca - izolowana warstwa integracyjna (warstwa antykorupcyjna, ACL), która przekłada kontrakt zewnętrznego dostawcy (dostawca gier, brama płatnicza, KYC/AML, ocena ryzyka, powiadomienia itp.) na wewnętrzny język domeny i odwrotnie. Chroni domenę przed niestabilnymi interfejsami API, anomaliami sieciowymi, ewolucjami schematów i polityką bezpieczeństwa.

Główne cele:

1. Oddzielenie od produkcji: Nie „surowy” ładunek zewnętrzny uderza w rdzeń.

2. Niezawodność: zarządzanie awariami (timeouts, retries, DLQ, wyłącznik).

3. Spójność: idempotencja, kolejność kluczy, komunikaty transakcyjne.

4. Działanie: mierniki, śledzenie, limity, izolacja transferowa i rezydencja.

1) Obszar odpowiedzialności adaptera

Zamówienia: opis systemów zewnętrznych/punktów końcowych; mapowanie → polecenia/zdarzenia wewnętrzne.
Transport: REST/gRPC/WebSocket/SQS/Kafka/SFTP; basen podłączeniowy, ciśnienie wsteczne.
Bezpieczeństwo: mTLS, OAuth2, HMAC, klucze/certyfikaty na lokatora/region, rotacja tajemnic.
Niezawodność: timeouts, retras with jitter, wyłącznik, deduplication.
Idempotencja: 'Idempotence-Key '/' request _ id', przechowywanie odpowiedzi/statusów.
Obserwowalność: mierniki SLO, kłody strukturalne, śledzenie.
Wersioning: wsparcie dla wielu wersji schematów/punktów końcowych.
Operacje: ficheflags, kanarki, piaskownice, certyfikat.

2) W stosownych przypadkach (przykładowe konteksty)

Gra/RGS: rozpocząć/zamknąć rundę, zakłady/wygrane, żetony sesyjne, statusy dostawcy.
Płatności/PSP: wpłaty/wypłaty, statusy haków internetowych, obciążenie zwrotne, 3-D Secure.
KYC/AML: weryfikacja, kontrole sankcji/POP, monitorowanie transakcji.
Ryzyko/oszustwo: punktacja, wyzwalacze, blokowanie zaleceń.
Komunikaty: e-mail/SMS/push, limity wysyłki, szablony.

Każdy typ ma własną maszynę stanu zdarzeń i SLA - adapter jest zobowiązany do jego normalizacji.

3) Kontrakt i odwzorowanie (wewnętrzne, zewnętrzne)

Zasady:
  • Wprowadzamy opublikowany język wewnątrz adaptera i nigdy nie przeciągamy pól dostawcy.
  • Wszystkie wiadomości przenoszą 'lokator _ id',' region ',' provider _ id', 'operation _ id',' version _ ts'.
  • Obsługujemy kilka wersji programów zewnętrznych za pośrednictwem maperów.
yaml mapping:
provider: "AcmeRGS"
version: "v3"
inbound:
SpinResultV3 -> Round. Resulted
BonusWinV3  -> Bonus. Wagered outbound:
StartRound  -> POST /v3/sessions/{id}/start
Stake    -> POST /v3/spins compat:
accepts: ["v2","v3"]
emits:  ["v3"]

4) Idempotencja i porządek

Request de-dup: "Idempotency-Key: <operation_id>' in requests; historia '(op_id → stan końcowy/odpowiedź)' z TTL.
Webhook de-dup: tablica „skrzynka odbiorcza (dostawca, event_id)” jako PK.
Kolejność według klucza: serializuj wywołania i przetwarzanie przez 'aggregate _ id' (na przykład' round _ id' lub 'psp _ tx _ id').
Skrzynka odbiorcza/wdychanie: komunikaty transakcyjne na obu krawędziach rurociągu.

5) Niezawodność: czasy, rekolekcje, wyłącznik

Timeouts: krótki klient-side (zorientowany na p95), oddzielny do podłączenia/odczytu.
Przekładki: tylko do pobrania (5xx/timeout/429), wykładnicze backoff + full jitter, limit próby i całkowity termin.
Wyłącznik: otwórz, gdy błąd/opóźnienie wzrosną; wdzięczna degradacja (na przykład wyłączyć wtórne funkcje RGS, ustawić „czekać na wynik”).
DLQ: „trujące” wiadomości z bogatymi meta-informacjami, bezpieczne redrave.

yaml reliability:
timeout_ms:
connect: 1000 read:  1500 retry:
max_attempts: 6 initial_backoff_ms: 200 max_backoff_ms: 8000 jitter: full retry_on: [TIMEOUT, 5xx, 429]
circuit_breaker:
failure_rate_threshold: 20%   # за окно slow_call_threshold_ms: 1500 half_open_max_calls: 10

6) Limity stawek, kwoty, konkurencyjność

Przestrzegać ograniczeń dostawcy (RPS, wybuch, jednoczesność).
Wdrożenie per-najemcy WFQ/DRR (uczciwość), aby „hałaśliwy” klient nie zjadł budżetu.
Szanuj nagłówki 'Retry-After '/' X-ΔLimit-'.
Wewnętrzne kolejki + podciśnienie na produkcie.

7) Bezpieczeństwo i zgodność

Transport: mTLS, TLS 1. 2 +, aktualne apartamenty szyfrujące, jeśli to możliwe.
Uwierzytelnianie: OAuth2 poświadczenia klienta/MTLS, HMAC (podpisane hashes ciała + znacznik czasu), klucze API.
Minimalizacja PII: tylko wymagane pola; maskowanie/edycja w dziennikach i DLQ.
Sekrety: KMS/HashiCorp Vault, automatyczna rotacja, izolacja na najemcę/region.
Zgodność: PCI DSS dla PSP, token do przechowywania zamiast PAN, RODO/lokalnych przepisów dotyczących danych.

8) Wielopoziomowy i wielobranżowy

Konfiguracja klawiszy/punktów końcowych na lokatora/region.
Pobyt danych: połączenia są wykonywane z regionu „domowego”; cross-region - tylko kruszywa.
Izolacja: własne puli połączeń i limity na najemcę.

yaml tenants:
T1:
region: eu-central provider_keys:
acme_rgs: { client_id: "...", cert_ref: "vault://..." }
psp_foo: { hmac_key_ref: "kms://..." }
endpoints:
acme_rgs: "https://eu. api. acme-rgs. com"
psp_foo: "https://eu. api. psp-foo. com"
T2:
region: sa-east
...

9) Obserwowalność: metryki, kłody, śledzenie

Metryka:
  • Sukcesy/błędy według klasy (2xx/4xx/5xx/timeout/429).
  • p50/p95/p99 latency metodą.
  • Uruchomienie limitu szybkości, wyłącznik otwarcia/zamknięcia, szybkość DLQ, sukces przekierowania.
  • Logi strukturalne: 'lokator _ id',' provider _ id', 'operation _ id',' endpoint ',' status ',' attempt ',' backoff _ ms '.
  • Śledzenie: single 'trace _ id', spans' serialize → wyślij → receive → map → publish, 'tags' schema _ version', 'region'.

10) Wersioning i phicheflags

Wsparcie v1/v2 kontraktu zewnętrznego równolegle; migracja - kanaryjska/przez najemców.
Każda nowa funkcja dostawcy jest za flagą; przełączanie bez zwolnienia.
Umowa Evolution: pierwszy dodatek, rygorystyczna walidacja programów (JSON Schema/Proto).

11) Playbooks (książki startowe)

1. Squall 429/limits: włącz globalne przepuszczanie, szanuj 'Retry-After', redystrybuuj okna między lokatorami.
2. Wzrost czasu: zmniejszenie jednoczesności, staranne zwiększenie czasu, otwarty wyłącznik, umożliwienie degradacji funkcji.
3. Niedopasowanie schematu: zamrozić redrive, włączyć kompatybilny maper, zasypać/przerobić.
4. Klapa Webhook: przełącz na tryb pull/reconcile, zastosuj dedup skrzynki odbiorczej.
5. Incydent u dostawcy: przełączyć na piaskownicę/kopię zapasową DC (jeśli istnieje), aktywować operacje „odroczone”.

12) Badanie

Testy umowne: producent/konsument w stosunku do stałych poprawek dostawcy.
Testy chaosu: opóźnienia, krople, nieporządek, duplikaty, częściowa odpowiedź, odłączenie.
Wydajność: stres na kolce pęknięcia; pomiar p95/p99, zachowanie wyłącznika.
Idempotencja: powtarzanie tego samego 'operation _ id' nie powoduje dodatkowych efektów.
E2E piaskownicy: happy-path/chargeback/controversy/cancellation/recalc scripts.

13) Schematy wdrażania

Oddzielny adapter serwisowy: + izolacja, niezależne wersje; − dodatkowa sieć.
Sidecar/plugin: + lokalizacja połączeń; − trudniejsze do zarządzania wersjami.
Biblioteka: + łatwe do wbudowania; − wysokie sprzęgi i wersje motley.

Zalecenie: adapter serwisowy z wyraźnym interfejsem API i cyklem jego wydawania.

14) Przykład API adaptera (Pseudo)

http
POST /adapters/psp/authorize
Headers:
X-Tenant: T1
Idempotency-Key: op-uuid
Body:
{ "amount":"10. 00","currency":"EUR","method":"card","card_token":"tok_..." }

→ 202 Accepted
{
"operation_id":"op-uuid",
"status":"PENDING",
"as_of":"2025-10-31T12:00:00Z"
}
Dostawca webhook → adapter → jądro:
  • Webhook z 'provider _ event _ id' →' skrzynka odbiorcza '(PK on' (provider,event_id) ') → mapowanie → zdarzenie domenowe' ΔAuthorized '.

15) Typowe błędy

Wciąganie „surowego” obwodu zewnętrznego do domeny → ciasna łączność i drogie migracje.
Brak idempotencji i skrzynki odbiorczej/outbox → duplikaty efektów i stanów fantomowych.
Retrai bez jitter/limitów → burza i zakaz limitu stawki.
Jedyny globalny basen bez sprawiedliwości → jeden najemca „stawia” wszystkich.
Kłody bez PII wersja/→ identyfikatory nie mogą być badane incydenty i ryzyko zgodności.
Nie ma kanarów/flag → wydanie łamie wszystkich naraz.
Ignorowanie 'Retry-After' i harmonogramów konserwacji dostawcy.

16) Lista kontrolna przedsprzedaży

  • Odwzorowanie schematów zewnętrznych → język wewnętrzny; wersje i kompatybilność wsteczna.
  • Identyfikacja żądań/haków internetowych ('operation _ id',' inbox ').
  • Timeouts, retras z full-jitter, wyłącznik, DLQ i bezpieczny redrive.
  • Wartości graniczne uprzywilejowania na najemcę; szacunek dla „Retry-After”.
  • mTLS/OAuth/HMAC, tajna rotacja, minimalizacja PII, audyt dostępu.
  • Izolacja regionalna i rezydencja danych; konfiguracje na najemcę/region.
  • metryki p95/p99, błąd klasy, breaker/429/DLQ-rate; śledzenie.
  • Piaskownice i testy kontraktowe; canary rollout i phicheflags.
  • Playbooks incydentów i szkolenia dyżurne.
  • Dokumentacja: SLA, limity, schematy, procesy ewolucji.

Wnioski

Adaptery dostawców to tarcza i tłumacz między domeną a światem zewnętrznym. Silny ACL z idempotencją, kontrolą błędów i obserwowalnością sprawia, że integracje są przewidywalne, zmniejsza koszty zmian u dostawcy i chroni przed "awariami łańcucha. "Adaptery projektowe jako niezależne, zarządzalne komponenty - a Twój "świat zewnętrzny" przestanie łamać wewnętrzną architekturę.

Contact

Skontaktuj się z nami

Napisz do nas w każdej sprawie — pytania, wsparcie, konsultacje.Zawsze jesteśmy gotowi pomóc!

Telegram
@Gamble_GC
Rozpocznij integrację

Email jest wymagany. Telegram lub WhatsApp są opcjonalne.

Twoje imię opcjonalne
Email opcjonalne
Temat opcjonalne
Wiadomość opcjonalne
Telegram opcjonalne
@
Jeśli podasz Telegram — odpowiemy także tam, oprócz emaila.
WhatsApp opcjonalne
Format: kod kraju i numer (np. +48XXXXXXXXX).

Klikając przycisk, wyrażasz zgodę na przetwarzanie swoich danych.