Monivuokraisuus ja idempotenssi
AiHummer on monivuokralainen: yksi portti voi palvella monia työtiloja yhdestä tietokannasta samalla, kun sen tiedot pidetään erillään. Kaksi mekanismia tekevät siitä turvallista — Postgres-rivitason tietoturva (RLS) lukemisen/kirjoittamisen eristystä varten, ja idempotenssikerros jotta uudelleenyrittämiset ja vuoron palauttaminen eivät koskaan tuottaisi todellisen maailman sivuvaikutusta kahteen kertaan.
Taso: Rivin tason turvallisuuden monivuokralais-eristys on rajoitettu maksulliseen versioon Yritys taso — ei osa ilmaista/Yhteisö-alustaa; idempotenssikerros on osa ydintä.
Vuokralaisen eristäminen rivitason suojauksella
Eristäminen toteutetaan tietokannassa, ei vain sovelluskoodissa. AiHummer suorittaa kyselyt läpi rajoitettu Postgres-rooli (aihummer_app) johon on sovellettu RLS-käytäntöjä, joten itse tietokanta hylkää rivit, jotka eivät kuulu aktiiviselle vuokralaiselle.
RLS on osallistua vapaaehtoisesti. Aktivoi se antamalla yhdyskäytävälle toinen yhteysmerkkijono rajoitetulle roolille:
# 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] Isäntäkohtaisissa asennuksissa asennusohjelma asettaa
AIHUMMER_DB_APP_URLautomaattisesti, joten RLS on oletuksena päällä vakiototeutuksessa. Jos muuttuja puuttuu, portti toimii vain omistajapoolissa eikä RLS ole aktiivinen.
Vuokralaiskohtainen laajuuden määrittely
Rajoitetussa roolissa jokainen pyyntö on kohdistettu sen vuokraajaan: yhdyskäytävä asettaa nykyisen vuokraajakontekstin yhteyteen, jotta RLS-politiikat ratkaistaan oikeaa työtilaa vastaan. WHERE tenant_id = … Suodattimia ei ole käsin tehty kaikkialla; politiikka toteuttaa sen keskitetysti, mikä tarkoittaa, että ohitettu suodatin ei voi vuotaa toisen vuokralaisen rivejä.
Järjestelmä / ohitustila
Joitakin töitä tehdään laillisesti monivuokralaisympäristössä — taustatyöntekijöitä, ajastimia ja ylläpitotehtäviä, jotka toimivat koko instanssin laajuudelta. Nämä ajetaan järjestelmä / ohitustila jotta he voivat nähdä, mitä heidän tarvitsee. Ohitus on varattu luotetuille sisäisille työntekijöille, ei pyyntöjen käsittelyreiteille.
[!WARNING] Migraatiot ajetaan aina omistajapoolilla, ei koskaan rajoitetun roolin alla. Omistajayhteydellä on oikeudet muuttaa skeemaa ja soveltaa RLS:ää politiikat; rajoitettu rooli ei tarkoituksellisesti. Säilytä kaksi yhteyttä merkkijonot erillisiä ja myönnä
aihummer_approoli vain sen mitä se tarvitsee.
Idempotentit sivuvaikutukset
Kierros voi tuottaa todellisen maailman sivuvaikutuksia: lähettää kirjeen, julkaista viesti takaisin kanavalle. Jos kierrosta yritetään uudelleen — tilapäisen virheen vuoksi tai koska portti käynnistyi uudelleen kierroksen aikana ja palautus toistaa sen — näiden sivuvaikutusten on ei tapahtua kahdesti. AiHummer takaa tämän kahdella yhteistyössä toimivalla osalla.
Yhteenvetovakaa pääkirjan avain
Jokainen sivuvaikutus kirjataan vastaan jatka-stabiili pääkirja-avain: avain, joka johdetaan deterministisesti vuorosta, joten saman vuoron uudelleen suorittaminen laskee saman avaimen sen sijaan, että saataisiin uusi. Kirjanpito muistaa, mitkä avaimet on jo otettu käyttöön.
Sivuvaikutuseste
Ennen vaikutusta, kuten posti tai kanava-lähetä suoritettaessa se kulkee läpi sivuvaikutusten este joka tarkistaa kirjanpidon. Jos tätä avainta on jo käytetty, este oikosulkeutuu ja vaikutus ohitetaan; jos ei, vaikutus suoritetaan ja avain vahvistetaan.
side-effect requested
└─▶ compute resume-stable ledger key
└─▶ barrier: key already committed?
├─ yes ─▶ skip (no double-send)
└─ no ─▶ perform effect ─▶ commit key
Tulos on täsmälleen-kerran ulkoinen käyttäytyminen vaikka toimitus on vähintään-kerran sisäisesti. Uudelleenyrittäminen on turvallista rakenteensa vuoksi, mikä mahdollistaa kääntymisen palautuksen (katso Luotettava toimitus ja palautus) toista keskeytetty vuoro ilman, että asiakas saa samaa sähköpostia tai samaa vastausta kahdesti.
[!TIP] Siksi AiHummer voi tarjota takuun toimituksesta ja automaattisesta käännösten palautuksesta ilman tavallista päällekkäisten viestien riskiä — idempotenssi on perusta toimitustakaukset perustuvat.
Minne seuraavaksi
- Ajoaika, joka ohjaa kierrosta: Verkkosilta ja kääntömoottori.
- Kuinka vastaukset palautetaan tarkalleen kerran: Luotettava toimitus ja palautus.