Ko‘p foydalanuvchilik va identempotentlik
AiHummer bu ko‘p ijarachilibitta shlyuz bitta ma’lumotlar bazasidan ko‘p ish joylariga xizmat ko‘rsatishi mumkin va ularning ma’lumotlarini alohida saqlaydi. Buni xavfsiz qiladigan ikki mexanizm mavjud — Postgres Qator Darajali Xavfsizlik (RLS) o‘qish/yozish izolyatsiyasi uchun, va bir idempotentlik qatlami shunday qilib, qayta urinib ko‘rish va navbatni tiklash hech qachon haqiqiy dunyo yon ta’sirini takrorlamasin.
Daraja: Satrlarga asoslangan xavfsizlik ko‘p foydalanuvchili izolyatsiyaga to‘lov orqali kirish imkonini beradi Tadbirkorlik daraja — bepul/Community platformaning bir qismi emas; idempotentlik qatlami asosning bir qismidir.
Row darajali xavfsizlik bilan ijarachilarni izolyatsiya qilish
Izolyatsiya faqat ilova kodida emas, balki ma’lumotlar bazasida ham majburan amalga oshiriladi. AiHummer so‘rovlarni orqali bajaradi cheklangan Postgres roli (aihummer_app) bu yerda RLS siyosatlari qo‘llanilgan, shuning uchun ma’lumotlar bazasi faqat faol ijarachiga tegishli bo‘lmagan qatorlarni rad etadi.
RLS bu rozilik berish. Siz uni cheklangan rol uchun darvozaga ikkinchi ulanish satrini berish orqali 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] Mehmon-odatdagi o‘rnatishlar uchun o‘rnatuvchi quyidagilarni belgilaydi
AIHUMMER_DB_APP_URLavtomatik ravishda, shuning uchun RLS standart joylashtirishda sukut bo’yicha yoqilgan. Agar o‘zgaruvchi yo‘q, shlyuz faqat egasining havzasida ishlaydi va RLS yo‘q faol.
Har-ijarachi uchun cheklash
Cheklangan rol doirasida har bir so‘rov o‘z ijarachisiga mos keladi: gateway ulanishda joriy ijarachi kontekstini belgilaydi, shunda RLS siyosatlari to‘g‘ri ishchi maydonga qarab hal qilinadi. WHERE tenant_id = … filtrlar har joyda qo’lda ishlanmaydi; siyosat uni markazlashtirilgan tarzda amalga oshiradi, bu esa o’tkazib yuborilgan filtr boshqa ijarachining qatorlarini oqizib yubora olmasligini anglatadi.
Tizim / aylanib o’tish rejimi
Ba’zi ishlar qonuniy ravishda kross-tenant hisoblanadi — butun instansiya bo’ylab ishlaydigan fon ishchilari, jadvalchilar va texnik xizmat ishlarini o’z ichiga oladi. Bu ishlar bir joyda ishlaydi tizim / aylanib o’tish rejimi shunday qilib ular nima kerakligini ko‘ra oladilar. Bypas ishonchli ichki xodimlarga ajratilgan, so‘rovlarni qayta ishlash yo‘llari uchun emas.
[!WARNING] Ko‘chirishlar har doim egasi hovuzida ishlaydi, cheklangan rolda hech qachon. Egasining ulanishi sxemani o’zgartirish va RLSni qo’llash huquqlariga ega siyosatlar; cheklangan rol qasddan bunday qilmaydi. Ikkita ulanishni saqlang qat’iy alohida va berish
aihummer_appfaqat uning kerak bo‘lgan rolini.
Idempotent yon taʼsirlar
Bir burilish haqiqiy dunyo bo‘yicha yon ta’sirlarni keltirib chiqarishi mumkin: elektron pochta yuborish, kanalga xabar joylashtirish. Agar burilish qayta urinilsa — vaqtinchalik xato tufayli yoki eshik (gateway) burilish o‘rtasida qayta ishga tushganligi va tiklash uni takrorlamoqchi bo‘lsa — ushbu yon ta’sirlar majburiy emas ikki marta sodir bo’lishi. AiHummer buni ikki hamkorlik qiluvchi qismlar bilan kafolatlaydi.
Rezyume-barqaror daftar kaliti
Har bir yon ta’sirga qarshi qayd qilinadi resume-barqaror daftar kaliti: burilishdan deterministik tarzda olinadigan kalit, shuning uchun bir xil burilish qayta ishlanganida yangi kalit emas, shu kalit hisoblanadi. Ledger qaysi kalitlar allaqachon ishlatilganini eslab qoladi.
Yon ta’sir to’sig’i
Birqator ta’sir oldidan pochta yoki kanal-yuborish bajarilganda, u orqali o‘tadi yon ta’sir to’sig’i bu hisob daftarchasini tekshiradi. Agar bu kalit allaqachon ishga tushgan bo’lsa, to’siq qisqa tutashadi va natija o’tkazib yuboriladi; aks holda, natija ishlaydi va kalit yakunlanadi.
side-effect requested
└─▶ compute resume-stable ledger key
└─▶ barrier: key already committed?
├─ yes ─▶ skip (no double-send)
└─ no ─▶ perform effect ─▶ commit key
Natija shunday ichki tomondan etkazib berish kamida bir marta bo’lishiga qaramay, aniq bir marta tashqi xatti-harakat. Qayta urinishlar tuzilish jihatidan xavfsizdir, bu esa tiklanishni yo’naltirishga imkon beradi (qarang Ishonchli yetkazib berish va tiklash) mijozga bir xil elektron pochta yoki bir xil javobni ikki marta yubormasdan to’xtatilgan navbatni qayta yuboring.
[!TIP] Shu sababli AiHummer kafolatlangan yetkazib berishni va avtomatik burilish tiklanishini taklif qilishi mumkin odatdagi takroriy xabarlar xavfisiz — idempotentlik poydevor hisoblanadi yetkazib berish kafolatlari asosida qurilgan.
Keyingi qayerga
- Aylanani boshqaradigan ish vaqt muhiti: Shlyuz va burilish dvigateli.
- Javoblar aniq bir marta qanday qaytariladi: Ishonchli yetkazib berish va tiklash.