GH GambleHub

Webhooks: გამეორება და ქვითარი

1) ძირითადი მიწოდების მოდელი

At-least-once (სტანდარტულად): ღონისძიება 1 ჯერ გადაეცემა. გარანტიები ზუსტად ერთხელ მიიღწევა მიმღების იდემპოტენტურობით.
ქვითარი (ACK): მიმღებიდან მხოლოდ ნებისმიერი 2xx (ჩვეულებრივ 200/204) ნიშნავს წარმატებას. ყველაფერი დანარჩენი განმარტებულია, როგორც უარი და იწვევს გამეორებას.
სწრაფი ACK: უპასუხეთ 2xx- ს მოვლენის დასრულების შემდეგ, თავის მხრივ, და არა სრული ბიზნეს დამუშავების შემდეგ.

2) მოვლენების ფორმატი და სავალდებულო სათაურები

დატვირთვა (მაგალითი)

json
{
"id": "evt_01HXYZ",
"type": "order. created",
"occurred_at": "2025-11-03T18:10:12Z",
"sequence": 128374,
"source": "orders",
"data": { "order_id": "o_123", "amount": "49. 90", "currency": "EUR" },
"schema_version": 1
}

გამგზავნის სათაურები

'X-Webhook-Id: evt _ 01HXYZ' უნიკალური ID მოვლენაა (გამოიყენეთ დედაპლატაციისთვის).
'X-Webhook-Seq: 128374' - ერთფეროვანი თანმიმდევრობა (გამოწერის/თემის მიხედვით).
`X-Signature: sha256=<base64(hmac_sha256(body, secret))>` — HMAC-подпись.
'X-Retry: 0.1.2...' - მცდელობის ნომერი.
'X-Webhook-Version: 1' - ხელშეკრულების ვერსია.
(სურვილისამებრ) 'Traceparent' - მარშრუტების კორელაცია.

მიმღების პასუხი

2xx - წარმატებით მიიღეს (ამ 'id- ზე გამეორება აღარ იქნება).
410 Gone - დისტანციური/არააქტიური, გამგზავნი წყვეტს გამეორებას და ააქტიურებს გამოწერას.
429/5xx/Taimaut - გამგზავნი იმეორებს რეტრაის პოლიტიკას.

3) გამეორების პოლიტიკა (რეპეტიციები)

რეკომენდებული backoff კიბე (+ jitter)

'1s, 3s, 10s, 30s, 2 მ, 10 მ, 30 მ, 2h, 6h, 24h' (შეჩერებულია ლიმიტის შემდეგ, მაგალითად, 48-72 საათი).

წესები:
  • ექსპონენციალური backoff + შემთხვევითი jitter (± 20-30%) თავიდან ასაცილებლად „ნახირი ეფექტი“.
  • შეცდომების კვორუმი დროებითი წარუმატებლობისთვის (მაგალითად, გამეორება, თუ 5xx ან ქსელის ტაიმუტი).
  • Respect 429: დააყენეთ მინიმალური 'min (სათაური Retry-After, შემდეგი backoff ფანჯარა)'.

ტაიმაუტები და ზომები

ნაერთის ტაიმუტი 3-5 წამი; პასუხის მთლიანი ტაიმუტი 10 წამი.
სხეულის ზომა ხელშეკრულებით (მაგალითად, 256 KB), წინააღმდეგ შემთხვევაში 413 არის „chunking“ ან „pull URL“ ლოგიკა.

4) Idempotence და deduplication

იდემპოტენტური გამოყენება: იგივე 'id' გამეორებების დამუშავებამ უნდა დაუბრუნოს იგივე შედეგი და არ შეცვალოს მდგომარეობა.
დედაპლატის საცავი მიმღების მხარეს: შენახვა '(X-Webhook-ID, processed _ at, checksum)' s TTL - Retray ფანჯრები (24-72 საათი).
კომპოზიციური გასაღები: თუ რამდენიმე ტოპიკია '(subscription _ id, event _ id)'.

5) ბრძანება და „exactly-once ეფექტები“

მკაცრი წესრიგის გარანტია რთულია განაწილებულ სისტემებში. გამოიყენეთ:
  • Partition by key: იგივე ლოგიკური ნაკრები (მაგალითად, 'order _ id') ყოველთვის მიწოდების ერთ „არხზე“.
  • Sequence: გადახედეთ მოვლენებს ძველი „X-Webhook-Seq“ - ით და დააყენეთ ისინი „პარკინგის ლოტზე“, სანამ დაკარგული არ არის.
Exactly-once ეფექტები მიიღწევა:
  • გამოყენებული ოპერაციების ჟურნალი (outbox/inbox pattern),
  • გარიგების გარიგება 'event _ id' BD- ში,
  • საგები/ანაზღაურება რთული პროცესებისთვის.

6) შეცდომების გადაწყვეტა სტატუს კოდებზე (ცხრილი)

