Download Game! Currently 83 players. Last logged in:GilbourneDesertDregasZandrea

Blitzer's Blog >> 72670

Back to blogs index
Posted: 21 Sep 2026 16:44 [ permalink ]
TC$mC$ on arkkitehtuurillinen napakymppi. SiirtC$mC$llC$ suorituslogiikka
lineaarisesta ja haavoittuvasta koodista levylle sarjallistettuun
tilakoneeseen luot jC$rjestelmC$stC$ aidosti hajautetun ja vikasietoisen.
TC$mC$ mukailee tC$ydellisesti tapahtumapohjaisen (event-sourced)
tilansynkronoinnin periaatteita: staattinen data mC$C$rC$C$ tahdin, eikC$
yksikC$C$n kaatuva keskusprosessi voi vetC$C$ koko orkestraatiota mukanaan.
TC$llainen arkkitehtuuri on erityisen tehokas, kun tyC6lC$iset (execution
nodes) pyC6rivC$t eri koneilla tai LXC-konteissa, jotka jakavat saman
verkkolevyn (esim. ZFS-datasetin).
NC$in tC$mC$ konsepti mallinnetaan kestC$vC$ksi tuotantojC$rjestelmC$ksi:
1. Tilakoneen (Process JSON) datarakenne
Kun uusi RPA-tehtC$vC$ alkaa, jC$rjestelmC$ luo state-machines/ -hakemistoon
uuden JSON-tiedoston. TC$mC$ tiedosto on rutiinin absoluuttinen totuus.
Esimerkki: proc_1789983451_whatsapp.json
{
  "process_id": "proc_1789983451_whatsapp",
  "playbook": "messaging/whatsapp/02_send_file",
  "current_step": 2,
  "status": "pending",
  "lock": {
    "node_id": null,
    "claimed_at": null,
    "expires_at": null
  },
  "context": {
    "target_contact": "Dev Triad",
    "file_path": "/tmp/ai_training_data.jsonl"
  },
  "history": [
    {
      "step": 1,
      "action": "00_init",
      "status": "success",
      "timestamp": 1789983445.5,
      "log": "WhatsApp-pC$C$valikko varmistettu."
    }
  ]
}

2. Atominen Claim-operaatio verkkolevyllC$
VerkkolevyillC$ (NFS, SMB) pelkkC$ tiedoston avaaminen kirjoitustilaan ei ole
luotettavan atominen toimenpide kilpatilanteissa (race conditions).
Luotettavin tapa varata suorituslukko POSIX-yhteensopivalla levyllC$ on
tiedoston uudelleennimeC$minen (mv).
TyC6lC$isen (Node) suoritusluuppi:
 * Skannaus: Node etsii state-machines/ -hakemistosta tiedostoja, jotka
pC$C$ttyvC$t .json (eivC$t .locked).
 * Validointi: Node lukee tiedoston. Jos status on pending (tai
lock.expires_at on menneisyydessC$), node pC$C$ttC$C$ yrittC$C$ napata sen.
 * Atominen lukko: Node suorittaa komennon mv proc_1789983451.json
proc_1789983451.locked.
   * Jos komento onnistuu, node sai yksinoikeuden.
   * Jos kaksi nodea yrittC$C$ tC$tC$ tC$smC$lleen samalla millisekunnilla,
vain toisen kC$yttC6jC$rjestelmC$tason rename() onnistuu. HC$viC$jC$ saa
virheen ja siirtyy etsimC$C$n seuraavaa tiedostoa.
 * Lukon rekisterC6inti: Node pC$ivittC$C$ .locked -tiedoston sisC$lle oman
node_id:nsC$ ja asettaa expires_at -arvon esimerkiksi 60 sekunnin pC$C$hC$n
tulevaisuuteen, ja tallentaa tiedoston.
3. Askeleen (Step) suorittaminen ja tilan pC$ivitys
Kun lukko on turvattu, tyC6lC$inen suorittaa vain yhden yksittC$isen vaiheen
(current_step):
 * Node lataa muistiin kyseisen Playbookin ja suorittaa sieltC$ askeleen 2
asiat (esim. ottaa ruutukaappauksen, kC$yttC$C$ OCR:C$C$, suorittaa
klikkauksen).
 * Node tekee tarvittavat Sanity Checkit (esim. kysyy Gemmalta luvan edetC$).
 * Onnistuminen: Node kasvattaa tilakoneen current_step:n arvoon 3, kirjaa
suorituksen history-taulukkoon, tyhjentC$C$ lock-objektin, tallentaa tiedoston
ja nimeC$C$ sen takaisin pC$C$tteelle .json.
 * EpC$onnistuminen: Node kirjaa virheen, asettaa statukseksi failed (jolloin
inhimillinen valvoja tai 00_init voi puuttua peliin) ja palauttaa tiedoston
.json -muotoon.
4. OOM-Killer ja automaattinen toipuminen (Self-Healing Fleet)
TC$mC$n mallin suurin etu on sen tC$ydellinen immuniteetti yksittC$isten
prosessien kaatumisille.
Jos tyC6lC$isenC$ toimiva Chrome villiintyy selaimen muistivuodon takia ja
Linuxin OOM-killer tappaa koko Noden kesken suorituksen:
 * Tiedosto jC$C$ verkkolevylle muotoon proc_1789983451.locked.
 * Tiedoston sisC$llC$ lukee "expires_at": 1789983511.0.
 * Muut elossa olevat Nodet skannaavat sC$C$nnC6llisesti myC6s .locked
-pC$C$tteisiC$ tiedostoja. Kun kello ylittC$C$ 1789983511.0, toinen vapaana
oleva Node huomaa, ettC$ alkuperC$inen suorittaja on kuollut.
 * Uusi Node "varastaa" lukon pC$ivittC$mC$llC$ sen omiin nimiinsC$ ja
yrittC$C$ suorittaa kyseisen current_step:n uudelleen puhtaalta pC6ydC$ltC$.
NC$in useamman Noden laivasto takaa sen, ettC$ prosessit etenevC$t
vC$C$jC$C$mC$ttC$ tilakoneen alusta loppuun, vaikka yksittC$iset
virtuaalikoneet, kontit tai verkkoyhteydet katkeilisivat suorituksen aikana.
Samalla sC$ilytC$t tC$ydellisen, sekunnilleen tarkan auditoitavan lokin
siitC$, mitC$ rutiinissa on missC$kin vaiheessa tapahtunut.