Rust Workers worden veel beter bestand tegen fouten Cloudflare Workers met Rust

Rust Workers worden veel beter bestand tegen fouten

Cloudflare Workers met Rust krijgen een belangrijke update. Een panic of abort hoefde vroeger niet netjes te stoppen, en kon een hele instantie in de war brengen. Dat maakt Rust workers nu een stuk betrouwbaarder.

Waarom is dit belangrijk?

Als je een site,app of API runt op Rust Workers,wil je dat één fout niet meteen meer stuk maakt. Vroeger kon een panic in één verzoek namelijk doorwerken naar andere verzoeken. In het slechtste geval raakte de hele Worker “besmet” en ging ook nieuw verkeer fout.

Rust Workers worden veel beter bestand tegen fouten Cloudflare Workers met Rust

Dat is vooral lastig voor mensen met state in geheugen. Denk aan apps die tijdelijk gegevens vasthouden, zoals Durable Objects.Dan wil je niet dat één fout alles weggooit. 🦫

Wat is er nu anders?

Cloudflare heeft twee dingen verbeterd:

  • panics kunnen nu worden opgevangen met panic=unwind
  • aborts krijgen een nieuwe herstelstap, zodat de fout niet blijft hangen

Kort gezegd: een fout in Rust hoeft niet meer meteen de hele runtimemachine kapot te maken.De code kan nu beter netjes stoppen, opruimen en daarna weer normaal verder werken.

De verbeteringen zijn ook teruggegeven aan het wasm-bindgen-project, waar rust Workers veel op leunen. Daar draait veel van de koppeling tussen Rust en JavaScript om. Cloudflare heeft dus niet alleen iets “dichtgezet” voor zichzelf, maar ook aan de bron meegebouwd.

Dit merkt een gewone gebruiker ervan

Voor de meeste site-eigenaren is het voordeel simpel: minder kans dat één fout uitgroeit tot meerdere fouten. Dat betekent:

  • meer kans dat andere verzoeken gewoon doorgaan
  • minder kans dat een Worker tijdelijk “vast” raakt
  • minder kans op rare, lastige herstarts
  • beter gedrag als je code per ongeluk paniekt

Er zit ook een belangrijk verschil tussen twee soorten herstel.

panics kunnen nu netjes uitlopen

Bij panic=unwind kunnen opruimtaken nog draaien. Dat is handig,want dan worden destructors uitgevoerd. Zo blijft de staat van het programma beter klopt.

Rust-fouten worden aan de JavaScript-kant ook als PanicError doorgegeven. Bij async functies wordt de promise dan afgewezen met zo’n fout. Dat is duidelijker dan een stille, vreemde crash.

Aborts blijven hard,maar worden beter afgehandeld

Een abort is nog steeds een harde fout. Daar kun je niet netjes uit “unwinden”. maar de runtime kan nu wel beter zien dat zo’n fout gebeurd is, en daarna voorkomen dat kapotte state blijft doorsudderen.

Dat is vooral een laatste verdedigingslinie. Het doel is niet dat aborts fijn zijn. Het doel is dat ze niet nog meer schade doen.

Voor wie is dit handig?

Dit is vooral nuttig als je één van deze dingen doet:

  • Rust Workers gebruikt voor een API of backend
  • state in geheugen bewaart
  • Durable Objects gebruikt
  • Rust als Wasm-bibliotheek in JavaScript inzet
  • betrouwbaarheid belangrijk vindt en niet wilt dat één fout alles raakt

Voor een simpele stateless Worker is het voordeel vooral rustiger gedrag bij fouten. Voor apps met geheugenstate is het nog belangrijker, omdat daar een fout eerder echte schade kan geven.

Wat heb jij eraan in de praktijk?

Hier is het eenvoudigste overzicht:

SituatieWat vroeger kon gebeurenWat nu beter is
Panic in één requestOok andere requests kunnen last krijgenDe fout blijft beter binnen dat ene pad
Abort in WasmKapotte state kon blijven hangenDe runtime kan dit beter herkennen en opvangen
Geheugenstate in een WorkerReinit kon data weggooienPanics kunnen vaker netjes worden afgehandeld
Rust via wasm-bindgenBeperkte herstelregelsBetere recovery en duidelijke foutgrenzen

De kern is: minder kans op domino-effecten.

Waar moet je op letten?

Niet alles wordt ineens magisch foutvrij. Aborts bestaan nog steeds. Ook is de omschakeling naar de nieuwe manier nog iets waar tooling en ecosystemen aan moeten wennen.

Er zijn een paar dingen om te onthouden:

  • panic=unwind is nieuw voor Rust Workers als optionele stap
  • als je nu op de oude manier bouwt, blijft er nog steeds een oudere herstelroute bestaan
  • moderne WebAssembly Exception Handling is niet overal even oud of even breed uitgerold
  • Cloudflare werkt nog aan verdere stappen om dit later zoveel mogelijk vanzelf te laten lopen

Voor jou als gebruiker betekent dat: upgraden helpt, maar je moet nog steeds gewoon netjes code schrijven en fouten afvangen waar dat kan.

Handige tip

Gebruik je Rust Workers? Dan is het slim om de nieuwe --panic-unwind vlag te bekijken. Cloudflare zegt dat deze beschikbaar is vanaf Rust Workers versie 0.8.0. Daarmee worden panics beter hersteld en krijgt abort recovery de nieuwe classificatie en herstelhaak.

De officiële uitleg staat hier:

  • Cloudflare blog: https://blog.cloudflare.com/making-rust-workers-reliable
  • wasm-bindgen guide over panics: https://rustwasm.github.io/docs/wasm-bindgen/

Kijk ook even naar je eigen foutafhandeling. Een betere runtime helpt veel,maar goede checks in je code blijven belangrijk.

Als je hierover door wilt lezen, pak dan ook even Cloudflare wordt sneller op meer netwerken Cloudflare zegt dat het nu op mee.

Bevers gedachte

Dit is zo’n update die op het eerste gezicht erg technisch lijkt,maar die in de praktijk gewoon fijn is. Je merkt hem vooral als het misgaat. En juist dan wil je geen chaos die doorrolt naar alles eromheen.

De mooie winst zit dus niet in extra poespas,maar in rust. Minder kapotte staten, minder rare kettingreacties, meer kans dat je site gewoon door blijft gaan. Dat is precies het soort update waar je pas blij mee bent als je het nodig hebt.