← Blog

· 18 min čitanja #rust#mqtt#iot#unikernel#open source

urMQTT nakon VPS-a: SQLite u korisničkom načinu, usporedba s Mosquittom, konfiguracija kao podatak i graditelj u pregledniku

Što se dogodilo nakon drugog teksta o urMQTT-u: SQLite izoliran izvan jezgre, mjerenja protiv Mosquitta na istom VPS-u (i ono što nije išlo u našu korist), pronađeni uzroci sporog jednog toka, konfiguracija kao podatak uz web graditelj ISO-a i emulator u pregledniku, neobavezni običan MQTT i što još nije dokazano.

Drugi tekst, urMQTT na pravom VPS-u, završio je popisom "Što slijedi": H6 (SQLite izvan jezgre), H7 (sigurnost vremena), X11 (usporedba s Mosquittom na istom VPS-u) i prvo izdanje. Ovaj tekst prati taj popis istim redom i onda dodaje dvije stvari kojih na popisu nije bilo, jer su se pojavile usput: konfiguracija kao podatak, s web graditeljem ISO-a, i neobavezni običan MQTT bez TLS-a. Kao i prije: što smo planirali, što smo izgradili, što nas je iznenadilo i što je otvoreno. U ovom tekstu ima i nekoliko rezultata koji ne idu u korist urMQTT-a; ostavili smo ih jer su dio istine.

Napomena unaprijed ostaje ista: projekt je pred-alfa, prvo izdanje je samo za VPS-ove s KVM-om, a brojke mjere kod, testove i određene pokuse, ne zrelost u produkciji.

Kako je to izgledalo u vremenu

Od prošlog teksta (31.10. u 23:00) do danas (1.11. u 20:41) u repozitoriju je 59 novih commitova, ukupno 178. Svi su nastali u jednom kalendarskom danu, pa vrijedi isto upozorenje kao prije: projekt se gradi uz Claude Code (commitovi nose Co-Authored-By: Claude), plan, kod, testovi i ADR-ovi nastaju u kratkim zatvorenim petljama, a brojke ispod govore o količini koda i provjera, ne o tome koliko je ljudskog rada u njima.

Rast od prošlog teksta: Rust redaka od 89 790 do 112 408, #[test] funkcija od 739 do 926, ADR-ova od 104 do 126 i commitova od 119 do 178. Svaki red ima vlastitu ljestvicu.
Rast od prošlog teksta: Rust redaka od 89 790 do 112 408, #[test] funkcija od 739 do 926, ADR-ova od 104 do 126 i commitova od 119 do 178. Svaki red ima vlastitu ljestvicu.

Brojke su izračunate istom metodom kao u prošlom tekstu: svi .rs fajlovi izvan vendor/ i fuzz/, #[test] funkcije, naslovi ## ADR- u docs/DECISIONS.md.

Trenutak Commit Vrijeme Rust redaka Testova ADR-ova
prošli tekst 794f607 31.10. 23:00 89 790 739 104
H6 gotov a0423cc 1.11. 03:59 95 078 754 107
X11 a29f49b 1.11. 07:56 95 579 754 108
web graditelj i zrcalo izdanja 582783f 1.11. 16:49 105 645 848 122
običan MQTT, dokumentacija 8f959f1 1.11. 19:05 112 408 926 125
danas d21e3ec 1.11. 20:41 112 408 926 126

Radilo se paralelno na više grana, pa redoslijed commitova nije strogo redoslijed rada. ADR-ovi su numerirani do 232, ali numeracija ima praznina (dio je preimenovan pri spajanju grana); brojimo naslove, ne najveći broj. Izdanja: v0.2.0 (1.11., 18:45 UTC) i v0.2.1 (1.11., 20:22 UTC), oba označena kao pre-release.

H6: SQLite u korisničkom načinu rada

Što smo planirali. SQLite je 254 268 redaka C-a koji parsira bazu, WAL i dnevnik s diska, a disk može biti izrađen ili izmijenjen. Dotad je radio u jezgri, s pravima jezgre. Što smo izgradili (ADR-210 do ADR-212): SQLite, njegovi libc dijelovi i heap premješteni su u zaseban program, dbworker, koji radi na EL0 (aarch64) odnosno ring 3 (x86_64), u vlastitom adresnom prostoru. Jezgra više ne linka SQLite. Radnik s jezgrom razgovara kroz zajednički prozor memorije i dvanaest sistemskih poziva, a svaka duljina i pomak koji se vrate provjeravaju se prije upotrebe. Greška u radniku (nedopušten pristup, nedefinirana instrukcija, prekoračen vremenski proračun od 30 s) završava poziv, radnik se ponovno pokreće i baza se otvara iz WAL-a kao pri podizanju; nakon 5 ponovnih pokretanja u minuti pohrana se proglašava neispravnom, a ne pokreće se u beskraj.

