Tabla opravil + razporejevalnik
← kazalo
Kaj je to
Colibrjeva tabla opravil hrani delovne naloge, ki jih odda operater, razporejevalnik
pa jih ob vsakem taktu dodeli najprimernejšemu agentu. Opravila pritekajo prek
Unix vtičnice demona (create-task, intake-task), prazni pa jih zanka
razporejevalnika, ki teče znotraj demona vsakih ~30 sekund.
Odločitve
Točkovanje po zmožnostih (najboljše ujemanje, ne prvo)
Ko razporejevalnik izbira agenta za opravilo, točkuje vsakega razpoložljivega
agenta glede na zahtevane zmožnosti opravila s preprostim štetjem preseka:
|zahtevane ∩ agentove_zmožnosti| / |zahtevane|. Agent z najvišjim številom
točk zmaga; izenačenja razreši ime agenta (deterministično, da ponovni teki ne
premetavajo).
Opravilo z ["freebsd", "zfs"] se bo ujemalo z agentom, ki ima obe zmožnosti,
pred tistim, ki ima samo freebsd. Opravilo brez zahtevanih zmožnosti ustreza
vsakemu agentu. Agenti brez povezave in agenti, katerih zmožnosti se sploh ne
sekajo, so preskočeni.
Zakaj ne krožno ali FIFO: ujemanje po zmožnostih pomeni, da pravi agentdobi pravo delo brez operaterskega ročnega dodeljevanja. Točkovanje je
preprosto (presek množic) in pregledno — brez strojnega učenja, brez uteži za
uglaševanje.
→ crates/colibri-daemon/src/scheduler.rs
(capability_match_score, pick_agent)
Tri vrste urnikov (cron, interval, enkrat)
| Vrsta | Obnašanje |
| -------- | -------------------------------------------------------------- |
| Cron | Sproži ob določenem stenskem času (npr. 0 0 * * * = polnoč). |
| Interval | Sproži po določenem trajanju od zadnjega teka (npr. 3600s). |
| Enkrat | Sproži natanko enkrat, ob določenem prihodnjem času. |
Cron vzorci so preprosti 5-poljski izrazi (minuta, ura, dan, mesec, dan v
tednu) z nadomestnimi znaki — brez sekundne natančnosti, brez sintakse
/step. Ujemanje uporablja primerjavo predpone: cron vzorec se ujema, če se
vsako polje trenutnega časa začne z nizom vzorca, torej 0 ustreza 00, 1
ustreza 10-19 itd. To je namenoma preprosto — cron je pripomoček za
periodično hišno opravilo, ne splošni opravilni pogon.
Zakaj ne prava cron knjižnica: naloga razporejevalnika je razpošiljanjeopravil agentom, ne upravljanje koledarja. Preprosti predponski cron pokrije
90 % primerov uporabe (dnevne gradnje, urna poročila) brez dodatne odvisnosti
za razčlenjevanje.
→ crates/colibri-daemon/src/scheduler.rs
(should_fire)
Praznjenje vnosne vrste (vrsta → tabla opravil → agent)
Ukaz intake-task prek vtičnice potisne opravilo v vnosno vrsto. Ob vsakem
taktu razporejevalnika (~30s) zanka izprazni vnosno vrsto v shrambo SQLite na
tabli opravil, nato preveri zapadla načrtovana opravila. To dvofazno
praznjenje loči oddajo od izvajanja: operater odds kadar koli, razporejevalnik
obdeluje v paketih.
Opravila v vnosni vrsti nosijo niz zmožnosti (ne ID agenta).
Razporejevalnik izbere najboljšega agenta ob času izvajanja, zato bo opravilo,
oddano ko noben ujemajoči agent ni na voljo, prevzeto, ko se eden poveže.
Zakaj vnosna vrsta in ne neposredna dodelitev: agenti prihajajo inodhajajo. Če bi oddaja zahtevala izbiro agenta, bi operater moral vedeti,
kateri agenti so na voljo — sklopitev, ki se ji tabla opravil namenoma izogne.
→ crates/colibri-daemon/src/scheduler.rs
(Scheduler, add_job, submit),
crates/colibri-daemon/tests/intake_scheduler_loop.rs
Podlaga SQLite (vgrajeno, ne storitev)
Tabla opravil hrani opravila, registracije agentov, podatke o najemnikih in
katalog veščin v vgrajeni podatkovni zbirki SQLite na
/var/db/colibri/colibri.sqlite. Brez ločenega podatkovnega procesa — demon
odpre datoteko neposredno.
Zakaj SQLite, ne PostgreSQL: demon teče na operaterskem USB-ju in nanameščenih gostiteljih. Polna storitev PostgreSQL je pretežka za
koordinacijsko stanje enega samega demona. SQLite je brez konfiguracije, brez
administracije in preživi ponovne zagone demona brez ločenega življenjskega
cikla. Matično vozlišče uporablja PostgreSQL za hive register, ker je
večnajemniško; krajevni demon je enonajemniški.
→ crates/colibri-store/src/lib.rs
Glej tudi
- mother-hive — matični hive register, osnovan na PostgreSQL
- cost-model — sledenje stroškov po seji
- agent-harness — samodejni zagon