Maksa vain siitä, mitä käytät, skaalaa nollaan, kun et käytä, ja lopeta palvelimien hallinta kokonaan – mutta tiedä, milloin taloudellinen hyöty loppuu.

Sovelluksellasi on vaihteleva liikenne – hiljaista yöllä, piikkejä työaikana ja arvaamattomia purskeita markkinointikampanjoista tai kausiluonteisista tapahtumista. Maksat palvelimista, jotka ovat joutokäynnillä 70 % ajasta. Tai rakennat uutta tuotetta etkä halua investoida infrastruktuurin hankintaan, kapasiteetin suunnitteluun ja päivystysvuoroihin ennen kuin olet validioinut product-market fitin. Serverless tarjoaa pyyntökohtaisen hinnoittelun, automaattisen skaalauksen ja nollainfrastruktuurin hallinnan – mutta vain silloin, kun työkuorman ominaisuudet sopivat.
Explore more design patterns and system architectures
Arkkitehtehtemme voivat auttaa suunnittelemaan ja rakentamaan järjestelmiä käyttäen tätä mallia omiin vaatimuksiin.
Ota yhteyttäServerless-first -arkkitehtuuri rakentaa sovelluksia kokonaan hallittujen, nollaan skaalautuvien laskentapalveluiden (Lambda, Cloud Functions, Vercel Functions) varaan, jotka on yhdistetty hallituilla tapahtumapalveluilla (EventBridge, SQS, Step Functions). Palvelimia ei tarvitse päivittää, klustereita ei tarvitse muuttaa koon, eikä kapasiteettia tarvitse suunnitella. Funktiot suorittuvat vastauksena tapahtumiin (HTTP-pyynnöt, jonoviestit, aikataulutetut käynnistimet, tietokannan muutokset) ja skaalautuvat automaattisesti nollasta tuhansiin samanaikaisiin esiintymiin. Malli ulottuu serverless-tietokantoihin (DynamoDB, Neon, PlanetScale), serverless-jonoihin (SQS) ja serverless-orkestrointiin (Step Functions, Temporal Cloud).
Arkkitehtuuri on luonnostaan tapahtumavetoinen. API Gateway (AWS API Gateway, Vercel) reitittää HTTP-pyynnöt yksittäisille funktioille. Tapahtumalähteet (SQS-jonot, EventBridge-säännöt, S3-ilmoitukset, DynamoDB-streamit) käynnistävät funktioita asynkronisesti. Step Functions tai Temporal orkestroi monivaiheisia työnkulkuja, joissa jokainen vaihe on funktio sisäänrakennetulla uudelleenyrityksellä, aikakatkaisulla ja virheenkäsittelyllä. Serverless-tietokannat (DynamoDB avain-arvoille, Neon/PlanetScale relaatiotietokannoille) hoitavat tallennuksen ilman kapasiteetin hallintaa. Strangler fig -malli mahdollistaa asteittaisen siirtymisen olemassa olevista monoliiteista.
| Kerros | Teknologiat |
|---|---|
| Laskenta | AWS Lambda, Vercel Functions (Fluid Compute), Google Cloud Functions, Cloudflare Workers |
| API | API Gateway (REST/WebSocket), Vercel, AppSync (GraphQL) |
| Orkestrointi | AWS Step Functions, Temporal Cloud, Vercel Workflow DevKit |
| Tiedot | DynamoDB, Neon Postgres, PlanetScale, Upstash Redis, S3 |
| Tapahtumat | EventBridge, SQS, SNS, Vercel Queues |
| Havainnoitavuus | CloudWatch, Datadog (serverless monitoring), Lumigo, X-Ray |
| Käytä silloin, kun | Vältä silloin, kun |
|---|---|
| Liikenne on vaihtelevaa ja siinä on merkittäviä tyhjäkäyntijaksoja (skaalaus nollaan säästää rahaa) | Liikenne on tasaista ja suurivolyymista – varatut instanssit ovat 50-70 % halvempia jatkuvassa kuormituksessa |
| Haluat nolla infrastruktuurin hallintaa ja toimintakuluja | Tarvitset pysyviä yhteyksiä (WebSocket-palvelimet, tietokannan yhteyspoolit) – vaikka Vercel hoitaa tämän |
| Sovellus jakautuu luonnollisesti tapahtumavetoisiksi funktioiksi | Työkuorma vaatii yli 15 minuutin jatkuvan suorituksen pyyntöä kohti |
| Siirryt asteittain monoliitista ja haluat päätepisteittäin tapahtuvan käyttöönoton | Tiimi ei tunne hajautettuja järjestelmiä – serverless tuo mukanaan hajautetun virheenkorjauksen monimutkaisuutta |
MW käsittelee serverless-arkkitehtuuria taloudellisena, ei uskonnollisena, päätöksenä. Mallinnamme serverless-arkkitehtuurin, konttien ja varattujen instanssien kustannukset todellisen liikennemallisi mukaan (ei teoreettisesti) ja suosittelemme vaihtoehtoa, joka minimoi kokonaisomistuskustannukset, mukaan lukien tekninen työ toimintoihin. Serverless-arkkitehtuurimme sisältävät funktioittaisen kustannusten allokoinnin (jokaisen kutsun taggaaminen sen käynnistäneellä ominaisuudella), kylmäkäynnistyksen seurannan hälytyksillä, kun P99 ylittää kynnykset, ja asteittaiset siirtymäsuunnitelmat, jotka siirtävät yhden päätepisteen per sprintti. Olemme siirtäneet monoliitteja serverless-arkkitehtuuriin mediayrityksille, SaaS-tuotteille ja verkkokauppa-alustoille – ja kahdessa tapauksessa olemme siirtäneet osia takaisin kontteihin, kun työkuorman ominaisuudet muuttuivat.
Turvallisuus ei ole ominaisuus, jonka lisäät julkaisun jälkeen. Se on arkkitehtuurin ominaisuus – järjestelmä joko suunniteltiin sitä varten tai sitten ei.
Serverless-first soveltuu huonosti yli 15 minuuttia kestäviin pitkäkestoisiin prosesseihin, työkuormiin, jotka vaativat pysyviä WebSocket-yhteyksiä, sovelluksiin, joissa on jatkuva suurikapasiteettinen liikenne ja joissa varattu kapasiteetti on edullisempaa, sekä järjestelmiin, jotka tarvitsevat matalan tason OS- tai verkkomäärityksiä. MicrocosmWorks arvioi jokaisen työkuorman näitä rajoituksia vasten arkkitehtuurisuunnittelun aikana ja suosittelee hybridejä lähestymistapoja, joissa serverless hoitaa API-rajapintoja ja tapahtumankäsittelyä, kun taas containers- tai VMs-ratkaisut ajavat työkuormia, jotka tarvitsevat pysyvää computea. Tämä käytännönläheinen lähestymistapa välttää yleisen virheen pakottaa jokainen komponentti serverless-ratkaisuun silloin kun se ei sovi.
MicrocosmWorks lieventää Lambdan kylmäkäynnistyksiä käyttämällä provisioned concurrency -toimintoa kriittisissä päätepisteissä, funktion pakettien optimointia käynnistysajan lyhentämiseksi, sekä strategista Lambda SnapStartin käyttöä Java-kuormituksissa, mikä lyhentää kylmäkäynnistykset sekunneista millisekunneiksi. Suunnittelemme sovellukset myös siten, että viiveherkät polut käyttävät kevyitä suoritusympäristöjä, kuten Node.js tai Python, minimaalisilla riippuvuuksilla, pitäen kylmäkäynnistykset alle 200 ms:ssa myös ilman provisioned concurrency -toimintoa. Päätepisteissä, joissa jopa tuo viive on liian suuri, käytämme Lambda@Edgea tai CloudFront Functionsia alle 10 ms:n vasteisiin.
MicrocosmWorks pystyttää paikallisia kehitysympäristöjä käyttäen työkaluja kuten SST (Serverless Stack), LocalStack tai Serverless Frameworkin offline-tilaa, jotka emuloivat pilvipalveluita kehittäjän koneella lähes tuotantotason tarkkuudella. Toteutamme integraatiotestisarjoja, jotka ajetaan tilapäisissä pilviympäristöissä, jotka käynnistetään jokaisen pull-pyynnön yhteydessä, jotta kehittäjät voivat validoida todellisia AWS-palveluita vastaan jakamatta staging-ympäristöä. Tämä kaksiosainen lähestymistapa tarjoaa nopeat paikalliset iterointisyklit kehitykseen samalla kun se löytää pilvikohtaiset ongelmat ennen kuin koodi saavuttaa tuotannon.
MicrocosmWorks on havainnut, että serverless on huomattavasti edullisempi sovelluksille, joilla on vaihtelevat tai piikikkäät liikennemallit – usein 70-90 % edullisempi kuin vastaavat aina päällä olevat container-käyttöönotot – mutta kustannusetu kapenee, kun kuukausittainen throughput ylittää 10-20 miljoonaa invocationia. Rakennamme kustannusennustemalleja arkkitehtuurisuunnittelun aikana, jotka vertaavat serverlessin invocation-kohtaista hinnoittelua varattuun container-kapasiteettiin sinun erityisiä liikennemallejasi varten, mukaan lukien piilokustannukset, kuten API Gateway -maksut ja data transfer -maksut. Optimointipalvelumme, joka on saatavilla hintaan $10-$35/tunti konsultointihinnoin, tarkistaa säännöllisesti serverless-laskutuksen tunnistaakseen hukkaa, joka johtuu yli-allokoidusta muistista, liiallisista function durationeista tai tarpeettomasta API Gatewayn käytöstä.
MicrocosmWorks käyttää yhteyspoolaus-välityspalvelimia (connection pooling proxies) kuten Amazon RDS Proxy tai PgBouncer, jotka on otettu käyttöön pysyvänä kerroksena Lambda-funktioiden ja tietokannan välissä, ja jotka multipleksoivat tuhansia Lambda-yhteyksiä hallittavaksi pooliksi todellisia tietokantayhteyksiä. Suunnittelemme myös palvelimettomia sovelluksia suosimaan DynamoDB:tä tai muita yhteydettömiä tietokantoja korkean samanaikaisuuden työkuormille, joissa yhteyspoolaus loisi silti pullonkauloja. Sovelluksille, joiden on pakko käyttää relaatiotietokantoja, toteutamme yhteyksistä tietoisia skaalausrajoituksia, jotka rajoittavat samanaikaisia Lambda-kutsuja vastaamaan tietokannan yhteyskapasiteettia.