Cijena, izmjerena na aarch64 pod HVF-om, ista VM, jezgra s ugrađenim SQLite-om prema jezgri s radnikom, šest naizmjeničnih pokretanja svake:

Mjerenje Prije (u jezgri) Poslije (radnik) Razlika
ulazak i izlaz iz korisničkog načina - 1,1 us po krugu
db-bench, 5 000 umetanja u 50 transakcija, najbolji / medijan 61,9k / 58,4k op/s 54,7k / 53,3k op/s -11,6 % / -8,7 %
jedno umetanje po transakciji, najbolji / medijan 2 319 / 2 148 op/s 2 307 / 2 126 op/s -0,5 % / -1 %
cijela sigurnosna kopija jednim pozivom (23 MiB) 514 ms 635 ms +23 %

Zapisi na disk (1 572) i flushevi (319) su identični, kako i mora biti. Nije izolirano ovo: jezgra i dalje vjeruje onome što radnik vrati, nakon provjere oblika. Kompromitirani radnik može lagati (na primjer vratiti praznu listu opozvanih certifikata, a time ih "odopozvati"), ali ne može čitati memoriju jezgre, TLS ključeve ni ključeve tiketa. Nema KPTI-ja, pa curenja tipa Spectre/Meltdown nisu spriječena i ne tvrdimo ništa o njima; PAC ključ dijele EL0 i EL1. Na x86_64 cijenu prebacivanja nismo izmjerili na KVM-u (pod TCG-om bi broj bio besmislen), a samo fuzziranje radnika i protokola nije gotovo. Skup testova za pohranu (79 scenarija, svaki vrti SQLite u radniku) prolazi na aarch64 HVF-u i x86_64 TCG-u, na aarch64 TCG-u 76 (jedan se preskače jer TCG nema MSI-X).

H7 je zatvoren, ali ne onako kako smo najavili. Donja granica vremena (ADR-050) i SNTP s konsenzusom (T1) pokrivaju opseg H7; NTS (RFC 8915) ostaje izvan opsega i zapisan je kao preostali rizik, a ne kao nešto što radi. Ne smatramo da je sigurnost vremena "riješena", nego da je njezin dokaziv dio gotov.

Nova mrežna opcija. Contabo ne daje DHCP prilagođenom ISO-u, pa je VPS dotad tražio drugu sliku od laboratorijske VM. Sada network.mode = "auto" (ADR-214) prvo pita DHCP, a ako zakupa nema u zadanom roku (dhcp_timeout_s, zadano 15 s) ili ga izgubi, primjenjuje zadanu statičku adresu. Isprobano ručno na QEMU-u (s DHCP-om koristi zakup, bez mreže se nakon 5 s vraća na statičku adresu); smoke scenarija za to još nema.

X11: usporedba s Mosquittom na istom VPS-u

Ista vrsta stroja kao u prošlom tekstu (Contabo, 4 vCPU AMD EPYC, 8 GiB), opterećenje s Linux domaćina 15 ms dalje, uzajamni TLS 1.3 s istim certifikatima na obje strane, Mosquitto 2.0.21 na Debianu 13 bez trajnosti. Metoda i odluke su u ADR-213, sirovi podaci u docs/perf-results/. Medijan od tri pokretanja.

