Teknologier
Hvad jeg arbejder med, og hvordan
Teknologierne bag mit backend- og cloud-arbejde, grupperet efter disciplin. For hver: hvad den er, og den vurdering jeg anvender, når jeg bruger den.
Backend-udvikling
Her ligger det meste af mit arbejde: services og API’er, der opfører sig forudsigeligt, når noget fejler.
.NET and C#
Microsofts runtime og sprog til server-applikationer og fundamentet for mit backend-arbejde.
Min tilgang
Jeg bruger typesystemet til at gøre ugyldige tilstande svære at udtrykke, holder controllers og handlers tynde og placerer forretningsregler, hvor de kan testes uden infrastruktur.
REST API’er
HTTP-baserede grænseflader mellem services og mod eksterne systemer.
Min tilgang
Jeg ser et API som en kontrakt: eksplicit, versioneret hvor det er nødvendigt og formet af, hvad forbrugerne har brug for, frem for hvordan servicen er bygget indeni.
Cloud og infrastruktur
Managed Azure-services først, med miljøer der kan genskabes og gennemgås.
Azure Functions
Serverless compute til event-drevet og planlagt arbejde.
Min tilgang
Velegnet til små handlers med ét formål, udløst af beskeder eller events. Jeg holder funktioner tynde og idempotente, fordi triggers kan udløses mere end én gang.
Azure App Service
Managed hosting af webapplikationer og API’er.
Min tilgang
Et fornuftigt udgangspunkt for services, der kører kontinuerligt. Jeg foretrækker managed hosting frem for selv at drive infrastruktur, medmindre der er en klar grund.
Azure API Management
En gateway foran API’er til autentifikation, routing, throttling og overvågning.
Min tilgang
Det giver ét sted at anvende tværgående politikker og følge trafikken, så de enkelte services ikke hver især skal genimplementere det.
Infrastructure as code
At definere cloud-ressourcer i versionsstyret kode frem for manuel konfiguration.
Min tilgang
Miljøer skal kunne genskabes og gennemgås. En ændring, der ikke kan reviewes i en pull request, er svær at stole på.
CI/CD
Automatiserede build-, test- og release-pipelines.
Min tilgang
Pipelinen bør være den normale vej til produktion, så release er rutine og gentagelig frem for en begivenhed.
Distribuerede systemer
Servicegrænser, messaging og dataejerskab — og ærlighed om prisen for hver af dem.
Mikroservices
En arkitektur af uafhængigt deploybare services, hver med egne ansvarsområder og egne data.
Min tilgang
Et afvejningsspørgsmål, ikke et standardvalg. De betaler sig, når teamstruktur og domænegrænser retfærdiggør driftsomkostningen; ellers er en velstruktureret monolit ofte det bedre valg.
Event-drevet arkitektur
Services kommunikerer ved at publicere og forbruge events og beskeder frem for at kalde hinanden direkte.
Min tilgang
Det reducerer kobling og udjævner spidsbelastninger, men flytter kompleksitet over i leveringsgarantier, rækkefølge og fejlsøgning — så handlers skal være idempotente og forløb observerbare.
Azure Event Hubs
En service med høj gennemstrømning til indtagelse og streaming af events.
Min tilgang
Velegnet til store mængder events, som flere forbrugere læser uafhængigt. Jeg designer forbrugere, så de kan håndtere genafspilning og ujævn levering.
Azure Service Bus
En message broker med køer, topics, dead-lettering og leveringsgarantier.
Min tilgang
Levering er mindst-én-gang, så handlers skal være sikre at gentage.
Relateret artikel: Idempotency is not optional
Dataejerskab og servicegrænser
Hver service ejer sine data og eksponerer dem gennem kontrakter frem for delte tabeller.
Min tilgang
Jeg trækker grænser omkring ejerskab af data og ændringshastighed, hvilket gør services uafhængigt udviklingsbare.
Data og persistens
Relationelt som udgangspunkt til transaktionelle data.
Azure SQL
En managed relationel databaseservice baseret på SQL Server.
Min tilgang
Jeg tjekker de genererede forespørgsler og indekser tidligt frem for at opdage ydelsesproblemer i produktion.
Relateret artikel: Finding the N+1 queries hiding in your EF Core code
Commerce og integrationer
Commerce-infrastruktur og de integrationer, der omgiver den.
Enterprise- og eksterne API-integrationer
Pålidelig forbindelse mellem forretningssystemer og tredjepartstjenester.
Min tilgang
Eksterne systemer fejler og ændrer sig. Jeg isolerer hver integration bag en stabil kontrakt og planlægger for retries, timeouts og delvise fejl.
Relateret artikel: Stop letting every service talk to the outside world
Optimizely CMS og Commerce
En .NET-baseret platform til indholdsstyring og commerce.
Min tilgang
Indholdsmodeller er det, redaktørerne arbejder i hver dag, så jeg modellerer dem bevidst.