GH GambleHub

საგები და განაწილებული გარიგებები

საგა არის გრძელვადიანი ბიზნეს გარიგება, რომელიც იყოფა ადგილობრივი ნაბიჯების თანმიმდევრობით სხვადასხვა სერვისებში/შენახვის ობიექტებში. თითოეულ ნაბიჯს აქვს კომპენსაციური ეფექტი, რომელიც გადადის ნაბიჯის ეფექტს ნაწილობრივი მარცხით. 2PC/3PC- სგან განსხვავებით, საგები არ ინარჩუნებენ გლობალურ ბლოკირებას და შესაფერისია მიკრო სერვისებისთვის, მულტფილმების რეგიონებისა და მაღალი დატვირთვებისთვის, სადაც დასაშვებია საღამოს კონსულტაცია.


1) როდის უნდა აირჩიოთ საგა (და როდის - არა)

შესაფერისია:
  • გახანგრძლივებული/მრავალსაფეხურიანი ბიზნეს პროცესები (შეკვეთა - გადახდა - რეზერვი, მიწოდება).
  • სხვადასხვა დომენები და საცავები, სადაც არ არის საერთო გარიგება.
  • საჭიროა მაღალი წვდომა და ჰორიზონტალური სკალირება.
არ არის შესაფერისი:
  • მყარი ACID ატომური მოქმედება კრიტიკულია (მაგალითად, დიდი თანხების გადაცემა ერთ რეესტრში).
  • არ არსებობს მკაფიო კომპენსაცია (შეუძლებელია „ერთხელ დაცვა“ ან ეფექტის გაუქმება).
  • იურიდიული/მარეგულირებელი შეზღუდვები მოითხოვს მკაცრ იზოლაციას და „მყისიერ“ ინვარიანტს.

2) საგნების მოდელები

1. ორკესტრი (Saga Orchestrator): ცენტრალური კოორდინატორი აკონტროლებს ნაბიჯებსა და კომპენსაციას.

დადებითი: აშკარა ნაკადი, შეცდომების კონტროლი, გამარტივებული ტელემეტრია.
უარყოფითი მხარეები: ცენტრალიზაციის წერტილი, „სქელი“ კოორდინატორის რისკი.

2. ქორეოგრაფია: არ არსებობს ცენტრი - ნაბიჯები წამოიწყეს მოვლენებმა („მომსახურება A გაკეთდა X - სერვისი B რეაგირებს“).

დადებითი: სუსტი კავშირი, მარტივი სკალირება.
უარყოფითი მხარეები: უფრო რთულია ნაკადის მონიტორინგი/გაშვება, წესების „ზრდის“ რისკი.

3. TCC (Try-Confirm/Cancel): თითოეული ნაბიჯი არის „სარეზერვო“ (Try), შემდეგ დადასტურება (Confirm) ან გაუქმება (Cancel).

დადებითი: ფსევდო-ორფაზიანი პროტოკოლის უფრო ახლოს, კონტროლირებადი რესურსები.
უარყოფითი მხარეები: უფრო ძვირია ინტერფეისების განხორციელება; მოითხოვს Try- ს მფლობელთა ტაიმაუტს.


3) ნაბიჯის დიზაინი და კომპენსაცია

ინვარიანტები: მკაფიოდ ჩამოაყალიბეთ რა უნდა იყოს ჭეშმარიტი ნაბიჯის „წინ/მის შემდეგ“ (მაგალითად, „დარჩენილი 0“).
ანაზღაურება - საპირისპირო გარიგება: ეს არის ლოგიკური მოქმედება, რომელიც გააუქმებს ბიზნეს ეფექტს (refund, release, restore).
Idempotence: როგორც ნაბიჯი, ისე კომპენსატორი უსაფრთხოდ უნდა განმეორდეს ('operation _ id' მიხედვით).
ტაიმაუტები: თითოეულ ნაბიჯს აქვს deadline; შეფერხება ანაზღაურებას იწყებს.
შეუქცევადი ეფექტები: ჩაწერეთ ისინი ცალკე (შეტყობინებები, ელ.ფოსტა) და დაუშვათ „საუკეთესო ეფორტი“.


4) თანმიმდევრულობა და წესრიგი

Eventual Consistence: მომხმარებლებს შეუძლიათ ნახონ დროის შეუსაბამობები; UX - „მოლოდინით „/სპინერით/სტატუსით.
საკვანძო ბრძანება: გადართვის ნაბიჯები ჯგუფდება ბიზნეს გასაღებით (რიგის _ id) მოვლენების გამარტივების მიზნით.
დედუპლიკაცია: შეინახეთ დამუშავების ჟურნალი ('operation _ id') TTL- ით.


5) ტრანსპორტი და საიმედოობა