Potpuna rukovanja po sekundi (TLS 1.3 + klijentski certifikat + CONNECT, bez nastavka sesije) pri 32, 64 i 128 klijenata: urMQTT 169, 278, 413; Mosquitto 82, 140, 184. To su donje granice: generator opterećenja je bio blizu vlastitog ograničenja.
Potpuna rukovanja po sekundi (TLS 1.3 + klijentski certifikat + CONNECT, bez nastavka sesije) pri 32, 64 i 128 klijenata: urMQTT 169, 278, 413; Mosquitto 82, 140, 184. To su donje granice: generator opterećenja je bio blizu vlastitog ograničenja.
urMQTT Mosquitto 2.0.21
rukovanja/s, 32 / 64 / 128 klijenata (bench profil) 169 / 278 / 413 82 / 140 / 184
isto, s ograničenjima kakva se isporučuju 185 / 262 / 333 (pri 128: 202 do 286 grešaka, reseti rukovanja) -
memorija po neaktivnoj vezi (20 000 veza) 0,50 KB hepa jezgre (0,66 KB pri 5 000) 26,8 KB rasta procesa
latencija p50, QoS 0 / QoS 1, 800 poruka/s, 64 B 14,0 / 14,8 ms 21,4 / 39,5 ms
QoS 1, 4 800 poruka/s, isporučeno/s (p50) 4 209 (77 ms) 4 235 (197 ms)
100 pretplatnika, 50 poruka/s: p50 16,6 ms 99 ms
jedan tok, QoS 0, 64 B, objavljeno/s 2 962 (0 do 7 733) 22 749

Što to znači, a što ne. Rukovanja su donje granice za oba poslužitelja: generator opterećenja je dijeljena VM s 60 do 70 % ukradenog procesorskog vremena i pri 128 niti bio je blizu vlastitog ograničenja, a urMQTT-ove radne jezgre bile su zauzete samo 12 do 13 %. Omjer pri 128 klijenata (oko 2,2 puta) najsmisleniji je; pri 32 i 64 većinom mjeri čekanje klijenata. Brojke memorije ne broje isto (hep jezgre nasuprot RSS-u procesa), pa je "oko 50 puta manje" red veličine, ne precizan omjer. Latencija od 14 ms je jedan krug mreže (oko 15 ms), dakle "nema mjerljivog vremena brokera"; repovi (p99 oko 100 do 200 ms) su kod oba brokera dominirani dijeljenim domaćinima. Razlike ispod oko 20 % ne tvrdimo.

Što nije išlo u našu korist i ostalo je u tablicama: jedan TCP tok kroz urMQTT nosio je 2 do 8 puta manje nego kroz Mosquitto, s promjenama od nule do 7,7 tisuća poruka u sekundi među pokretanjima, a 20 ms watchdog rukovatelja prekidao je žive veze kad je hipervizor zaustavio vCPU (u produkcijskoj postavci action = "drop", 6 do 8 veza po pokretanju pri QoS 0 preplavljivanju). Obje stvari su opisane u sljedećem odjeljku jer su imale uzroke u našem kodu.

Zašto je jedan tok bio spor: uzroci, a ne izgovori

Najlakše bi bilo reći "dijeljeni VPS". Nismo, nego smo uz isti VPS i istu metodu tražili uzroke. Pronađeno je pet uzroka, četiri u putu podataka i jedan u watchdogu (ADR-221 do ADR-224):

Simptom u X11 Uzrok u urMQTT-u Promjena
jedan tok 1,9k poruka/s, često 0 isporučeno Izgubljeno buđenje: petlja izlaza vraćala je popis spremnih veza preko upravo ispisanog; pretplatnik čiji se izlazni međuspremnik jednom napunio više nikad nije bio posluživan dok ga PINGRESP nije probudio popravljeno (ADR-223)
nekoliko postotaka gubitka pretvara 48k u 14k poruka/s svaki segment nakon izgubljenog bio je odbačen (prijem samo po redu), pa je oporavak koštao krug mreže po segmentu red segmenata izvan redoslijeda, SACK (ADR-222)
strop 4,4 MB/s pri 15 ms 16-bitni prozor, red slanja od 64 KiB i spori start koji je brojao ACK-ove, a ne bajtove skaliranje prozora, vremenske oznake, brojanje bajtova (ADR-222)
svaki krug toka koji stane čeka 0 do 10 ms dispečer je spavao do sljedećeg otkucaja od 10 ms (virtio-net nema prekid za prijem) ispitivanje NIC-a svakih 200 us dok postoje veze (ADR-224)
1 do 8 prekinutih veza po pokretanju watchdog je rukovatelju naplaćivao proteklo vrijeme, a VPS zaustavlja vCPU-e često i dugo proračun je vrijeme koje je jezgra stvarno radila (ADR-221)

