Inom datavetenskap är klient-server en modell för mjukvaruarkitektur som består av två delar, klientsystem och serversystem, som båda kommunicerar via ett datornätverk eller på samma dator. En klient-server-applikation är ett distribuerat system som består av både klient- och serverprogramvara. Klient-server-applikationer ger ett bättre sätt att dela upp arbetsbelastningen.Klientprocessen initierar alltid en anslutning till servern, medan serverprocessen alltid väntar på förfrågningar från någon klient.

När både klientprocessen och serverprocessen körs på samma dator kallas detta för en installation med en enda plats.

En annan typ av relaterad mjukvaruarkitektur kallas peer-to-peer, eftersom varje värd eller programinstans samtidigt kan agera både som klient och server (till skillnad från centraliserade servrar i klient-servermodellen) och eftersom alla har samma ansvar och status. Peer-to-peer-arkitekturer förkortas ofta med akronymen P2P.

Relationen mellan klient och server beskriver förhållandet mellan klienten och hur den gör en begäran om tjänster till servern och hur servern kan ta emot dessa begäranden, behandla dem och returnera den begärda informationen till klienten. Interaktionen mellan klient och server beskrivs ofta med hjälp av sekvensdiagram. Sekvensdiagram är standardiserade i Unified Modeling Language.

Både klient-server- och P2P-arkitekturer används ofta idag.

Den grundläggande typen av klient-serverprogramvaruarkitektur använder endast två typer av värdar: klienter och servrar. Denna typ av arkitektur kallas ibland för tvåstegsarkitektur. En arkitektur med två nivåer innebär att klienten fungerar som en nivå och att serverprocessen fungerar som den andra nivån.

Programvaruarkitekturen klient-server har blivit en av de grundläggande modellerna för nätverksdatorer. Många typer av program har skrivits med hjälp av klient-server-modellen. Standardfunktioner i nätverk, t.ex. e-postutbyte, webbåtkomst och databasåtkomst, bygger på klient-server-modellen. En webbläsare är till exempel ett klientprogram på användardatorn som kan få tillgång till information från vilken webbserver som helst i världen.

Hur klient och server kommunicerar

Kommunikationen sker vanligen enligt en förfrågan-svar-modell: klienten skickar en begäran (request) till servern, och servern svarar med data eller status (response). Förbindelsen bygger ofta på nätverksprotokoll och sockets. Vanliga protokoll i klient-servermiljöer är:

  • HTTP/HTTPS – för webbtrafik
  • TCP och UDP – transportlagerprotokoll som används av många högre protokoll
  • SMTP, IMAP, POP3 – för e-post
  • FTP/SFTP – för filöverföring
  • SSH – för säker fjärråtkomst
  • DNS – för namnuppslagning

Servern lyssnar vanligtvis på en eller flera portar (t.ex. port 80 för HTTP, 443 för HTTPS) medan klienten ofta använder en tillfällig (ephemeral) port för sin sida av anslutningen. Kommunikation kan vara stateless (t.ex. HTTP utan session) eller stateful (t.ex. en databasanslutning eller en långlivad sessionskoppling).

Olika arkitekturvarianter

  • Tvånivåarkitektur (two-tier) – klient och server, där klienten både kan ha presentation och affärslogik och servern hanterar data. (Beskriven ovan.)
  • Treenivåarkitektur (three-tier) – separation i presentation (klient), applikationslogik (applikationsserver) och datalager (databasserver). Ger bättre modularitet och skalbarhet.
  • Flerskiktsarkitektur / multilayer – ytterligare lager för cache, integreringstjänster, API-gateways med mera.
  • Microservices – många små, löst kopplade tjänster som kommunicerar över nätverk; varje tjänst kan ses som en server för sina klienter (andra tjänster eller front-end).
  • Peer-to-peer (P2P) – varje nod kan initiera förfrågningar och ta emot dem; lämpar sig för filutbyte, distribuerade ledger-system och vissa typer av realtidsnätverk.

Fördelar och nackdelar

Fördelar:

  • Centraliserad hantering av resurser och säkerhet.
  • Lättare att underhålla och uppdatera serverprogramvara utan att påverka alla klienter direkt.
  • Skalbarhet genom horisontell scale-out (fler servrar) och lastbalansering.
  • Tydlig ansvarsfördelning mellan presentation, logik och datalager i flerlagerssystem.

Nackdelar:

  • Servern kan bli en flaskhals eller en single point of failure om inte redundans används.
  • Latens kan påverka upplevelsen om servern är geografiskt långt bort.
  • Kostnader för drift, hårdvara och underhåll i centraliserade miljöer.

Vanliga åtgärder för att mildra nackdelarna är lastbalansering, replikering, caching (t.ex. CDN för webb), horisontell skalning och hög tillgänglighet (HA).

Säkerhet och drift

Säkerhet är central i klient-servermiljöer. Nyckelåtgärder inkluderar:

  • Kryptering av trafik (t.ex. TLS/HTTPS) för att skydda data i transit.
  • Autentisering för att verifiera användare eller tjänster (lösenord, certifikat, OAuth, API-nycklar).
  • Autorisering för att kontrollera åtkomst till resurser (rollbaserad åtkomst m.m.).
  • Brandväggar, nätverkssegmentering och regelbunden sårbarhetsskanning.
  • Loggning, övervakning och incidenthantering för drift och felsökning.

Praktiska exempel

  • Webben: en webbläsare (klient) begär sidor från en webbserver (t.ex. via HTTP/HTTPS).
  • E-post: en e-postklient ansluter till en mailserver via SMTP/IMAP/POP3 för att skicka och ta emot meddelanden.
  • Databaser: en applikation (klient) skickar SQL-frågor till en databasserver som returnerar data.
  • Fjärradministration: SSH-klient som ansluter till en SSH-server för kommandoradstillgång.
  • API-tjänster: mobilappar eller webbappar anropar REST- eller gRPC-APIer som körs på serversidan.

Designöverväganden

När man utformar en klient-serverlösning tänk på följande:

  • Skalningsstrategi: vertikal vs horisontell skalning, och hur state hanteras vid skalning.
  • Felhantering och återhämtningsstrategier: retries, timeouts, circuit breakers.
  • Prestandaoptimering: caching, belastningsfördelning, databasindexering.
  • API-design: tydliga kontrakt, versionering och bakåtkompatibilitet.

Sammanfattning

Klient-serverarkitekturen är en grundläggande och välbeprövad modell för nätverksbaserad programvara där klienter initierar förfrågningar och servrar svarar och hanterar resurser. Arkitekturen finns i många varianter — från enkla tvånivåsystem till komplexa distribuerade microservice-miljöer — och kompletteras i vissa scenarier av P2P-lösningar. Vid planering bör man väga fördelar som centraliserad kontroll och enklare underhåll mot utmaningar som skalbarhet, tillgänglighet och säkerhet, och använda tekniker som belastningsbalansering, caching och kryptering för att bygga robusta system.