AiHummer
Oʻzbekcha
Kirish
v1.0.x
{ }Swagger

Koʻp ijarachilik va idempotentlik

v1.0.x · yangilandi 2026-06-26

AiHummer koʻp ijarachilik tamoyilida ishlaydi: bitta gateway koʻplab ish maydonlarini bitta maʼlumotlar bazasidan, ularning maʼlumotlarini bir-biridan ajratgan holda xizmat qila oladi. Buni xavfsiz qiladigan ikkita mexanizm bor — oʻqish/yozish izolyatsiyasi uchun Postgres Row-Level Security (RLS) va qayta urinishlar hamda turn tiklash haqiqiy yon taʼsirni hech qachon takrorlamasligi uchun idempotentlik qatlami.

Row-Level Security bilan ijarachi izolyatsiyasi

Izolyatsiya faqat ilova kodida emas, balki maʼlumotlar bazasi darajasida amalga oshiriladi. AiHummer soʻrovlarni RLS siyosatlari qoʻllangan cheklangan Postgres roli (aihummer_app) orqali bajaradi, shu sababli maʼlumotlar bazasining oʻzi faol ijarachiga tegishli boʻlmagan qatorlarni rad etadi.

RLS ixtiyoriy yoqiladi. Uni gateway-ga cheklangan rol uchun ikkinchi ulanish satrini berib faollashtirasiz:

# gateway.env
# Owner pool — runs migrations and privileged maintenance
AIHUMMER_DATABASE_URL=postgres://aihummer:***@localhost:5432/aihummer?sslmode=disable
# Restricted role — activates RLS for normal request traffic
AIHUMMER_DB_APP_URL=postgres://aihummer_app:***@localhost:5432/aihummer?sslmode=disable

[!NOTE] Host-native oʻrnatishlar uchun oʻrnatuvchi AIHUMMER_DB_APP_URL ni avtomatik sozlaydi, shu sababli standart joylashtirishda RLS sukut boʻyicha yoqilgan boʻladi. Agar bu oʻzgaruvchi mavjud boʻlmasa, gateway faqat owner pool ustida ishlaydi va RLS faol boʻlmaydi.

Har bir ijarachi boʻyicha qamrov

Cheklangan rol doirasida har bir soʻrov oʻz ijarachisiga qamrab olinadi: gateway ulanishda joriy ijarachi kontekstini oʻrnatadi, shunda RLS siyosatlari toʻgʻri ish maydoniga nisbatan hal qilinadi. WHERE tenant_id = … filtrlari hamma joyda qoʻlda yozilmaydi; siyosat buni markazlashtirilgan tarzda taʼminlaydi, yaʼni eʼtibordan chetda qolgan filtr boshqa ijarachining qatorlarini sizdirib yubora olmaydi.

Tizim / bypass rejimi

Ayrim ishlar qonuniy ravishda ijarachilararo boʻladi — butun instans boʻylab ishlaydigan fonda ishchilar, rejalashtiruvchilar va texnik xizmat vazifalari. Ular kerakli narsani koʻra olishlari uchun tizim / bypass rejimida ishlaydi. Bypass faqat ishonchli ichki ishchilar uchun ajratilgan, soʻrovga ishlov beradigan yoʻllar uchun emas.

[!WARNING] Migratsiyalar har doim owner pool ustida bajariladi, hech qachon cheklangan rol ostida emas. Owner ulanishi sxemani oʻzgartirish va RLS siyosatlarini qoʻllash imtiyozlariga ega; cheklangan rolda esa bu ataylab yoʻq. Ikkala ulanish satrini alohida saqlang va aihummer_app roliga faqat unga kerakli imkoniyatni bering.

Idempotent yon taʼsirlar

Turn haqiqiy yon taʼsirlarni keltirib chiqarishi mumkin: pochta yuborish, kanalga xabarni qaytarib yuborish. Agar turn qayta urinilsa — vaqtinchalik xatolik tufayli yoki gateway turn oʻrtasida qayta ishga tushib, tiklash uni qayta ijro etgani uchun — bu yon taʼsirlar ikki marta sodir boʻlishi mumkin emas. AiHummer buni bir-biri bilan hamkorlikdagi ikki qism orqali kafolatlaydi.

Qayta tiklashda barqaror leddjer kaliti

Har bir yon taʼsir qayta tiklashda barqaror leddjer kaliti boʻyicha qayd etiladi: bu kalit turndan deterministik tarzda hosil qilinadi, shu sababli xuddi shu turnning qayta ijrosi yangi kalit emas, balki oʻsha kalitni hisoblaydi. Leddjer qaysi kalitlar allaqachon bajarilganini eslab qoladi.

Yon taʼsir toʻsigʻi

Pochta yoki kanalga yuborish kabi taʼsir bajarilishidan oldin, u leddjerni tekshiradigan yon taʼsir toʻsigʻi orqali oʻtadi. Agar bu kalit allaqachon ishlagan boʻlsa, toʻsiq jarayonni qisqartiradi va taʼsir oʻtkazib yuboriladi; aks holda taʼsir bajariladi va kalit qayd etiladi.

side-effect requested
   └─▶ compute resume-stable ledger key
         └─▶ barrier: key already committed?
               ├─ yes ─▶ skip (no double-send)
               └─ no  ─▶ perform effect ─▶ commit key

Natija — ichki yetkazib berish kamida bir marta boʻlsa-da, tashqi xatti-harakat aniq bir marta boʻladi. Qayta urinishlar tuzilishi boʻyicha xavfsiz, va aynan shu narsa turn tiklash (Yetkazib berish, outbox va tiklash ga qarang) uzilgan turnni mijoz xuddi shu elektron pochta yoki xuddi shu javobni ikki marta olmasdan qayta ijro etishiga imkon beradi.

[!TIP] Aynan shu sababli AiHammer kafolatlangan yetkazib berish va avtomatik turn tiklashni odatdagi takroriy xabarlar xavfisiz taqdim eta oladi — idempotentlik yetkazib berish kafolatlari quriladigan poydevordir.

Keyingi qadam qayerda