Zaustavljanja su stvarna: na ovom VPS-u jezgre 0 do 2 imale su medijan 36 do 80 zakašnjelih otkucaja po 5 sekundi, a najgore zaustavljanje u prozoru bilo je medijan oko 70 ms i do 0,9 s (jezgra 3, baza i dnevnik: do 1,55 s), dok domaćin ne javlja ukradeno vrijeme (host steal 0 us). Zato je watchdog trebao drugi sat, ne veći proračun.

Prije i poslije, na istom VPS-u s istom metodom, medijan tri do šest pokretanja: jedan tok QoS 0, 64 B: objavljeno 1,9k, 23,7k (Mosquitto 29,3k), isporučeno 0 (medijan), 12,6k (29,2k). 16 parova, preplavljivanje, 64 B: objavljeno 24,7k, 43,2k (31,4k), isporučeno 20,0k, 37,4k (30,7k).
Prije i poslije, na istom VPS-u s istom metodom, medijan tri do šest pokretanja: jedan tok QoS 0, 64 B: objavljeno 1,9k, 23,7k (Mosquitto 29,3k), isporučeno 0 (medijan), 12,6k (29,2k). 16 parova, preplavljivanje, 64 B: objavljeno 24,7k, 43,2k (31,4k), isporučeno 20,0k, 37,4k (30,7k).
X11 kod (7f9517e) sada (86a71ff) Mosquitto
jedan tok, QoS 0, 64 B, objavljeno / isporučeno u s 1,9k / 0 23,7k / 12,6k 29,3k / 29,2k
jedan tok, QoS 0, 1 KiB 0 / 0 3,9k / 2,3k 5,4k / 5,4k
16 parova, preplavljivanje, QoS 0, 64 B 24,7k / 20,0k 43,2k / 37,4k 31,4k / 30,7k
16 parova, preplavljivanje, QoS 0, 1 KiB 3,7k / 2,9k 5,0k / 4,5k 5,9k / 5,7k
izgubljene veze po pokretanju (16 parova, 64 B) 13 (7 do 16) 0 (0 do 0) 0

Watchdog: 148 prekinutih veza u 30 opterećenih pokretanja prije, 0 u 24 pokretanja poslije; na lokalnoj napravi koja odgađa i gubi okvire, pri gubitku od 0,1 % jedan tok od 64 B s 14,3k poruka/s (jezgra X11) sada ima 41,0k, a pri 0,5 % s 5,0k na 17,7k.

Što ovo ne kaže. urMQTT i dalje nije brži od Mosquitta na jednom toku: pri 64 B objavljuje oko 80 % njegove brzine, a isporučuje oko 40 %, jer odbacuje QoS 0 kad je tok pretplatnika sporiji od izdavačeva (Mosquitto bez granice stavlja u red). Pri 1 KiB u 16-parnom preplavljivanju Mosquitto je ispred za oko 15 %, što je unutar šuma. Generator je ponovno bio dijeljena VM s 58 do 77 % ukradenog vremena. Druga runda (zaključavanje heapa izvan puta podataka, SACK na strani slanja i drugo) je na neintegriranoj grani perf-single-flow-wip; njezine brojke još nisu tvrdnje i ovdje ih ne navodimo.

Obećanje koje nismo dali, ali smo ga ispunili: konfiguracija je podatak

Do sada je svaka konfiguracija bila nova gradnja: ključevi i ograničenja bili su ugrađeni u sliku. C1 to okreće (ADR-215 do ADR-219): jezgra se gradi jednom, a konfiguracija je podatak.

  • Blob urmqtt-cfg (C1a): verzionirani, kanonski zapis (polja po rastućim oznakama, SHA-256 otisak, neobavezni odvojeni Ed25519 potpis), 70 polja s zadanim vrijednostima i granicama, dekoder koji odbija sve neispravno.
  • Jezgra ga čita kao Limine modul (C1b), prije bilo čega drugog, na aarch64 i x86_64. Postoji jedna izdana jezgra za svaki ENV osim dev (aarch64 ELF-ovi za release, prod i bench imaju isti SHA-256; provjereno samo na aarch64). Izdana jezgra odbija razvojnu konfiguraciju, a bez konfiguracije piše "refusing to serve" i ne poslužuje ništa.
  • Instalirani disk nosi konfiguraciju i ažuriranje je zadržava (C1c).
  • urmqtt-config i predložak ISO (C1d): pack, show, verify, a pack --iso zamjenjuje oba primjerka mjesta za konfiguraciju i 24 sažetka modula u gotovom ISO-u. Rezultat je bajt za bajt isti kao ISO koji mkiso.sh --config gradi. Predložak izdanja v0.2.0 ima 63 111 168 bajtova.
  • Izjava o povjerenju (ADR-219): konfigurirana slika pri podizanju ispisuje otisak konfiguracije (config: fingerprint ...), a potpis je neobavezan i isključen po zadanom. Izmijenjeni ISO nema službeni sažetak; otisak je način da se vidi što je u njemu.

