GH GambleHub

Webhuklary eltmegiň kepillikleri

Webhuklar - HTTP (S) arkaly "ulgamdan abonente" asinxron habarnamalary. Tor ygtybarly däl: jogaplar ýitýär, bukjalar dublikat ýa-da tertipden daşary gelýär. Şonuň üçin eltip bermek kepillikleri "TCP boýunça" däl-de, webhuklaryň we domen idempotentliginiň teswirnamasy derejesinde gurulýar.

Esasy maksat: açar boýunça (zerur bolan ýerlerde) at-least-once eltip bermegi üpjün etmek, abonente dempotent gaýtadan işlemek üçin materiallary we dikeldiş üçin reconcile guralyny bermek.


1) Kepillikleriň derejeleri

Best-effort - retrajsyz bir gezeklik synanyşyk. Diňe "möhüm däl" wakalar üçin kabul ederlikli.
At-least-once (maslahat berilýär) - dublikatlar we out-of-order mümkin, ýöne waka abonent üçin amatly möhletde elýeterli bolan ýagdaýynda getiriler.
Effectively-exactly-once (effekt derejesinde) - abonentiň/iberijiniň tarapynda idempotentlik we dedup-ammar kombinasiýasy arkaly gazanylýar. Ulagda HTTP "exactly-once" mümkin däl.


2) Webhuk şertnamasy: iň az zerur

Sözbaşylar (mysal):

X-Webhook-Id: 5d1e6a1b-4f7d-4a3d-8b3a-6c2b2f0f3f21  # глобальный ID события
X-Delivery-Attempt: 3                 # номер попытки
X-Event-Type: payment.authorized.v1          # тип/версия
X-Event-Time: 2025-10-31T12:34:56Z          # ISO8601
X-Partition-Key: psp_tx_987654            # ключ порядка
X-Seq: 418                      # монотонный номер по ключу
X-Signature-Alg: HMAC-SHA256
X-Signature: t=1730378096,v1=hex(hmac(secret, t        body))
Content-Type: application/json
Beden (mysal):
json
{
"id": "5d1e6a1b-4f7d-4a3d-8b3a-6c2b2f0f3f21",
"type": "payment.authorized.v1",
"occurred_at": "2025-10-31T12:34:56Z",
"partition_key": "psp_tx_987654",
"sequence": 418,
"data": {
"payment_id": "psp_tx_987654",
"amount": "10.00",
"currency": "EUR",
"status": "AUTHORIZED"
},
"schema_version": 1
}

Alyja bildirilýän talap: goluň buferirlenenden we tassyklanandan soň çalt '2xx' jogap bermek, işewürlik işini bolsa asinhron etmek.


3) Tertibi we sebäpliligi

Açar tertibi: kepillik diňe bir 'partition _ key' içinde "gitmez" (mysal üçin, 'player _ id', 'wallet _ id', 'psp _ tx _ id').
Global tertip kepillendirilmeýär.
Iberijiniň tarapynda - açar boýunça seriýalaşdyrylan nobat (bir sarp ediji/şarding), alyjynyň tarapynda - inbox c '(source, event_id)' we goşmaça sypdyrylanlara garaşmak 'seq'.

Eger geçişler möhüm bolsa, pull-API 'GET/events beriň? after = checkpoint '"ýetmek we barlamak" statusy üçin.


4) Idempotentlik we duplikasiýa

Her webhuk durnukly 'X-Webhook-Id' göterýär.
Alyjy 'inbox (event_id)' saklaýar: PK - 'source + event_id'; → no-op.
Zyýanly täsirler (DB/gapjyga ýazylmak) wakanyň ilkinji "görüşinde" diňe bir gezek ýerine ýetirilýär.
"Effekt" buýruklary üçin "Idempotency-Key" we "Retrais" penjiresiniň wagty üçin netije keşini ulanyň.


5) Retraýalar, backoff we penjireler

Retraý syýasaty (salgylanma):
  • '5xx/timeout/connection error/409-Conflict (retryable )/429' -da retra.
  • '409/423/429' -dan başga '4xx' -a geçilmez (we diňe ylalaşylan semantikada).
  • Eksponensial backoff + full jitter: 0. 5s, 1s, 2s, 4s, 8s, … 'max = 10-15 min' -e çenli; TTL retraý penjireleri: mysal üçin 72 sagat.
  • Alyjynyň 'Retry-After' -ine hormat goýmak.
  • "Wakany gowşurylmady diýip ykrar etmek" we ony DLQ-e geçirmek.
yaml retry:
initial_ms: 500 multiplier: 2.0 jitter: full max_delay_ms: 900000 ttl: 72h retry_on: [TIMEOUT, 5xx, 429]

6) DLQ и redrive