Outbox pattern: ღონისძიების ჩაწერა ადგილობრივ Outbox ცხრილში იმავე გარიგების შიგნით, შემდეგ კი ასინქრონული გამოცემა საბურავში.
Inbox/Idempotence store: მომხმარებლის მხარეს არის უკვე დამუშავებული შეტყობინებების ჟურნალი.
Exactly-once ეფექტურია: „Outbox + idempotent consumer“ პრაქტიკულ „ზუსტად ერთხელ“ იძლევა.
DLQ: „შხამიანი“ შეტყობინებებისთვის მდიდარი მეტა-ინფორმაციის და უსაფრთხო რელიეფის საშუალებით.


6) შეცდომების პოლიტიკა, retrai, backoff

ვიმეორებთ მხოლოდ იდემპოტენტურ ნაბიჯებს; ჩაწერის ოპერაციები - 'Idempotency-Key'.
ექსპონენტური backoff + ჯიტერი; საგას მცდელობების შეზღუდვა და მთლიანი ვადა.
სისტემური დეგრადაციის დროს - Circuit Breaker და graceful degradation (მაგალითად, გააუქმეთ საგის მეორეხარისხოვანი ფიკი).
ბიზნეს კონფლიქტები ('409') - განმეორება კოორდინაციის ან ანაზღაურებისა და დასრულების შემდეგ.


7) ორკესტრი: მოვალეობები და სტრუქტურა

ფუნქციები:
  • საგნების მდგომარეობის თვალყურის დევნება: 'PENDING-RUNNING-COMPENSATING-DONE/FAILED'.
  • ნაბიჯების დაგეგმვა, ვადები, ტაიმაუტები, რეკრუტირება.
  • მოვლენების როტინგი და კომპენსაციის გაშვება.
  • კოორდინატორის ოპერაციების idempotence (გუნდური ჟურნალი).
  • დაკვირვება: კორელაცია 'saga _ id' ლოგოებში/ტრეისებში/მეტრიკებში.
შენახვა:
  • ცხრილები 'saga', 'saga _ step', 'commands', 'outbox'.
  • ინდექსები 'saga _ id', 'business _ key', 'status', 'next _ run _ at'.

8) ქორეოგრაფია: წესები და დაცვა „თოვლის კომისგან“

ღონისძიების კონტრაქტები: სქემები და ვერსიები (Avro/Proto/JSON Schema).
მკაფიო სემანტიკა: „ფაქტის მოვლენა“ vs „გუნდი“.
ჯაჭვის ნაშთები: მომსახურება, რომელმაც აღმოაჩინა შეუსაბამობა, აქვეყნებს 'Failed '/' Compensate' მოვლენას.
სიგნალიზაცია და ალერტები „გაუთავებელ მარყუჟებზე“.


9) TCC: პრაქტიკული დეტალები

Try: რესურსის რეზერვი TTL- ით.
Confirm: ფიქსაცია, დროებითი ბლოკირების განთავისუფლება.
კანკელი: სარეზერვო დაბრუნება (გვერდითი მოვლენების გარეშე).
გარბენის კოლექცია: Try ავტომატური გაუქმება TTL- ის შემდეგ (idempotent Cancel).
Idempotent Confirm/Cancel: განმეორება უსაფრთხოა.


10) მაგალითი (სიტყვიერი სქემა) - „შეკვეთა გადახდისა და მიწოდებით“

1. CreateOrder (ადგილობრივად) outbox: 'OrderCreated'.
2. Payrasistvo: რეზერვი 'Try' (TCC); წარმატების მიღწევისას, „Paystress Reserved“, „Paysed Failed“ - ზე უარის თქმის დროს.
3. InventeranService: საქონლის რეზერვი; InventoryFailed- ის ნაკლებობით.
4. ShippingService: მიწოდების სლოტის შექმნა (გაუქმებული).
5. თუ ნებისმიერი ნაბიჯი 'Failed' - ორკესტრი იწყებს კომპენსაციას საპირისპირო თანმიმდევრობით: 'CancelShipping' - 'ReleasInventory' "Paysed Cancel '.
6. თუ ყველა არის „PayseConfirm“ 'OrderConfirmed'.


11) ორკესტრის ფსევდო კოდი

pseudo startSaga(saga_id, order_id):
steps = [ReservePayment, ReserveInventory, BookShipment, ConfirmPayment]
for step in steps:
res = execWithRetry(step, order_id)
if!res.ok:
compensateInReverse(steps_done(order_id))
return FAIL return OK

execWithRetry(step, key):
for attempt in 1..MAX:
try:
return step.run(key)    # идемпотентно catch RetryableError:
sleep(backoff(attempt))
catch NonRetryableError:
return FAIL return FAIL

compensateInReverse(done_steps):
for step in reverse(done_steps):
step.compensate()       # идемпотентно

12) დაკვირვება და ოპერაციული SLO

ტრეისი: ერთი 'saga _ id', 'step', 'attempt', 'decision' (run/compensate/skip).