Graditelj na aldo.tech

Isto što radi urmqtt-config pack --iso, radi i web stranica, istim kodom: biblioteka alata prevedena u WebAssembly (1,06 MB, bez uvoza i bez unsafe bloka). Stranica je na aldo.tech/proizvodi/urmqtt-builder/ i u svih 15 jezika stranice (na primjer en).

  • Ništa ne napušta preglednik. Certifikati, privatni ključevi i gotov ISO ostaju na računalu; stranica skida samo datoteke izdanja s ovog sjedišta, nema praćenja ni skripti trećih strana. U testu uživo nijedan zahtjev nije nosio ključni materijal.
  • Zrcalo izdanja (ADR-227): sat po sat (systemd timer, nisko prioritetan) kopira izdanja s GitHuba, svako provjerava prije objave, a stranica u pregledniku provjerava potpis SHA256SUMS ključem ugrađenim u stranicu, pa tek onda upisuje konfiguraciju u predložak. Neuspjela provjera blokira preuzimanje.
  • Jednostavno prema zadanom, napredno po potrebi (ADR-232): prvi zaslon su tri koraka (gdje radi, vaši certifikati, ime slike). Jedno polje za povlačenje datoteka razvrstava certifikat, ključ i CA po sadržaju. Napredni prikaz otvara svako od 70 polja, pretraživanje, uvoz i izvoz TOML-a; oba prikaza uređuju isto stanje. Predložak (63 MB) skida se dok korisnik ispunjava formu. U probi uživo, s probnim zrcalom i probnim ključem, izgradnja ISO-a u pregledniku trajala je 5 do 18 s.
Jednostavni prikaz graditelja: tri koraka, "Gdje će raditi?", "Vaši certifikati" i "Ime slike", s jednom sljedećom radnjom u bočnoj traci.
Jednostavni prikaz graditelja: tri koraka, "Gdje će raditi?", "Vaši certifikati" i "Ime slike", s jednom sljedećom radnjom u bočnoj traci.
Napredni prikaz, snimljen na probnom zrcalu s probnim ključem (datum izdanja i ključ potpisa nisu pravi): izdanje s provjerenim potpisom, predlošci, svako polje konfiguracije.
Napredni prikaz, snimljen na probnom zrcalu s probnim ključem (datum izdanja i ključ potpisa nisu pravi): izdanje s provjerenim potpisom, predlošci, svako polje konfiguracije.

Emulator, neobavezno. Pored "Preuzmi ISO" stoji "Isprobaj u emulatoru": QEMU preveden u WebAssembly pokreće upravo izgrađenu sliku u kartici preglednika. Ništa od njega se ne skida prije klika (oko 3 MB prvi put). Emulator je BIOS-only, bez mreže (da promet korisnika ne bi prošao kroz neki posrednik i narušio "ništa ne napušta preglednik"), traži oko 1,5 GB memorije i računalni preglednik (testiran Chrome; Firefox i Safari nisu). U njemu urMQTT stiže do URMQTT READY za oko 8 s (s preskočenim odbrojavanjem) i ispisuje isti otisak konfiguracije kao stranica, što je dokaz da je podignuta upravo ta konfiguracija. Podizanje je oko 2 puta sporije od izvornog QEMU-a na istom Macu (0,82 s prema 1,9 s), a kriptografija oko 58 puta sporija jer su sklopovske instrukcije emulirane. Zato iz emulatora ne izvlačimo nikakve tvrdnje o brzini, a stranica to kaže prije pokretanja. Pri izgradnji je trebalo zakrpati četiri bajta u .wasm-u zbog greške u prijevodu instrukcije POPCNT u izvornom emulatoru (još je nismo prijavili); sam emulator je pod GPL-om, uz ponudu izvornog koda.

