Олон хэрэглэгчийн орчин ба идемпотент байдал
АйХаммер нь олон түрээслэгчтэй: нэг гарц нь нэг өгөгдлийн сангаас олон ажлын орчинд үйлчлэх боломжтой ба тэдний өгөгдлийг салгалаа хадгална. Үүнийг аюулгүй болгох хоёр механизм байдаг — Postgres мөрийн түвшний аюулгүй байдал (RLS) унших/бичих тусгаарлалтын болон нэг идемпотент байдлын давхарга ингэсэн тохиолдолд дахин оролдлого болон эргэх сэргээлт бодит амьдралд гардаг гаж нөлөөг хэзээ ч давтахгүй байхаар.
Өргөл: Мөрийн түвшний аюулгүй байдлын олон түрээслэгчдийн тусгаарлалт нь төлбөртэйгээр хязгаарлагдана Энтэрпрайз тэнхлэг — үнэгүй/Нийгэмлэгийн платформд ордоггүй; идемпотент байдлын давхарга нь үндсэн хэсэгт ордог.
Мөрийн түвшний аюулгүй байдлаар түрээслэгчийг тусгаарлах
Тусгаарлалыг зөвхөн програмын кодод бус, өгөгдлийн сант дээр ч хэрэгжүүлдэг. AiHummer нь асуулгыг дамжуулдаг хязгаарлагдмал Postgres үүрэг (aihummer_app) RLS бодлогыг хэрэгжүүлсэн байгаа тул өгөгдлийн сан нь идэвхтэй түрээслэгчид хамаарахгүй мөрүүдийг татгалздаг.
RLS нь оролцох. Та үүнийг идэвхжүүлэхийн тулд хязгаарлагдмал үүрэгт зориулсан хоёр дахь холболтын тэмдэгт мөрийг gateway-д өгнө:
# 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 = … шүүлтүүрүүд хаа сайгүй гараар битүүмжилэгддэггүй; бодлого нь төвлөрсөн байдлаар үүнийг хэрэгжүүлдэг бөгөөд энэ нь алдагдсан шүүлтүүр нь өөр түрээслэгчийн мөрүүдэд нэвчилж чадахгүй гэсэн үг юм.
Систем / тойрох горим
Зарим ажил нь хууль ёсны хувиартай — бүх тохиолдолд ажилладаг арын ажилтнууд, програмчлагдсан ажиллуулах системүүд болон засвар үйлчилгээний ажилууд. Эдгээр нь ажилладаг систем / тойрох горим инээмсэглэн тэд юу хэрэгтэйг нь харж болно. Bypass нь итгэмжит дотоод ажилчдад зориулагдсан бөгөөд хүсэлт боловсруулах замуудд зориулагдаагүй.
[!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 баталгаатай хүргэлт болон автомат эргэлт сэргээх боломжийг санал болгож чаддаг давтамжтай мессежний энгийн эрсдэлгүйгээр — идемпотент байдал нь суурь юм хууртаагүй хүргэлтийн баталгаанууд дээр тавигдсан.
Дараа хаашаа явах вэ
- Эргэлтийг хөдөлгөдөг гүйцэтгэлийн хугацаа: Хаалга ба эргэлтийн хөдөлгүүр.
- Хариултууд яг нэг удаа хэрхэн эргэж ирдэг вэ: Найдвартай хүргэлт ба сэргэлт.