GH GambleHub

Webhuks առաքման երաշխիքները

Webhuki-ը asinhron ծանուցումներ է «համակարգից բաժանորդի» վրա HTTP (S)։ Ցանցը անվստահելի է, պատասխանները կորչում են, փաթեթները գալիս են կրկնօրինակներով կամ կարգից դուրս։ Այսպիսով, առաքման երաշխիքները կառուցվում են ոչ թե «TCP», այլ Webhuks-ի և հիբրիդային կուռքերի մակագրության մակարդակում։

Հիմնական նպատակն այն է, որ ապահովեք at-lement-once-առաքումը բանալիով (այնտեղ, որտեղ անհրաժեշտ է), բաժանորդին նյութեր տալ գաղափարական մշակման և վերականգնման գործիքի համար։


1) Երաշխիքների մակարդակները

Best-effect-ը միանգամյա փորձ է, առանց ռետրերի։ Ընդունելի է միայն «կարևոր» իրադարձությունների համար։

At-leport-once (խորհուրդ է) - հնարավոր են կրկնօրինակներ և out-of-order, բայց իրադարձությունը կփոխանցվի, եթե ստորագրողի հասանելիությունը խելացի ժամանակին։

Effectively-exactly-once-ը (ազդեցության մակարդակում), հասնում է idempotenty-ի և dedup-2019-ի համադրությունը բաժանորդի/ուղարկողի կողմում։ HTTP «exactly-once» տեղափոխության ժամանակ անհնար է։


2) Ուեբհուկի պայմանագիրը 'նվազագույն անհրաժեշտ

Վերնագրեր (օրինակ)


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

Մարմինը (օրինակ)

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
}

Ստացողի պահանջը 'արագ պատասխանել «2xx» ստորագրության բեֆերիզացիայից և վալիդացիայից հետո, իսկ բիզնես մշակումը' ասինխրոն։


3) Կարգը և պատճառները

Բանալու կարգը 'երաշխիքը «չի հեռանում» միայն մեկ «partrone _ key» -ի ներսում (օրինակ ՝ «player _ id», «wallet _ id», «pult _ tx _ id»)։

Համաշխարհային կարգը երաշխավորված չէ։

Ուղարկողի կողմում շարքի հերթն է (մեկ սպառող/շարդինգ), ստացողի կողմում 'inbox s' (source, event _ id) "և ազդանշանային սպասումը բաց թողած" seq "։

Եթե բաց թողնեք քննադատական, տրամադրեք pox-API 'GET/events։ after = wwww.kpoint "կարգավիճակի համար" բռնել և խուսափել "։


4) Idempotenty և deduplication

Յուրաքանչյուր ուեբհուկ կրում է կայուն «X-Webhook-Id»։

Ստացողը պահպանում է «inbox (event _ id)»: PK - «source + event _ id»; կրկնությունները նշված են 71-op։

Կողմնակի էֆեկտները (ձայնագրությունը BD/դրամապանակներում) կատարվում են միայն մեկ անգամ առաջին «տեսիլքի» ժամանակ։

Թիմերի համար «էֆեկտով» օգտագործեք Idempotency-Key-ը և արդյունքների քեշը ռետրերի պատուհանի ժամանակ։


5) Retrai, backoff և պատուհաններ

Ռետրեյի քաղաքականությունը (հանրաքվեներ)

Կտրեք «5xx/timeout/connationerror/407-Systlict (retryable )/429»։

Մի ծախսեք «4xx» -ի վրա, բացի «409/423/429» (և միայն համաձայնեցված սեմանտիկայի դեպքում)։

Էքսպոնենցիալ backoff + fultjitter: 0։ 5s, 1s, 2s, 4s, 8s, … մինչև «max = 10-15 րոպե»; TTL պատուհանները 'օրինակ 72 ժամ։

Հարգել «Retry-After» -ը ստացողի մոտ։

Ունենալ ընդհանուր dedline '«ընդունել իրադարձությունը չհանձնված» և թարգմանել այն DLQ-ում։

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-ը թունավոր կամ ավարտվում TTL-ով ամբողջական մետաֆազով (paiload, վերնագրեր, սխալներ, փորձեր, հեշեր)։

Վեբ վահանակ/API-ը redrive-ի համար (կետային կրկնվող առաքում), որը ունի oporation աջ endpoint/գաղտնիքը։

Rate-limited redrive-ը և batch-redrive-ը գերակայությամբ։


7) Անվտանգություն

MTSA (հնարավորության դեպքում) կամ TFC 1։ 2+.

Մարմնի ստորագրությունը (HMAC գաղտնի per tenault/endpoint)։ Վերիֆիկացում

1. Դուրս բերել «t» (timestamp) վերնագրից, ստուգել սայթաքող պատուհանը (օրինակ ՝ 355 րոպե)։

