Almal het gesê gaan serverless. Ons het die Kubernetes-kluster behou wat meestal ledig staan
Die raad is oral te hore en dit klink voor die hand liggend reg. Jy bedryf verifikasie vir huurders wie se verkeer wisselvallig is. Jy betaal heeldag en heelnag vir 'n Kubernetes-kluster. Azure Container Apps sal jou na nul afskaal en jou net laat betaal vir wat jy gebruik. Hou op betaal vir ledigheid.
Ons het dit ernstig opgeneem. Ons het die koste bereken om na Azure Container Apps te migreer, mooi gekyk wat dit ons sou inbring, en op AKS gebly. Hier is die redenasie, want dit is nie die redenasie wat jy uit die kluster se benuttingsgrafiek sou raai nie.
Die raad is reg, vir 'n werklas wat ons nie het nie
Serverless-houers pas uitstekend by toestandlose, uitbarstende versoekhantering: elke versoek is onafhanklik, instansies is vee, en nul verkeer behoort nul rekening te beteken. Dit beskryf 'n klomp web-agterkante.
Dit beskryf nie 'n verifikasie-agtervlak nie. Ons s'n is nie ledig op die manier waarop 'n toestandlose app ledig is nie. Dit hou die klusterleierskap vas en bedryf die koördinasielaag wat besluit watter replika die enkelton-werk doen, soos die behoud-deurveeg en die webhook-deurloop. (Ons verkies daardie leier nou met 'n blob-lease, nie meer met gossip nie, wat sy eie storie is.) Dat die kluster stil is, beteken nie dit het niks te doen nie; dit beteken dit staan gereed om die volgende token te valideer en om aan te hou leier wees. Stil en ledig is nie dieselfde toestand nie.
Ons het die ledige rekening doodgemaak sonder om te trek
Hier is die deel wat dit beslis het: die koste waarvan ons probeer ontsnap het, het 'n baie goedkoper oplossing gehad as om te herplatform.
Wat geld weggetrek het, was nodes wat 24/7 loop terwyl verkeer in werksure saamgetrek was. So het ons die ontwikkel-kluster laat de-allokeer wanneer niemand dit gebruik nie (snags en oor naweke af, en op aanvraag weer op) en die node-poel na 'n goedkoper SKU oorgeskakel. Dit het die meeste van die ledige uitgawe wat serverless beloof het om te verwyder, uitgehaal, en dit het ons 'n konfigurasieverandering gekos eerder as 'n migrasie. Wanneer die besparings wat jy wil hê op die plek bereikbaar is, is herplatform om dieselfde syfer na te jaag baie risiko vir 'n verskil wat jy reeds vasgevat het.
Die les veralgemeen: prys die oplossing voordat jy die herplatform prys. "Hou op betaal vir ledigheid" is 'n doelwit, nie 'n argitektuur nie, en die goedkoopste manier om dit te tref is dikwels 'n skeduleerder en 'n SKU, nie 'n nuwe looptyd nie.
Scale-to-zero veg teen 'n agtervlak wat 'n lease moet vashou
Selfs as 'n mens die koste eenkant sit, is scale-to-zero aktief verkeerd vir hierdie werklas op twee maniere.
Eerstens land koue aanskakelinge (cold starts) op die slegste moontlike pad. Die versoek wat die koue-aanskakel-belasting betaal, is iemand wat probeer aanmeld, en "jou aanmelding was stadig omdat ons verifikasiediens geslaap het" is nie 'n sin wat jy wil uitstuur nie.
Tweedens is leierskap en scale-to-zero in direkte konflik. Jy kan nie 'n lease vashou vanaf 'n instansie wat weggeskaal is nie. 'n Agtervlak wie se hele werk dit is om altyd presies een lewende leier te hê, wil nie 'n looptyd hê wie se hele werk dit is om instansies te verwyder wanneer hulle stil lyk nie. Ons sou teen die platform se kerngedrag veg om ons eie te behou.
Die looptyd sou drie dinge weggevat het wat ons gebruik
Migrasie is nie gratis nie, selfs waar dit werk; jy erf die bestuurde looptyd se sandput, en ons s'n blokkeer dinge waarop ons staatmaak:
- Twingate. Ons bereik private hulpbronne oor 'n Twingate-koppelaar. Die bestuurde houer-sandput sal dit nie laat loop nie, so ons sou private netwerktoegang wat ons reeds het, opnuut moes uitvind.
- Ons bou-pad. Dele van ons pyplyn leun op Docker-in-Docker en
az acr buildteen 'n private register, albei wat die sandput verbied. Dis 'n boustelsel om te herbou, nie net 'n ontplooiingsteiken om te verander nie. - Kruis-wolk-beheer. Ons bedryf 'n AWS-bystand wat tokens valideer wat die Azure-primêr uitgereik het, via gefedereerde JWKS, met Cloudflare as die failover-skeidsregter. Dit verg netwerk- en plasingsbeheer wat 'n bestuurde looptyd doelbewus wegsteek.
Elkeen hiervan is 'n omweg wat ons sou moes skryf net om terug te kom waar ons reeds staan. Die migrasie se ware koste is nie die oorskakeling nie; dit is om elke vermoë wat die sandput wegvat, opnuut te verdien.
Kostebesparing het 'n stert, en ons het dit betaal
Om te bly is ook nie sonder gevolge nie, en dis net eerlik om dit te sê. Om nodes snags te de-allokeer het ons 'n fout besorg wat ons nooit op 'n altyd-aan kluster sou gesien het nie: 'n eerste-beeld-trek token-wedloop op koue nodes (daardie AKS-kwessie 4052 een) wat soms 'n pod laat vassteek het wat opkom nadat die kluster weer aangeskakel het. Ons het dit reggemaak met 'n langer uitrol-uittel en, in produksie, deur nie te de-allokeer soos ontwikkel maak nie.
Dis die ware vorm van die afruil. Elke pad het 'n stert van falingsmodusse; die vraag is of jy hulle kan sien en regmaak. Op AKS was die koue-node-wedloop inspekteerbaar en regmaakbaar. Die soorte vreemdighede wat jy van 'n bestuurde looptyd se binnegoed erf, is die soort waaroor jy 'n ondersteuningskaartjie indien en wag.
Die reël wat ons saamgevat het
Twee dinge, herbruikbaar bo en behalwe ons. Moenie migreer om 'n koste te ontsnap wat jy waar jy staan kan doodmaak nie; prys eers die oplossing op die plek, want 'n skeduleerder en 'n goedkoper SKU klop 'n herplatform die meeste van die tyd. En pas die looptyd by die vorm van die werklas: serverless beloon toestandloos en uitbarstend en straf toestandvol en altyd-aan, en 'n verifikasiekern wat jou ondertekensleutels en jou kluster se leierskap vashou, is stewig die tweede soort.
Ons is nie teen serverless nie. Baie van ons toestandlose oppervlak sou daarop reg wees. Maar die deel wat jou sleutels vashou en besluit wie die vernietigende take laat loop, gaan aanhou loop op vervelige, altyd-aan, inspekteerbare infrastruktuur. Soms is die kluster wat ledig lyk die goedkoop opsie, sodra jy alles tel wat jy sou moes herbou om dit te verlaat.
Die altyd-aan, inspekteerbare infrastruktuur onder jou aanmeldings is 'n kenmerk, nie 'n versuim nie. Dit is presies wat jy oorhandig wanneer jy jou verifikasie op Authagonal laat loop in plaas daarvan om self die backplane te bedryf.