← All posts

Skaal-tot-nul kan nie tot een tel nie

Authagonal·July 6, 2026
authinfrastructurekubernetesaksserverlessazurearchitecture

Die advies was altyd van dieselfde vorm. Jou verifikasieverkeer is piekagtig. Jou Kubernetes-kluster sit meestal stil. Azure Container Apps skaal tot nul en faktureer jou vir wat jy gebruik. Jy betaal 24 uur per dag vir 'n kluster wat die grootste deel van sy lewe wag.

Ons het dit ernstig genoeg geneem om die koste van die migrasie behoorlik te bereken. Toe het ons dit stopgesit. Nie weens die prys van die oorskakeling nie, en nie weens cold starts nie, alhoewel cold starts alleen genoeg moes gewees het. Ons het dit stopgesit omdat die platform se woordeskat 'n getal mis, en dit is die enigste getal waarvoor ons verifikasiekern werklik omgee.

Serverless tel tot nul en tot N

Skaal-tot-nul-runtimes ken twee getalle. Nul, wanneer niemand skakel nie. N, wanneer hulle skakel, met N wat op aanvraag dryf. Vir toestandlose versoekhantering is daardie woordeskat perfek, daarom klink die advies so reg. Die meeste web-backends lyk werklik so: elke versoek onafhanklik, elke instansie weggooibaar, nul verkeer verdien 'n nul faktuur.

'n Verifikasiestelsel se publieke gesig lyk ook so. Token-eindpunte, aanmeldblaaie, JWKS. Toestandloos, piekagtig, cache-vriendelik.

Daaronder is 'n laag wat niks van daardie dinge is nie.

Die getal is een

Onder die eindpunte bestuur ons backplane 'n koördinasielaag. Op enige oomblik hou presies een replika die kluster se leierskaps-huur (lease) vas (deesdae 'n blob-huur, nie meer gossip nie, wat 'n storie vir 'n ander pos is) en voer die enkelvoudige take uit: die retensie-opruiming, die webhook-afleweringsrondte, die werk waar twee gelyktydige uitvoerders newe-effekte beteken wat twee keer afgevuur word, en nul uitvoerders beteken dinge gebeur stilweg nooit.

Die getal wat daardie laag benodig, is een. Nie nul wanneer dinge stil is nie. Nie N onder belasting nie. Een, voortdurend vasgehou, met 'n verifieerbare oorhandiging wanneer die houer sterf. Skaal-tot-nul het geen manier om "een, altyd" te sê nie. Dit kan sê "ten minste een terwyl daar verkeer is", wat 'n ander belofte is, en die verskil tussen daardie twee beloftes is presies die mislukkingsmodus wat 'n leierskapsverkiesing bestaan om te voorkom.

Dit is hoekom die gebruiksgrafiek vir ons gelieg het. 'n Stil verifikasiekluster doen nie niks nie. Dit hou 'n huur vas, hou handtekeningsleutels warm en staan gereed om die volgende tokenvalidasie in enkelsyfer-millisekondes te beantwoord. Stil en ledig is verskillende toestande, en faktureringspaneelborde wys jou slegs een van hulle.

Jy kan dit namaak, en dit is erger

Jy kan "presies een" op 'n serverless runtime afdwing. Stel minimum replikas vas op een en jy het 'n altyd-aan bediener gekoop op 'n platform waarvan die hele instink is om stil instansies van jou weg te neem. Elke skaalgebeurtenis, elke platform-geïnisieerde herbegin, elke weergawe-ruil word 'n leierskapsvraag waarvan jy nie die tydsberekening beheer nie. Ons sou vir altyd teen die runtime se kerngedrag veg om ons eie te bewaar, en betaal vir die voorreg.

En die mislukking kom op die slegste moontlike persoon neer. Die versoek wat 'n cold start betaal, is 'n mens wat probeer aanmeld. "Jou aanmelding was stadig omdat ons verifikasiediens geslaap het" is nie 'n sin wat enigiemand moet uitstuur nie.

Die faktuur het 'n vervelige oplossing gehad

Wat van die geld wat dit alles begin het? 'n Skeduleerder en 'n SKU het dit opgelos. Die dev-kluster deallokeer nou wanneer niemand dit gebruik nie, en die nodepool het na 'n goedkoper SKU verhuis. Een paragraaf is al wat dit verdien, en dit is die punt: "hou op om vir ledigheid te betaal" is 'n doelwit, nie 'n argitektuur nie, en die meeste van die doelwit was bereikbaar met 'n konfigurasieverandering in plaas van 'n her-platform.

Die vormtoets

Die reël wat ons gehou het: pas die runtime by die werklading se werklike vorm aan, nie by sy verkeersgrafiek nie. Serverless beloon dit wat toestandloos en piekagtig is. Dit straf alles wat 'n deurlopende, eksklusiewe rol moet hê, en 'n verifikasiekern wat handtekeningsleutels bewaak en kies wie die destruktiewe take uitvoer, is die suiwerste voorbeeld van daardie tweede soort wat ons ken.

Ons is nie teen serverless nie. Baie van ons toestandlose oppervlak sou gelukkig daarop leef. Maar die laag wat tot presies een moet tel, bly op vervelige, altyd-aan, inspekteerbare infrastruktuur.

Daardie laag is ook presies wat jy ophou bedryf wanneer jy verifikasie op Authagonal laat loop in plaas van om die backplane self te bestuur.