2. Վերականգնել ստորագրության տողը 'tbody ', համեմատել HMAC-ը constrone-time-ում։
Anti-replay: Պահել «(event _ id, t)» և շեղել չափազանց հին/կրկնվող հարցումները։
Գաղտնիքների ռոտացիա 'երկու ակտիվ գաղտնիքների աջակցություն ռոտացիայի ժամանակահատվածի համար։
Բացի այդ, IP-allowlist-ը, «User-Agent» վերնագիրը, origin-IP-ի դեդիկացիան։

8) Քվոտաներ, rate limits և արդարություն

Fox-Queue per ten.ru/www.scri.ru: Որպեսզի մեկ ստորագրողը/ստենանտը չնշի ընդհանուր փամփուշտը։

Քվոտաները և burst-limits առաջացող կոմպոզիցիայի և per-endpoint-ի վրա։

Արձագանքը '429': Կարդալ 'Retry-After', հոսքը։ երկարատև հավաքման ժամանակ 'degrade (միայն կրիտիկական իրադարձությունների ուղարկումը)։


9) Կյանքի ցիկլը

Register/Verify: POST endpoint challenge/response կամ out-of-band ապացույց։

Least (ցանկությամբ), ստորագրությունը գործում է մինչև «valid _ to»; շեղումը ակնհայտ է։

Test ping 'արհեստական իրադարձություն ստուգելու համար, նախքան հիմնական տոպիկների միացումը։

Secret rotation: `current_secret`, `next_secret` с `switch_at`.

Health-փորձարկումներ 'HEAD/GET-ը latency և TMS-ի ստուգմամբ։


10) Սխեմաների էվոլյուցիան (իրադարձությունների տարբերակները)

Էվոլյուցիան intitive (MINOR տարբերակը API), breaking-ը նոր տեսակի է։

Սխեմաների գրանցումը (JSON-Schema/Avro/Eurobuf) + ավտոմատ վալիդացիա ուղարկելուց առաջ։

Իրադարձության տեսակի տարբերակումը '"payment. authorized. v1` → `…v2`.

«X-Event-Type» վերնագիրը և «schema _ version» դաշտը մարմնի մեջ, երկուսն էլ պարտադիր են։


11) Դիտարկումը և SLO-ն

Մետրիկները (օրինակ/տենանտու/ստորագրողի)

`deliveries_total`, `2xx/4xx/5xx_rate`, `timeout_rate`, `signature_fail_rate`.

«attempult _ avg», «p50/p95/p99 _ medivery _ latency _ latency» (հրատարակությունից մինչև 2xx)։

`dedup_rate`, `out_of_order_rate`, `dlq_rate`, `redrive_success_rate`.
`queue_depth`, `oldest_in_queue_ms`, `throttle_events`.

SLO (հանրաքվե)

Առաքումների մասնաբաժինը 60 c (p95) 99 է։ Հինգ տոկոսը կրիտիկական իրադարձությունների համար։

DLQ ≤ 0. 1 տոկոսը 24 ռուբլիով

Signature failures ≤ 0. 05%.

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


12) Ուղարկողի հանրաքվե ալգորիթմը

1. Գրեք իրադարձությունը գործարքային բլոկում։

2. Որոշել partection _ key և seq; տեղադրել։

3. Worker վերցնում է բանալին, ձևավորում է հարցումը, ստորագրում, ուղարկում թայմաուտների հետ (connational/read)։

4. «2xx» - ընդունել առաքյալներին, ամրագրել լատենտությունը և seq-chekpoint։

5. «429/5xx/timeout» -ի դեպքում, ըստ քաղաքականության։

6. TTL-ով DLQ-ն և ալերտը։


13) Հանրաքվե մշակողը (ստացողը)

1. Ընդունել հարցումը, ստուգել TFC/www.o։

2. Ստորագրության վալիդացիան և ժամանակի պատուհանները։

3. Արագ ACK 2xx (տեղական inbox/հերթում սինխրոն ձայնագրությունից հետո)։

4. Asinhrone worker կարդում է «inbox», ստուգում է «event _ id» (dedup), անհրաժեշտության դեպքում, պատվիրում է «seq 'ներսում»։

5. Կատարում է էֆեկտներ, գրում է «set/seq chekpoint» reconcile-ի համար։

6. Սխալի դեպքում տեղական գետերն են։ «թունավոր» առաջադրանքները կատարվում են տեղական DLQ-ի ալտերտերով։


14) Reconcile (պուլլ-2019)

«Անխուսափելի» կոմպոզիցիաների համար