პასუხის კოდიმნიშვნელობა გამგზავნისთვისმოქმედება
2xxACK მიღებულიამიგვაჩნია, რომ მიწოდებული, შეჩერებულია retrai
4xx (410/429 გარდა)მუდმივი შეცდომა (payload/ავტორიზაცია)ინტეგრაციის აცნობეთ DLQ- ს
410Endpoint წაშლილია/მოძველებულიაშეჩერება, გამოწერის დეაქტივაცია
408/429დროებითი გადატვირთვა/ტაიმუტიგამეორება backoff/Jitter; გაითვალისწინეთ 'Retry-After'
5xxსერვერის დროებითი შეცდომაგამეორება backoff/Jitter
3xxარ გამოიყენოთ Webhuk- ის რედაქციებიკონფიგურაციის შეცდომა

7) არხის უსაფრთხოება

თითოეული წერილის HMAC ხელმოწერა; შემოწმება მიღებაზე „დროის ფანჯრით“ (mitm და replay შეტევები).
mTLS მგრძნობიარე დომენებისთვის (KUS/გადახდები).
გამავალი მისამართების IP allowlist, TLS 1. 2+, HSTS.
PII შემცირება: არ გაგზავნოთ დამატებითი პერსონალური მონაცემები; შენიღბეთ ლოგებში.
საიდუმლოებების როტაცია: ორი აქტიური გასაღები (აქტივი/შემდეგი) და სათაური „X-Key-Id“ მიმდინარე მითითებისთვის.

8) რიგები, DLQ და ფრჩხილები

მოვლენები აუცილებლად იწერება შაბათ-კვირას/ჟურნალი გამგზავნის მხარეს (საიმედო რეპლიკისთვის).
თუ მაქსიმალური რეაგირება აღემატება, მოვლენა მიდის DLQ- ში (Dead Letter Queue) მიზეზით.
Replay API (მიმღებისთვის/ოპერატორისთვის): განმეორებითი გაგზავნა 'id '/დროის/თემის დიაპაზონში, შეზღუდული RPS და დამატებითი ხელმოწერა/ავტორიზაცია.

Replay API- ის მაგალითი (გამგზავნი):

POST /v1/webhooks/replay
{ "subscription_id": "sub_123", "from": "2025-11-03T00:00:00Z", "to": "2025-11-03T12:00:00Z" }
→ 202 Accepted

9) კონტრაქტი და ვერსია

schema _ version 'და ტრანსპორტი (' X-Webhook-Version ').
დაამატეთ მინდვრები მხოლოდ როგორც სურვილისამებრ; მოცილებისას - უმცირესობის მიგრაცია და გარდამავალი პერიოდი (ორმაგი-write).
აღწერეთ მოვლენების ტიპები, მაგალითები, სქემები (JSON სქემა), შეცდომების კოდი.

10) დაკვირვება და SLO

გამგზავნის ძირითადი მეტრიკა:
  • 'delivery _ success _ rate' (2xx/ყველა მცდელობა), 'first _ attempt _ attempt _ success _ rate'
  • `retries_total`, `max_retry_age_seconds`, `dlq_count`
  • `latency_p50/p95` (occurred_at → ack_received_at)
მიმღების ძირითადი მეტრიკა:
  • `ack_latency` (receive → 2xx), `processing_latency` (enqueue → done)
  • `duplicates_total`, `invalid_signature_total`, `out_of_order_total`
SLO მაგალითები:

99. მოვლენების 9% იღებს პირველ ACK 60 წამს (28d).

DLQ ≤ 0. მთლიანი რაოდენობის 1%; DLQ raples 24:
  • 11) ტაიმინგი და ქსელის შესვენებები

გამოიყენეთ UTC დროის სფეროებში; სინქრონიზაცია NTP.
გაგზავნეთ 'occurred _ at' და ჩაწერეთ 'delivered _ at', რათა ლაგი ჩაითვალოს.
გრძელი ხარვეზებით, ქსელი/endpoint, დაგროვება რიგში, შეზღუდეთ ზრდა (backpressure + კვოტები).

12) რეკომენდებული ლიმიტები და ჰიგიენა