DLQ - doly metainformasiýa (paiload, sözbaşylar, ýalňyşlyklar, synanyşyklar, eşler) bilen zäherli ýa-da TTL-den geçen wakalaryň "gonamçylygy".
Web konsol/API redrive (nokat gaýtadan eltip bermek) üçin endpoint/syr opsiýa düzedişi bilen.
Rate-limited redrive we batch-redrive ileri tutulýan ugur bilen.


7) Howpsuzlyk

mTLS (mümkin boldugyça) ýa-da TLS 1. 2+.

Bedeniň goly (per tenant/endpoint syry bolan HMAC). Tassyklamak:

1. Sözbaşydan 't' (timestamp) çykarmak, süýşýän penjiräni barlamak (mysal üçin ± 5 minut).

2. 't' goluny dikeltmekbody ', HMAC-ni constant-time bilen deňeşdiriň.
Anti-replay: '(event_id, t)' saklamak we köne/gaýtalanýan soraglary ret etmek.
Syrlaryň aýlanmagy: aýlanyş döwründe iki sany işjeň syry goldamak.
Goşmaça: IP-allowlist, "User-Agent" sözbaşy, origin-IP dedikasiýasy.

8) Kwotalar, rate limits we adalat

Fair-Queue per tenant/subscriber: bir abonentiň/tenantyň umumy howuzy urmazlygy üçin.
Çykýan traffik we per-endpoint üçin kwotalar we burst-çäkler.
'429' -a reaksiýa: 'Retry-After' okamak, trotlet akymy; uzak möhletli çäklendirmede - degrade (diňe möhüm hadysalary ibermek).


9) Abuna ýazylmagyň durmuş sikli

Register/Verify: POST endpoint → challenge/response ýa-da out-of-band tassyklamasy.
Lease (isleg boýunça): gol 'valid _ to' -e çenli hereket edýär; uzaltmak - aýdyň.
Secret rotation: `current_secret`, `next_secret` с `switch_at`.
Test ping: esasy topikleri açmazdan ozal marşruty barlamak üçin emeli waka.
Saglyk synaglary: latency we TLS profilini barlamak bilen wagtal-wagtal HEAD/GET.


10) Shemalaryň ewolýusiýasy (wakalaryň wersiýasy)

Wakanyň görnüşi: 'payment. authorized. v1` → `…v2`.
Ewolýusiýa - additive (täze meýdanlar → API MINOR wersiýasy), breaking → täze görnüş.
Shemalaryň sanawy (JSON-Schema/Euro/Protobuf) + iberilmezden öň awtomatiki tassyklama.
Bedende 'X-Event-Type' sözbaşy we 'schema _ version' meýdany - ikisi hem hökmanydyr.


11) Synlamak we SLO

Metrikler (görnüş/tenant/abonent boýunça):
  • `deliveries_total`, `2xx/4xx/5xx_rate`, `timeout_rate`, `signature_fail_rate`.
  • 'attempts _ avg', 'p50/p95/p99 _ delivery _ latency _ ms' (neşirden 2xx çenli).
  • `dedup_rate`, `out_of_order_rate`, `dlq_rate`, `redrive_success_rate`.
  • `queue_depth`, `oldest_in_queue_ms`, `throttle_events`.
SLO (salgylanma):
  • Eltip bermegiň paýy ≤ 60 c (p95) - 99. 5% möhüm wakalar üçin.
  • DLQ ≤ 0. 24 sagatda 1%
  • Signature failures ≤ 0. 05%.

Логи/трейсинг: `event_id`, `partition_key`, `seq`, `attempt`, `endpoint`, `tenant_id`, `schema_version`, `trace_id`.


12) Iberijiniň salgylanma algoritmi

1. Wakany geleşik outbox -a ýazyň.
2. partition_key we seq kesgitlemek; nobata goýmak.
3. Worker açar boýunça alýar, haýyşy emele getirýär, gol çekýär, wagt bilen iberýär (connect/read).
4. '2xx' bolanda - gowşuryldy diýip ykrar etmek, gizlinligi we seq-çek nokadyny düzetmek.
5. Haçan '429/5xx/timeout' - syýasata laýyklykda retrai.
6. TTL → DLQ we alert boýunça.


13) Salgylanma prosessory (alyjy)

1. Soragy kabul et, TLS/proto barlaň.
2. Gol we wagt penjiresini tassyklamak.
3. Çalt ACK 2xx (lokal inbox/nobata sinhron ýazylandan soň).
4. Asinxron worker 'inbox' okaýar, 'event _ id' -ni (dedupy) barlaýar, zerur bolsa 'seq' içindäki 'partition _ key' -ni tertipleşdirýär.
5. Täsirleri ýerine ýetirýär, reconcile üçin "offset/seq checkpoint" ýazýar.
6. Ýalňyşlyk ýüze çykan halatynda - ýerli retralar; "zäherli" meseleler → alertler bilen lokal DLQ.


14) Reconcile (pull-kontury)