`GET /events? partance _ key =... & after _ seq =... & limit =... "- տալ բոլոր բաց թողած։

Token-chekpoint: 'after = opaque _ token' seq-ի փոխարեն։

Idempotent redelivery: Նույն «event _ id», նույն ստորագրությունը նոր 't'։


15) Օգտակար վերնագրեր և վերնագրեր

2xx - ընդունեց (նույնիսկ եթե բիզնես մշակումը ավելի ուշ)։

410 Gone - endpoint փակված է (ուղարկողը դադարում է առաքումը և սահմանափակում է բաժանորդագրությունը որպես «արխիվ»)։

4.9/423 - ռեսուրսի ժամանակավոր արգելափակումը retram-ի սահմանափակում է։

429 - չափազանց հաճախ trotttl և backoff։

400/401/403/404 - միգրացիոն սխալ; կանգնեցնել գետերը, բացել հյուսետը։


16) Multi-tenant և տարածաշրջանները

Առանձին գծեր և limits per tenae/endpoint։

Euresidency: ուղարկումը տվյալների տարածքից; «X-Tenault», «X-Region» վերնագրերի միջոցով։

Ձախողումների մեկուսացումը 'մեկ բաժանորդի նվազումը չի ազդում մյուսների վրա (separate poope)։


17) Թեստավորում

Euract tes.ru: մարմնի/ստորագրությունների ֆիքսված օրինակներ, վալիդացիայի ստուգում։

Chaos: dom/կրկնօրինակներ, shuffle, ցանցի ուշացում, «RST», «TIM»։

Load: burst փոթորիկ, p95/p99։

Տե՛ ս 'հակատիպը, հնացած timestamp, սխալ գաղտնիքները, ռոտացիան։

DR/Replay: զանգվածային redrive DLQ-ից մեկուսացված պատում։


18) Պլեյբուկի (runbooks)

1. Աճը 'signature _ fail _ rate'

Ստուգել «toler.ru» -ի ավարտված ժամացույցի թռիչքը, գաղտնիքների ռոտացիան։ ժամանակավորապես ներառել «dult secret»։

2. Երիկամների հերթը («oldest _ in _ queue _ enter»)

Բարձրացնել վորկերները, ներառել կրիտիկական տոպիկների գերակայությունը, ժամանակավորապես նվազեցնել «աղմկոտ» տեսակների հաճախությունը։

3. Փոթորիկ '429' ստորագրողի մոտ

Միացրեք տրոտլինգը և դադարները փորձերի միջև։ տեղափոխել ավելի քիչ քննադատական տեսակներ։

4. Զանգվածային «5xx»

Բացել circuit-breaker կոնկրետ endpoint-ի համար, տեղափոխել www.er & batch ռեժիմը։ ստորագրողի ազդանշանը։

5. DLQ լրացումը

Կանգնեցնել քննադատական հրապարակումը, ներառել batch-redrive ցածր RPS-ով, բարձրացնել ալտերը ստորագրությունների սեփականատերերին։


19) Տիպիկ սխալներ

Սինխրոն ծանր բուժումը մինչև 2xx-ի պատասխանը ռետրաններ և կրկնօրինակներ։

Մարմնի/պատուհանի ստորագրություններ չկան, որոնք խոցելիություն են առաջացնում փոխարինելու/կտրելու համար։

«Event _ id» և «inbox» -ի բացակայությունը անհնար է դարձնել գաղափարախոսություն։

«Համաշխարհային կարգի» փորձը հավիտենական արգելափակում է հերթերը։

Retrai առանց jitter/limits www.ru (thundering herd)։

Միակ ընդհանուր փամփուշտը բոլոր բաժանորդների վրա «աղմկոտ» տեղադրում է բոլորին։


20) Չեկ թուղթ մինչև վաճառելը

  • Պայմանագիրը '"event _ id", "partence _ key", "seq", "event _ type. VN ', HMAC ստորագրությունը և timestamp։
  • Ուղարկողը 'wwww.box, հեռուստացույց, backoff + jitter, TTL, DLQ և redrive։
  • Ստացողը 'արագ ձայնագրություն inbox + 2xx; իդեմենտային վերամշակում; Տեղական DLQ-ն։
  • Անվտանգություն ՝ TSA, ստորագրություններ, հակատիպեր, dom-secret, նավարկություն։
  • Քվոտաներ/լիմիտներ ՝ fox-queue per tenae/endpoint, հարգանք «Retry-After»։
  • Reconcile API և chekpoints; նախատեսված է բաժանորդների համար։
  • Դիտարկումը 'p95/հոսքեր/սխալներ/DLQ, ուղին' event _ id "։
  • Իրադարձությունների տարբերակումը և սխեմաների էվոլյուցիայի քաղաքականությունը։
  • Պլեյբուկները բացատրում են գլոբալ դադարի/ցրտահարության «կոճակը»։

Եզրակացություն

Հուսալի Webhuks-ը HTTP-ի վերևում է, ոչ միայն «POST-ը JSON-ի հետ»։ Հստակ պայմանագիրը (ID, կարգադրության բանալին, ստորագրությունը), impter-ը, jitter-ը, արդար հերթը և լավ կարգավորված պլեյբուսները վերածում են «լավագույն դեպքի» կանխատեսելի և չափված առաքման մեխանիզմի։ Կառուցեք at-leport-once + կարգը + reconcile բանալին, և համակարգը հանգիստ գոյատևելու է ցանցը, բեռի պիկը և մարդկային սխալները։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։