Dijagnostički unos u emulatoru uživo na aldo.tech: kernel je ispisao isti otisak konfiguracije kao stranica, a zaslon prikazuje dijagnostiku (u emulatoru završava za oko 20 s; njezine brojke opisuju emulator, ne urMQTT).
Dijagnostički unos u emulatoru uživo na aldo.tech: kernel je ispisao isti otisak konfiguracije kao stranica, a zaslon prikazuje dijagnostiku (u emulatoru završava za oko 20 s; njezine brojke opisuju emulator, ne urMQTT).

Običan MQTT, samo za mreže kojima vjerujete

Običan MQTT (TCP 1883, bez TLS-a) vrlo je čest u IoT-u: zadano je u Mosquittu, u većini firmwarea za Arduino i ESP, u Tasmoti, Zigbee2MQTT-u i Home Assistantu, a koristi se i unutar segmentiranih industrijskih mreža, iza VPN-a i na privatnim LAN-ovima, pa i na uređajima bez sata (certifikati traže datum), bez dovoljno flasha ili procesora za TLS. Preko nepouzdane mreže nije prihvatljiv: tko je na putu, čita i mijenja promet. Zato je P1 (ADR-229 do ADR-231) izričit, ograničen izbor, isključen po zadanom, a TLS port ostaje; TLS se ovim ne isključuje, običan port dolazi uz njega.

  • Popis dopuštenih mreža je obavezan (allow_from, CIDR-ovi) i provjerava se pri SYN-u: izvan popisa nema SYN-ACK-a ni stanja. Cijeli internet (0.0.0.0/0) traži zasebnu izričitu opciju.
  • Tri načina prijave: lozinka (zadano kad je uključeno; PBKDF2-HMAC-SHA-256, sol, 10 000 iteracija, usporedba u stalnom vremenu, zaključavanje po adresi), anonimno (jedan konfiguriran identitet s vlastitim ACL-om) i po adresi (ip). Graditelj lozinku raspršuje u pregledniku i u memoriji drži samo sažetak.
  • Manje prava nego mTLS: običan klijent nikad nema servisna, operatorska ni upravljačka prava, nema $SYS ni konzole, ima vlastite sesije ($plain/<identitet>/<id klijenta>, samo čiste), vlastita ograničenja i registar dopuštenih ga i dalje obvezuje.
  • Što se gubi, piše u SECURITY.md: povjerljivost, cjelovitost, autentičnost brokera i ponavljanje snimljene prijave. To se konfiguracijom ne može popraviti; tako je kad nema TLS-a.

Izmjereno na laptopu (Apple silicon, HVF, QEMU korisnička mreža), 16 parova, 64 B, tri pokretanja od 10 s: pri 8 000 poruka u sekundi TLS i običan put isporučuju sve poruke s istom latencijom (p50 0,17 ms prema 0,13 do 0,18 ms), nove veze po sekundi: TLS oko 2 600 do 2 750, anonimni običan oko 4 900 do 7 800, a prijava lozinkom je skupi dio: jedan PBKDF2 stoji oko 2,5 ms, pa se broj novih prijava ograničuje na oko 200 po jezgri podataka u sekundi (izmjereno 308 do 342 na dvije jezgre). Preplavljivanje na tom stroju nije stabilan instrument (20k do 440k isporučenih u sekundi među pokretanjima) i iz njega ne izvlačimo zaključak. Usporedba običnog puta s Mosquittom na VPS-u još nije napravljena. Testovi: smoke skupina plaintext 7 od 7 na aarch64 HVF-u i na x86_64 TCG-u, novi fuzz cilj plain_input (2,3 milijuna pokretanja bez nalaza).

Greške koje je pronašao rad uživo

Dvije stvari nisu ulovili testovi, nego prvo uključenje na pravom sjedištu:

  • Stranica je datoteke izdanja tražila jedan direktorij previsoko, pa je svaka provjera potpisa odgovorila 404 (ispravak 13af301). Test je koristio probno zrcalo na drugoj putanji.
  • Tipkovnica emulatora nikad nije stigla do gosta: uzrok nije bio loš prijevod tipki, nego to što dijalog uopće nije slušao tipke (ispravak u ADR-232, uz unos za podizanje bez tipki).

