Eltip bermek, outbox we dikeldiş
Turn tamamlananda, jogap entek geljek kanalyna ýetmeli — ygtybarly we dogry bir gezek. AiHummer muny tranzaksion outbox, idempotent gapdal täsirler we gaýtadan başlanyndan soň turn dikeldişi bilen çözýär. Has uly gurnamalar üçin islege görä NATS şinasy eltip bermegi göterip biler.
Kepillendirilen eltip bermek
Jogap turnyň ahyrynda göni iberilmeýär. Onuň ýerine ol ony öndüren işiň bir bölegi hökmünde outboxda nobata goýulýar, soňra eltip beriş işçisi ony alýar we geljek kanalyna iberýär. Jogap çykmazdan ozal durnukly ýazgy edilýändigi üçin, “jogap öndürildi” we “jogap iberildi” aralygyndaky döwülme ony ýitirip bilmeýär — gaýtadan başlanda outbox ýazgysy henizem bardyr we eltip bermek dowam edýär.
turn produces reply
└─▶ enqueue in outbox (durable)
└─▶ delivery worker ─▶ originating channel
└─ acknowledged ─▶ marked delivered
Eltip bermek idempotentlik bilen jübütlenip, bu iň azyndan bir gezek işçisi dogry bir gezek daşky özüni alyp baryşy berýär: dikeldişe durnukly defter açary we gapdal täsir päsgelçiligi gaýtadan iberilen ýa-da gaýtadan oýnalan jogabyň kanala diňe bir gezek iberilmegini üpjün edýär (serediň Köp kärendeçilik we idempotentlik).
[!NOTE] Bu ýerde “dogry bir gezek” daşky görünýän netijäni suratlandyrýar: ulanyjy jogaby bir gezek alýar. Içerki taýdan işçi eltip bermegi birnäçe gezek synanyşyp biler; idempotentlik gatlagy bu synanyşyklary ýeke görünýän iberme çenli ýygnaýar.
Gaýtadan başlanyndan soň turn dikeldişi
Eger gateway turnyň ortasynda gaýtadan başlasa — deploý, döwülme, host gaýtadan ýüklemesi — iş taşlanmaýar. Turn dikeldişi bölünen turny gaýtadan oýnap, ony tamamlamaga mümkinçilik berýär. Bu diňe gapdal täsirler idempotent bolany üçin howpsuzdyr: gaýtadan başlamazdan ozal eýýäm bolan islendik poçta ýa-da kanal-iberme öz defter açary boýunça tanalýar we ötürilýär, ýüze çykmadyk bölekler bolsa tamamlanýança işleýär. Ulanyjy ýarym tamamlanan ýa-da gaýtalanan jogabyň ýerine ýeke, doly jogaby görýär.
Islege görä NATS şinasy
Adaty ýagdaýda eltip bermek doly PostgreSQL arkaly işleýär, bu bolsa minimal gurnamany bir gateway hem-de maglumat bazasy bilen saklaýar. Has uly ýa-da köp gateway gurnamalary üçin onuň URL-ny sazlap, eltip bermegi NATS şinasynda goýup bilersiňiz:
# gateway.env
AIHUMMER_NATS_URL=nats://127.0.0.1:4222
Şina hakykatdan-da islege görä — AIHUMMER_NATS_URL sazlanmadyk goýuň we outbox
onsuz işleýär. Bar bolanda, NATS eltip beriş işiniň akýan transporty bolýar, bu
bolsa proksiniň aňyrsynda gorizontal taýdan ölçeglendirilen gatewaýlara laýyk
gelýär.
[!TIP] Nol-prostoý täzelemeler proksiniň aňyrsynda iki ýa-da has köp gateway işledýär. Meýilleşdiriji Postgres geňeşçi gulpy arkaly ýeke-lider bolup galýar, idempotent eltip bermek bolsa goşmaça gatewaýlaryň ýüki hiç zady iki gezek ibermän paýlaşyp bilmegini aňladýar.
Üns bermeli zatlar
Eltip bermek ygtybarlylyk meseleleriniň ilkinji bolup ýüze çykýan ýeridir, şonuň
üçin ony gözegçilikde saklamalydyr. AiHummer telemetrini OTLP
(AIHUMMER_OTEL_ENDPOINT) arkaly iberýär we Grafana panellerini üpjün edýär;
gyrylyp alynýan Prometheus /metrics ahyrlygy ýokdur.
- Eltip bermek netijeleri — her eltip bermek synanyşygynyň netijesi. Şowsuzlyklaryň artýan derejesi kanal ýa-da aşaky problema görkezýär.
- Outbox çuňlugy — näçe jogap eltip berilmek üçin garaşýar. Durnukly ösüş eltip bermegiň yzda galýandygyny aňladýar.
- DLQ çuňlugy — gaýtalama synanyşyklaryny gutaryp, ölü-hat nobatyna düşen ýazgylar. Islendik DLQ ösüşi derňewe mätäçdir.
[!WARNING] Bularyň hemmesini turn gijä galmasy we ýalňyşlyk derejesi bilen birlikde gözegçilikde saklaň. Ösýän outbox ýa-da DLQ, hatda turnlaryň özleri henizem üstünlikli bolanda-da, aşaky kanallaryň ýaramazlaşandygynyň irki duýduryşydyr.
Indiki ädim
- Eltip bermegi dogry-bir-gezek edýän idempotentlik: Köp kärendeçilik we idempotentlik.
- Ilki bilen jogaby öndürýän hereketlendiriji: Gateway we turn hereketlendirijisi.