RPS გამოწერისთვის (მაგალითად, 50 RPS, burst 100) + პარალელიზმი (მაგალითად, 10).
მაქს. სხეული: 64-256 KB; უფრო მეტისთვის - „განცხადება + URL“ და ხელმოწერა გადმოტვირთვაზე.
Snake მოვლენების სახელები. case 'ან' dot. type` (`order. created`).
მიმღების write ოპერაციების მკაცრი idempotence.

13) მაგალითები: გამგზავნი და მიმღები

13. 1 გამგზავნი (ფსევდო კოდი)

python def send_event(event, attempt=0):
body = json. dumps(event)
sig = hmac_sha256_base64(body, secret)
headers = {
"X-Webhook-Id": event["id"],
"X-Webhook-Seq": str(event["sequence"]),
"X-Retry": str(attempt),
"X-Signature": f"sha256={sig}",
"Content-Type": "application/json"
}
res = http. post(endpoint, body, headers, timeout=10)
if 200 <= res. status < 300:
mark_delivered(event["id"])
elif res. status == 410:
deactivate_subscription()
else:
schedule_retry(event, attempt+1) # backoff + jitter, respect 429 Retry-After

13. 2 მიმღები (ფსევდო კოდი)

python
@app. post("/webhooks")
def handle():
body  = request. data headers = request. headers assert verify_hmac(body, headers["X-Signature"], secret)
evt_id = headers["X-Webhook-Id"]
if dedup_store. exists(evt_id):
return, "" 204 enqueue_for_processing (body) # fast path. dedup_store put(evt_id, ttl=723600)
return, "" 202 # or 204

14) ტესტირება და ქაოსის პრაქტიკა

უარყოფითი შემთხვევები: შეუქცევადი ხელმოწერა, 429/5xx, ტაიმუთი, 410, დიდი პაილოდი.
ქცევითი: out-of-order, დუბლიკატები, შეფერხებები 1-10 წუთი, უფსკრული 24 საათის განმავლობაში.
დატვირთვა: burst 10 ×; შეამოწმეთ backpressure და DLQ სტაბილურობა.
კონტრაქტები: JSON Schema, სავალდებულო სათაურები, სტაბილური ტიპის მოვლენები.

15) განხორციელების სია

  • 2xx = ACK და სწრაფი დაბრუნება enqueu- ს შემდეგ
  • ექსპონენციალური backoff + jitter, პატივისცემა 'Retry-After'
  • მიმღებისა და დედობის Idempotence 'X-Webhook-Id' (TTL retrai)
  • HMAC ხელმოწერები, საიდუმლოებების როტაცია, optional mTLS
  • DLQ + Replay API, მონიტორინგი და ალერტები
  • შეზღუდვები: ტაიმაუტები, RPS, სხეულის ზომა
  • შეკვეთა: წვეულება კეი ან 'sequence' + „parking lot“
  • დოკუმენტაცია: სქემები, მაგალითები, შეცდომების კოდირება, ვერსიები
  • ქაოსის ტესტები: შეფერხებები, დუბლები, ქსელის უკმარისობა, გახანგრძლივება

16) მინი-FAQ

ყოველთვის უნდა ვუპასუხოთ 200-ს?
ნებისმიერი 2xx ითვლება წარმატებად. 202/204 ნორმალური პრაქტიკაა „რიგში მიღებული“.

შესაძლებელია გამეორების შეჩერება?
დიახ, პასუხი 410 ან/და გამგზავნის კონსოლის/API- ს საშუალებით (გამოწერის გამორთვა).

როგორ მოვიქცეთ დიდ პაილოადთან?
გაგზავნეთ „შეტყობინება + secure URL“, ხელი მოაწერეთ მოთხოვნას ჩამოტვირთვა და დააინსტალირეთ TTL.

როგორ უნდა უზრუნველყოს წესრიგი?
Partition by key + `sequence`; განსხვავების დროს - „პარკინგი ლოტი“ და რეპლიკაცია.

შედეგი

საიმედო ვებჰუკები არის მკაფიო ACK (2xx) სემანტიკა, გონივრული გამეორება backoff + jitter- დან, მკაცრი idempotence და დედაპლიკაცია, კომპეტენტური უსაფრთხოება (HMAC/mTLS), რიგები + DLQ + rE+ Raplapleacople და გამჭვირვალე დაკვირვება. დააფიქსირეთ კონტრაქტი, შეიყვანეთ ლიმიტები და მეტრიკა, რეგულარულად მოაწყეთ ქაოსი სცენარები - და თქვენი ინტეგრაცია შეჩერდება პირველივე წარუმატებლობის დროს.

Contact

დაგვიკავშირდით

დაგვიკავშირდით ნებისმიერი კითხვის ან მხარდაჭერისთვის.ჩვენ ყოველთვის მზად ვართ დაგეხმაროთ!

ინტეგრაციის დაწყება

Email — სავალდებულოა. Telegram ან WhatsApp — სურვილისამებრ.

თქვენი სახელი არასავალდებულო
Email არასავალდებულო
თემა არასავალდებულო
შეტყობინება არასავალდებულო
Telegram არასავალდებულო
@
თუ მიუთითებთ Telegram-ს — ვუპასუხებთ იქაც, დამატებით Email-ზე.
WhatsApp არასავალდებულო
ფორმატი: ქვეყნის კოდი და ნომერი (მაგალითად, +995XXXXXXXXX).

ღილაკზე დაჭერით თქვენ ეთანხმებით თქვენი მონაცემების დამუშავებას.