"Geçip bolmajak" hadysalar üçin:
  • `GET /events? partition_key=...&after_seq=...&limit=...' - sypdyrylanlaryň hemmesini bermek.
  • "seq" ýerine 'after = opaque _ token' belgi.
  • Idempotent redelivery: şol bir 'event _ id', täze 't' boýunça şol bir gol.

15) Peýdaly sözbaşylar we kodlar

2xx - kabul edildi (iş gaýtadan işlenenden soň hem).
410 Gone - endpoint ýapyldy (iberiji eltip bermegi bes edýär we abunalygy "arhiwe" diýip belleýär).
409/423 - çeşmäniň wagtlaýyn petiklenmegi → retrai akyl.
429 - gaty ýygy → trottl we backoff.
400/401/403/404 - konfigurasiýa ýalňyşlygy; retraýlary duruzmak, bilet açmak.


16) Köp tenant we sebitler

Aýry-aýry nobatlar we per tenant/endpoint çäkleri.
Data residency: maglumatlary sebitden ibermek; "X-Tenant", "X-Region" sözbaşylary.
Şowsuzlyklaryň izolýasiýasy: bir abonentiň ýykylmagy beýlekilere täsir etmeýär (separate pools).


17) Synag

Contract tests: tel/gollaryň kesgitlenen mysallary, tassyklamany barlamak.
Chaos: drop/dublikatlar, shuffle tertibi, toruň gijikdirilmegi, 'RST', 'TLS' - ýalňyşlyklar.
Ýüklemek: burst-tupan, p95/p99.
Howpsuzlyk: anti-gürlemek, köne timestamp, nädogry syrlar, aýlaw.
DR/Replay: izolirlenen stendde DLQ-den köpçülikleýin redrive.


18) Oýun kitaplary (runbooks)

1. 'signature _ fail _ rate'

Sagadyň süýşmegini, geçen 'tolerans', syrlaryň aýlanmagyny barlamak; "dual secret" -i wagtlaýyn açyň.

2. Nobat ýaşarýar ('oldest _ in _ queue _ ms' ↑)

Workerleri köpeltmek, möhüm topikleriň ileri tutulmagyny goşmak, "şowhunly" görnüşleriň ýygylygyny wagtlaýyn azaltmak.

3. Abonent üçin tupan '429'

Synanyşyklaryň arasynda trottling we arakesmeleri açyň; wakalaryň az kritiki görnüşlerini göçürmek.

4. Köpçülikleýin '5xx'

Belli bir endpoint üçin circuit-breaker açyň, defer & batch re modeimine geçiriň; abonente signal.

5. DLQ doldurmak

Tankydy däl neşirleri duruzmak, pes RPS bilen batch-redrive açmak, abuna eýelerine aladalary ýokarlandyrmak.


19) Adaty ýalňyşlyklar

2xx → retrailer we dublikatlar jogap berýänçä sinhron agyr gaýtadan işlemek.
Beden/Wagt penjiresi goly ýok → Çalyşma/Replay gowşaklygy.
'event _ id' we 'inbox' → ýok.
"Global tertip" synanyşygy → nobatlaryň baky petiklenmegi.
Jitter/limitsiz retraýalar → hadysany güýçlendirmek (thundering herd).
Ähli abonentler üçin bir umumy howuz → "şowhunly" hemmäni goýýar.


20) Azyk önüminden öň çek-sanawy

  • Şertnama: 'event _ id', 'partition _ key', 'seq', 'event _ type. vN ', HMAC we timestamp goly.
  • Iberiji: outbox, açar seriýalizasiýasy, backoff + jitter, TTL, DLQ we redrive bilen retralar.
  • Alyjy: inbox + 2xx-a çalt ýazylmak; idempotent gaýtadan işlemek; lokal DLQ.
  • Howpsuzlyk: TLS, gollar, anti-rap, dual-secret, aýlaw.
  • Kwotalar/çäkler: fair-queue per tenant/endpoint, hormat 'Retry-After'.
  • Reconcile API we barlag nokatlary; abonentler üçin resminamalar.
  • syn edilişi: p95/akymlar/ýalňyşlyklar/DLQ, 'event _ id' -den yzarlamak.
  • Wakalaryň wersiýalanmagy we shemalaryň ewolýusiýa syýasaty.
  • Wakalaryň oýun kitaplary we global arakesme/eroziýa "düwmesi".

Netije

Ygtybarly webhuklar diňe "JSON bilen POST" däl, HTTP-iň üstündäki teswirnamadyr. Anyk şertnama (ID, tertip açary, gol), idempotentlik, jitter bilen retraýalar, adalatly nobat we oňat düzülen pleýbuklar "iň gowy-iş" -y öňünden aýdyp boljak we ölçäp boljak eltiş mehanizmine öwürýär. At-least-once + açar tertibi + reconcile guruň we ulgam tordan, ýüküň iň ýokary derejelerinden we adam ýalňyşlyklaryndan arkaýyn halas bolar.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.