მეტრიკა:
  • წარმატება/საგნების შეცდომა (%), საშუალო ხანგრძლივობა, p95/p99.
  • კომპენსირებული საგნების წილი, კომპენსაციის ყველაზე მაღალი მიზეზები.
  • რიგები/გარე ლაგი, retrais ნაბიჯებზე.
  • ლოგიკური/აუდიტი: ორკესტრის გადაწყვეტილებები, რესურსების იდენტიფიკატორები, ბიზნეს გასაღებები.

13) ტესტირება და ქაოსი

შეცდომების ინექცია ყოველ ნაბიჯზე: ტაიმაუტები, '5xx', ბიზნეს კონფლიქტები.
Out-of-order მოვლენები, დუბლიკატები, გამოტოვება (drop).
ლატენტობის გრძელი კუდები - ვადების შემოწმება და კომპენსაცია.
მასობრივი საგნები - WFQ/DRR და caps შემოწმება რიგებში, „head-of-line ბლოკირების“ არარსებობა.
რედრივი DLQ- დან ნაბიჯებზე და მთელ საგაზე.


14) მულტფილმი-ტენანტობა, რეგიონები, შესაბამისობა

ჭდეები 'tenant _ id/plan/region' ღონისძიებებში და საგნების შენახვაში.
Residence: მონაცემები/მოვლენები არ ტოვებს რეგიონს; ჯვარედინი რეგიონალური საგები შეიმუშავეთ, როგორც ადგილობრივი საგნების + საერთო ღონისძიებების ფედერაციები.
პრიორიტეტიზაცია: VIP საგებს აქვთ უფრო მეტი კვოტის წონა; ვორკერების იზოლაცია per tenant.


15) ჩეკის სია გაყიდვამდე

  • თითოეულ ნაბიჯს აქვს მკაფიო კომპენსატორი, ორივე არის იდემპოტენტი.
  • შეირჩა შაბლონი: ორკესტრი/ქორეოგრაფია/TSS; აღწერილია პასუხისმგებლობის საზღვრები.
  • შემოიღეს Outbox/Inbox, deuplication 'id'.
  • Retray პოლიტიკოსები: backoff ერთად jitter, მცდელობების შეზღუდვები და საგნების საერთო ვადა.
  • ღონისძიების კონტრაქტები განახლებულია, არსებობს სქემის შესაბამისობა.
  • DLQ და უსაფრთხო რადარი მორგებულია.
  • ტელემეტრია: მეტრიკა, ტრეისი, კორელაცია 'saga _ id'.
  • ოპერაციული playbooks: სახელმძღვანელო cancel/force-confirm, „ჩამოკიდებული“ საგნების დაშლა.
  • ქაოსისა და დატვირთვის ტესტები გადის, SLO/შეცდომების ბიუჯეტი განისაზღვრება.

16) ტიპიური შეცდომები

არ არსებობს კომპენსატორი ან ის არის „უწმინდური“ (აქვს გვერდითი მოვლენები).
არ არსებობს idempotence/dedup - დუბლები და სახელმწიფოების „საქანელები“.
„საგა საგაში“ აშკარა საზღვრების გარეშე - ციკლები და ურთიერთგამომრიცხავი ბლოკები.
არ არსებობს ვადები - „მარადიული“ საგნები და რესურსების გაჟონვა.
ორკესტრი ინახავს მდგომარეობას „მეხსიერებაში“ მდგრადი ნაკადის გარეშე.
ქორეოგრაფია ტელემეტრიული ცენტრის გარეშე არის „უხილავი“ წარუმატებლობები.
გაუმჭვირვალე UX: მომხმარებლები ვერ ხედავენ შუალედურ სტატუსებს.


17) სწრაფი რეცეპტები

კლასიკური SaaS: ორკესტრი + outbox/inbox, ექსპონენციალური backoff, DLQ, საგა სტატუსები UI- ში.
ძლიერი რესურსის ინვარიანტები: TCC TTL რეზერვით და GC Cancel.
მაღალი მოცულობა/დატვირთვა: მოვლენების ქორეოგრაფია + მკაცრი იდემპოტენტობა და მეტრიკა გასაღებით.
მულტფილმის რეგიონი: ადგილობრივი საგები + საბოლოო დანაყოფები; თავიდან აიცილოთ გლობალური დაბლოკვა.


დასკვნა

საგა არის გზა, რომ მიიღოთ პროგნოზირებადი კოორდინაცია განაწილებულ სისტემებში გლობალური ბლოკირების გარეშე. მკაფიო კომპენსატორები, idempotence, საიმედო მიწოდება (outbox/inbox), ტაიმუთისა და რეპრესიების დისციპლინა, პლუს ტელემეტრია და ფლეიბუკი - გასაღები, რომ რთული ბიზნეს პროცესები დარჩეს სტაბილური და წაკითხული დატვირთვის გაზრდის დროს, მომსახურების რაოდენობა და გეოგრაფია.

Contact

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

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

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

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

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

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