AiHummer
Кыргызча
Кирүү
v1.0.x
{ }Swagger

Жеткирүү, аутбокс жана калыбына келтирүү

v1.0.x · жаңыланды 2026-06-26

Кезек аяктаганда, жооп дагы эле ал келген каналга — ишенимдүү жана так бир жолу — жетиши керек. AiHummer муну транзакциялык аутбокс, идемпотенттик капталдык эффекттер жана кайра иштетүүдөн кийинки кезекти калыбына келтирүү менен иштейт. Чоңураак жайылтуулар үчүн кошумча NATS шинасы жеткирүүнү алып жүрө алат.

Кепилденген жеткирүү

Жооп кезектин аягында түз жөнөтүлбөйт. Анын ордуна ал аны өндүргөн ошол эле жумуштун бөлүгү катары аутбокско кезекке коюлат, жана жеткирүү жумушчусу аны алып, баштапкы каналга жөнөтөт. Жооп чыгып кетер алдында туруктуу жазылгандыктан, “жооп өндүрүлдү” жана “жооп жөнөтүлдү” ортосундагы кырсык аны жогото албайт — кайра иштетүүдө аутбокс жазуусу дагы эле ошол жерде болот жана жеткирүү уланат.

turn produces reply
   └─▶ enqueue in outbox (durable)
         └─▶ delivery worker ─▶ originating channel
               └─ acknowledged ─▶ marked delivered

Жеткирүү идемпотенттик менен жупташтырылган, ошондуктан бул кеминде-бир-жолу жумушчу так-бир-жолу тышкы жүрүм-турумду берет: калыбына-туруктуу журнал ачкычы жана капталдык эффект тоскоолу кайра жеткирилген же кайра ойнотулган жоопту каналга бир гана жолу жөнөтөт (Көп арендаторлук жана идемпотенттик караңыз).

[!NOTE] “Так-бир-жолу” бул жерде сырттан көрүнгөн натыйжаны сүрөттөйт: колдонуучу жоопту бир жолу алат. Ичинде жумушчу жеткирүүнү бирден ашык жолу аракет кылышы мүмкүн; идемпотенттик катмар ал аракеттерди бир көрүнгөн жөнөтүүгө бириктирет.

Кайра иштетүүдөн кийин кезекти калыбына келтирүү

Эгер шлюз кезектин ортосунда кайра иштесе — жайылтуу, кырсык, хосттун кайра жүктөлүшү — жумуш таштап коюлбайт. Кезекти калыбына келтирүү үзгүлтүккө учураган кезекти аяктай алышы үчүн кайра ойнотот. Бул капталдык эффекттер идемпотенттик болгондуктан гана коопсуз: кайра иштетүүгө чейин болуп өткөн каалаган почта же канал-жөнөтүү анын журнал ачкычы боюнча таанылып, өткөрүлүп жиберилет, ал эми болбой калган бөлүктөр аякталганга чейин иштейт. Колдонуучу жарым-жартылай аткарылган же кайталанган эмес, бирдиктүү, толук жоопту көрөт.

Кошумча NATS шинасы

Демейки боюнча жеткирүү толугу менен PostgreSQL аркылуу иштейт, бул минималдуу жайылтууну бир шлюз плюс маалымат базасына кармайт. Чоңураак же көп-шлюздуу орнотуулар үчүн сиз анын URLин конфигурациялоо менен жеткирүүнү NATS шинасына коё аласыз:

# gateway.env
AIHUMMER_NATS_URL=nats://127.0.0.1:4222

Шина чындап эле кошумча — AIHUMMER_NATS_URLди коюлбаган бойдон калтырыңыз, аутбокс ансыз иштейт. Болгондо, NATS жеткирүү жумушу аккан транспорт болуп калат, бул прокси артындагы горизонталдуу масштабдалган шлюздарга туура келет.

[!TIP] Токтоосуз жаңыртуулар тескери прокси артында эки же андан көп шлюзду иштетет. Планировщик Postgres advisory кулпусу аркылуу бир-лидерлик бойдон калат, жана идемпотенттик жеткирүү кошумча шлюздарга эч нерсени эки жолу жөнөтпөстөн жүктү бөлүшүүгө мүмкүндүк берет.

Эмнени көзөмөлдөө керек

Жеткирүү — ишенимдүүлүк көйгөйлөрү биринчи көрүнгөн жер, ошондуктан аны көзөмөлдөө керек. AiHummer телеметрияны OTLP (AIHUMMER_OTEL_ENDPOINT) аркылуу түртөт жана Grafana таблолорун жөнөтөт; кырып алуу үчүн Prometheus /metrics эндпоинти жок.

  • Жеткирүү дисперсиялары — ар бир жеткирүү аракетинин натыйжасы. Көтөрүлгөн каталардын деңгээли канал же ылдыйкы агымдын көйгөйүн көрсөтөт.
  • Аутбокс тереңдиги — жеткирилишин канча жооп күтүп жатат. Туруктуу өсүш жеткирүү артта калып жатканын билдирет.
  • DLQ тереңдиги — кайталоолорун түгөтүп, өлүк-кат кезегине түшкөн жазуулар. DLQдин каалаган өсүшү иликтөөгө татыктуу.

[!WARNING] Буларды кезек кечигүүсү жана ката деңгээли менен бирге көзөмөлдөңүз. Өсүп жаткан аутбокс же DLQ — кезектердин өздөрү дагы эле ийгиликтүү болсо да, ылдыйкы каналдардын начарлаганынын эрте эскертүүсү.

Андан ары кайда