Lekcije

  • Tražite uzrok, ne okrivljavajte okolinu. Većina slabosti jednog toka i sve prekinute veze bile su naše; hipervizor je stvaran, ali ga je trebalo mjeriti, ne pretpostavljati.
  • Usporedba s drugim proizvodom mora uključiti i gubitke. Tablica u kojoj su samo naše pobjede ne bi bila usporedba.
  • Mjerni instrument ima granice. Dijeljeni generator s 60 do 70 % ukradenog vremena mijenja što brojke znače; zato pišemo "donja granica" i ne tvrdimo razlike ispod 20 %.
  • Izolacija nije dokaz. SQLite u EL0 smanjuje što greška u njemu može, ne ono što može lagati.
  • Stvarna instalacija nalazi ono što testovi ne traže: putanju koja je krivo složena i tipke koje nitko ne sluša.

Što još nije dokazano

  • Potpisni ključ izdanja za sada je probni ključ; v0.2.0 i v0.2.1 su pre-release, a slike uz njih razvojne uz probne certifikate (osim predloška, koji je bez konfiguracije).
  • 13 prijevoda stranice graditelja (i ovog teksta) napisao je AI i provjerili su ih testovi i uzorci, ne izvorni govornici.
  • Usporedba s Mosquittom je jedna sjednica, jedan put i jedan dijeljeni generator, na dijeljenom VPS-u; razlike ispod 20 % nisu tvrdnje.
  • Običan put nije mjeren na VPS-u ni protiv Mosquitta.
  • Lighthouse na novom jednostavnom prikazu nije potvrđen (stari prikaz: pristupačnost 95 ili više).
  • Bare metal, x86_64 cijena radnika na KVM-u, Firefox i Safari za emulator: nije mjereno.

Što slijedi

  • D1: javni demo broker. Emulator iz preglednika ne možemo učiniti javnim: živi u kartici jednog posjetitelja, 20 do 100 puta je sporiji od KVM-a, nema dolazne mreže i nestaje sa zatvaranjem kartice; preusmjeravanje interneta u tuđi preglednik bilo bi i zlouporaba. Moguć je pravi demo broker: urMQTT na VPS-u iza imena na aldo.tech, s objavljenim probnim CA-om, strogim ACL-om i malim ograničenjima. To je zasad samo ideja, ne gradnja, i treba izričit pristanak za javno izlaganje.
  • Druga runda za jedan tok (grana perf-single-flow-wip): tek kad je izmjerena na VPS-u i spojena.
  • Običan put protiv Mosquitta na VPS-u, prijava i opoziv računa za običan MQTT preko potpisanog upravljačkog kanala.
  • Poslije izdanja: bare metal (X12 do X16), IOMMU i Secure Boot, šifriranje diska.

Kod je na github.com/zeljan-alduk/urMQTT, a docs/PROGRESS.md i dalje je jedini izvor istine o tome što stvarno radi, docs/PERFORMANCE.md o tome što je izmjereno. Pred-alfa, kao i prije; prijave grešaka i sigurnosne prijave po uputama u SECURITY.md dobrodošli su.

Komentari

Pravila komentiranja

Pravila komentiranja

Komentari su tu za razmjenu iskustava i pitanja o temama bloga. Da bi rasprava bila korisna svima, vrijede ova pravila.

  1. Pristojnost Bez uvreda, prijetnji, uznemiravanja, govora mržnje i diskriminacije po bilo kojoj osnovi. Kritizirajte argument, ne osobu.
  2. Na temu Komentar se treba odnositi na objavu ili na raspravu ispod nje.
  3. Bez reklama i spama Bez oglašavanja, lančanih poruka i poveznica bez konteksta. Poveznice i slike su dobrodošle kad doprinose raspravi.
  4. Privatnost drugih Ne objavljujte tuđe osobne podatke: imena i prezimena privatnih osoba, adrese, telefone, e-poštu, fotografije bez pristanka.
  5. Autorska prava Objavljujte samo sadržaj koji smijete dijeliti. Kod citiranja navedite izvor.
  6. Jedan identitet Koristite jedan nadimak i ne predstavljajte se kao netko drugi.
  7. Potvrda e-poštom Komentar se objavljuje tek kad potvrdite poveznicu iz e-pošte. Adresa se ne prikazuje i ne koristi se ni za što drugo; nepotvrđeni komentari brišu se nakon 48 sati.
  8. Moderacija Komentare koji krše pravila sakrivamo ili brišemo bez najave, a raspravu možemo zaključati. Odluke moderatora su konačne.
  9. Odgovornost Za sadržaj komentara odgovara njegov autor. Komentari ne odražavaju stavove ALDO TECH-a.
  10. Prijava Neprimjeren sadržaj prijavite na info@aldo.tech.