AiHummer
Кыргызча
КирүүЖеке кабинет
v1.1.x
{ }Swagger

Көп колдонуучулук & идемпотенттик

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

AiHummer болуп саналат көпүйүлүүчү: бир шлюз бир база маалыматынан көптүгү жумушчу мейкиндиктерди тейлөөгө мүмкүн, бирок алардын маалыматтарын бөлөк кармайт. Бул коопсуз кылган эки механизм бар — Postgres Катардык Деңгээлдеги Коопсуздук (RLS) окуу/жазуу изоляциясы үчүн, жана бир идемпотенттүүлүк катмары кайра аракеттер жана айлануу калыбына келтирүү реалдуу дүйнөдөгү кошумча таасирди эч качан кайталабасын үчүн.

Катмар: Өз катарындагы коопсуздукту көпжабдык изоляциясы төлөлүү аркылуу чектелет Ишкана сап — акысыз/Коомдук платформанын бөлүгү эмес; идемпотенттик катмар негиздин бөлүгү болуп саналат.

Катардын деңгээлиндеги коопсуздук менен ижарачыны бөлүү

Изоляция маалымат базасында милдеттүү түрдө колдонулат, болгону колдонмо кодунда эмес. AiHummer суроо-талаптарды аркылуу жүргүзөт чектелген Postgres ролу (aihummer_app) RLS саясаттары колдонулган, ошондуктан маалымат базасы өзүнө тиешелүү эмес каттарды кабыл албайт.

RLS - бул кошулуу. Сиз аны чектелген роль үчүн шлюзга экинчи туташуу сапын берип иштетесиз:

# 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] Жергиликтүү жеринде орнотуулар үчүн орнотуучу коюйт AIHUMMER_DB_APP_URL автоматтык түрдө, андыктан стандарттык жайгаштырууда RLS демейки боюнча иштетилет. Эгер өзгөрмө жок, шлюз болгону ээсинин пулунда иштейт жана RLS жок активдүү.

Ар бир ижарачы үчүн чектөө

Чектелген ролдо ар бир суроо өзүнүн ижарачыны эске алуу менен жүргүзүлөт: шлюз байланышка учурдагы ижарачынын контекстин орнотуп, RLS саясаты туура жумуш мейкиндигине ылайык чечилет. WHERE tenant_id = … фильтрлер баарында кол менен жасалбайт; саясат аны борборлоштурулган түрдө жүзөгө ашырат, бул деген башка ижарачылардын каттарын өткөрүп жибербегендиги маанисин берет.

Система / Бийик өтүү режим

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

[!WARNING] Миграциялар ар дайым ээлик бассейнинде иштейт, чектелген ролдо эч качан жок. Ээ байланыш схеманы өзгөртүүгө жана RLS колдонууга укуктарына ээ саясаттар; чектелген роль ойлонуп жасалган жок. Эки байланышты сактаңыз жибектери айырмаланып, жана уруксат берет aihummer_app ролду болгону керектүү нерселер үчүн гана.

Идемпотенттук жанама таасирлер

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

Резюме-туктаган эсепке алуу ачкычы

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

Жанама таасир тоскоолугу

Мындай таасирден мурда кат же каналга-жөнөтүү аткарылганда, ал аркылуу өтөт жанч ийкем таасир тоскоолугу бул журналды текшерет. Эгер бул ачкыч мурунтан атылган болсо, тоскоолдук кыскартуу болуп, эффект өткөрүлүп кетет; эгер эмес болсо, эффект иштейт жана ачкыч кошулат.

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

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

[!TIP] Мунун натыйжасында AiHummer кепилденген жеткирүүнү жана автоматтык бурулушту калыбына келтирүүнү сунуштай алат кайталанма билдирүүлөрдүн адаттагы тобокелчилиги жок — идемпотенттүүлүк негиз болуп саналат жеткирүүнүн кепилдиктери негизделген.

Келерки кайда