Nykytila ja rekisteri: yrityksen käyttöjärjestelmän kaksi muistia

Luotonvalvoja avaa hyväksyntäjonon. Agentti on ehdottanut pidätetyn tilauksen vapauttamista: asiakas maksoi kaksi erääntynyttä laskua tänä aamuna, avoin saldo on nyt limiitin sisällä, ehdotus viittaa molempiin maksuihin. Hän hyväksyy. Kolme kuukautta myöhemmin asiakas kiistää maksun, ja tilintarkastaja esittää yksinkertaisen kysymyksen: mitä järjestelmä tiesi sinä päivänä kello 09.14, ja kuka päätti?
Moduulit pystyvät vastaamaan ensimmäiseen puolikkaaseen vain, jos mitään ei ole sen jälkeen ylikirjoitettu. Maksutaulu näyttää tämän päivän saldon, ei sen aamun. Tilaus näyttää nykyisen tilansa, ei sitä, jonka agentti näki. Itse ehdotus on poissa jonosta, koska se käsiteltiin. Järjestelmä, jossa agentit ehdottavat ja ihmiset hyväksyvät, tuottaa päätöksiä tahdilla, jossa «rekonstruoimme sen» lakkaa olemasta vastaus. Se tarvitsee toisen muistin.
Miksi moduulien tietovarasto ei voi olla ainoa muisti
Moduulien alla oleva tietovarasto on rakennettu yhtä asiaa varten: muuttamaan yrityksen nykytilaa turvallisesti. Yksi tilaus, yksi lukko, yksi transaktio, indeksit viritetty löytämään yksi rivi nopeasti. Juuri sellainen sen pitää olla, eikä mikään tässä ehdota sen korvaamista.
Superäly esittää samalle datalle erilaisia kysymyksiä, ja jokainen niistä rasittaa tuota varastoa.
Lukeminen suuressa mittakaavassa. Yhtä asiakasta koskeva ehdotus lukee tuhansia rivejä tilauksista, laskuista, maksuista ja reklamaatioista. Malli, joka pisteyttää toimitusriskin koko tilauskannalle, lukee miljoonia. Sen kokoiset luvut kilpailevat niiden transaktioiden kanssa, joita varasto on olemassa suojatakseen.
Historia. Varasto sisältää sen, mikä on totta nyt. Useimmat agentille esitetyt kysymykset koskevat muutosta: mikä limiitti oli, kun tilaus hyväksyttiin, kuinka kauan tämä toimittaja on lipsunut, onko tämän asiakkaan kate laskenut kolme vuosineljännestä. Ylikirjoittava varasto ei voi vastata niihin; versiot säilyttävä muisti voi.
Koko yritys kerralla. Tilaus on kaupassa, reklamaatio asiakaspalvelussa, lava varastossa, seisokki toiminnoissa. Yhdessä käyttöjärjestelmässä niillä on yhteinen tietomalli, mikä on koko järjestelmän tarkoitus. Silti niillä ei ole yhteistä kätevää paikkaa, josta kaiken voisi lukea kerralla koskematta tauluihin, joihin moduulit kirjoittavat.
Mitä agentti näki. Ehdotus on puolustettavissa vain, jos data, josta se tehtiin, voidaan näyttää myöhemmin täsmälleen sellaisena kuin se oli. Se vaatii tilannekuvan, ei nykyarvoa.
Hurukanin vastaus on kaksi muistia yhden ontologian alla: nykytila, jota moduulit muuttavat sekunti sekunnilta, ja rekisteri, muuttumaton ja versioitu historia jokaisesta tapahtumasta, ehdotuksesta ja päätöksestä. Datakerros, joka pitää molemmat, on rakenteilla; seuraavassa kerrotaan, miten sitä suunnitellaan.
Mistä rekisteri on tehty
Rekisteri ei ole tuote. Se on kolme päätöstä, joista jokainen tehdään kerran.
Tiedostomuodot ovat tiilet. Jokainen tapahtuma ja jokainen taulun tilannekuva kirjoitetaan tiedostoihin avoimessa muodossa. Rivit, jotka kulkevat moduulien ja liittimien välillä, kulkevat Apache Avro -muodossa, jossa skeema kulkee datan mukana ja kirjoittajan ja lukijan yhteensopivuus on muodollinen sääntö. Data, joka lepää ja luetaan sarakkeittain, kulkee Apache Parquet -muodossa, jossa kahta saraketta koskeva kysymys miljoonien rivien yli koskettaa kahta saraketta. Se, kumpi muoto palvelee mitäkin tehtävää, on aiheena tekstissä Parquet ja Avro: tapahtuma moduulien välillä ja rekisteri, jota superäly lukee.
Taulumuoto on suunnitelma. Pelkät tiedostot ovat kasa. Taulumuoto — Delta Lake, Apache Iceberg, Apache Hudi, Apache Paimon — pitää metadatan, joka kertoo, mitkä tiedostot muodostavat taulun tiettynä hetkenä, mikä sen skeema on ja miten se on muuttunut. Koska tiedostoja itseään ei koskaan muokata, taulun jokainen versio pysyy luettavana: siitä syntyy aikamatka (time travel) ja sen mukana vastaus kysymykseen «mitä agentti näki kello 09.14». Valinta niiden välillä on valinta tarkastusjäljestä, ja se tehdään tekstissä Tarkastusjälki on taulu: Delta Lake, Iceberg vai Hudi.
Katalogi kertoo, missä totuus on. Jonkin on pidettävä osoitinta kunkin taulun nykyiseen versioon ja päätettävä, kuka saa lukea sen. Tuo katalogi, eivät tiedostot, on paikka, jossa suvereniteetti voitetaan tai hävitään. Se toimii yrityksen valitsemassa infrastruktuurissa, ja tietoturvan ja suvereniteetin kerros käsittelee sitä osana yrityksen omaa omaisuutta.
Miten tapahtuma kulkee
Moduuli muuttaa nykytilaa: maksu kirjataan. Sama muutos julkaistaan tapahtumana sopimuksen alla — nimetty skeema versioineen. Putki laskee tapahtuman rekisteriin uutena tiedostona taulun metadatan alle sen viiveen sisällä, jota liiketoiminta on pyytänyt. Öinen ajo riittää kateraportille. Minuutit tarvitaan luottopäätökseen. Sekunnit tarvitaan tuotantohallin työjonoon, ja sekunnit maksavat enemmän kuin minuutit, minkä vuoksi taso on päätös eikä oletus.
Rekisteriin kirjoitetaan yhteen suuntaan. Agentit ja superäly lukevat sitä yhdessä ontologian kanssa, joka kertoo niille, mitä «pidätetty tilaus» tai «lipsuva toimittaja» tarkoittaa. Ne eivät kirjoita siihen suoraan. Agentin tuotos on ehdotus, joka laskeutuu hyväksyntäjonoon; ihminen hyväksyy; moduuli muuttaa nykytilaa; muutos julkaistaan tapahtumana; tapahtuma laskeutuu rekisteriin. Päätösloki on itsekin taulu rekisterissä: ehdotus, sen lähteet, hyväksyjä ja aika.
Mitä agentti näki, ja kuka päätti
Tuo silmukka tekee tilintarkastajan kysymyksestä vastattavan. Rekisteri kello 09.14 on taulujen versio, ei rekonstruktio. Ehdotus on rivi, jossa ovat sen lukemien rivien tunnisteet. Hyväksyntä on rivi, jossa on ihmisen nimi. Mikään ketjussa ei riipu siitä, että joku muistaa.
Sama ominaisuus palvelee järjestelmän rakentajia. Kun agentin uutta versiota arvioidaan, päivän tapahtumat voidaan toistaa rekisteristä sitä vastaan ja sen ehdotuksia verrata niihin, jotka ihmiset todella hyväksyivät. Rekisteri on arviointiaineisto.
Agentit rakentavat datakerroksen, hyväksynnän alla
Hurukania rakentavat ja laajentavat agentit, eikä datakerros ole poikkeus. Agentti luonnostelee putken, joka laskee uuden tapahtumatyypin. Agentti ehdottaa skeemamuutosta, kun moduuli saa uuden kentän, ja yhteensopivuustarkistus rekisteriä vasten ajetaan ennen kuin kukaan lukee ehdotusta. Agentti suunnittelee pienten tiedostojen tiivistyksen ja vanhojen tilannekuvien vanhentamisen. Jokainen näistä on ehdotus, jossa on diff ja testitulos, ja ihminen hyväksyy sen. Hyväksyntä kirjataan kuten mikä tahansa muu.
Ihmisille jää se, mitä ei voi perua tai päätellä: moduulien välinen sopimus, historian säilytys ja henkilön tietojen poisto, muodon ja katalogin valinta sekä jokainen taulun protokollan päivitys, joka sulkisi vanhemman lukijan ulos.
Rekisteri, jonka voi ottaa mukaan
Jokainen rekisterin osa on muodossa, jota muut moottorit lukevat. Jos yritys lähtee, se lähtee historiansa kanssa: tiedostot, taulujen metadata ja katalogi, omassa infrastruktuurissa. Siellä, missä yrityksellä on jo työkaluja, jotka lukevat yhtä muotoa — Microsoft-ympäristö, Snowflake-tytäryhtiö — samat tiedostot voidaan näyttää siinä muodossa ilman kopiota, mikä on aiheena tekstissä Yksi rekisteri, luettavissa työkaluilla, jotka teillä jo on. Ja siellä, missä toimialueagentit tarvitsevat nykytilaa eivätkä historiaa — työjono, varastosaldo, hyväksyntäjono — virtoja varten rakennettu taulumuoto pitää tuon tilan luettavana ilman moduulien varaston kyselyä, mikä on Paimonin tapaus.
Testi, jonka voit tehdä tänään
Ota yksi päätös, jonka yrityksesi teki viime vuosineljänneksellä raportin perusteella: luottolimiitti, täydennystilaus, hinta. Yritä tuottaa data täsmälleen sellaisena kuin se oli päätöspäivänä, ja sen henkilön nimi, joka päätöksen teki. Laske tunnit. Se luku on yhden muistin hinta, ja sitä varten rekisteri on.
- rekisteri
- lakehouse
- tarkastus
- taulumuodot
- suvereniteetti