Tietojenkäsittelytieteessä asiakas-palvelin on ohjelmistoarkkitehtuurimalli, joka koostuu kahdesta osasta, asiakasjärjestelmistä ja palvelinjärjestelmistä, jotka molemmat kommunikoivat tietoverkossa tai samassa tietokoneessa. Asiakas-palvelinsovellus on hajautettu järjestelmä, joka koostuu sekä asiakas- että palvelinohjelmistosta. Asiakas-palvelinsovellus tarjoaa paremman tavan jakaa työtaakkaa.Asiakasprosessi aloittaa aina yhteyden palvelimeen, kun taas palvelinprosessi odottaa aina minkä tahansa asiakkaan pyyntöjä.
Kun sekä asiakasprosessi että palvelinprosessi suoritetaan samassa tietokoneessa, tätä kutsutaan yhden paikan asennukseksi.
Toisenlaista vastaavaa ohjelmistoarkkitehtuuria kutsutaan vertaisverkoksi, koska kukin isäntä tai sovellusyksikkö voi toimia samanaikaisesti sekä asiakkaana että palvelimena (toisin kuin asiakas-palvelin-mallin keskitetyt palvelimet) ja koska kullakin on vastaava vastuu ja asema. Vertaisverkkoarkkitehtuurista käytetään usein lyhennettä P2P.
Asiakas-palvelin-suhde kuvaa asiakkaan välistä suhdetta ja sitä, miten se esittää palvelupyynnön palvelimelle ja miten palvelin voi ottaa nämä pyynnöt vastaan, käsitellä ne ja palauttaa pyydetyt tiedot asiakkaalle. Asiakkaan ja palvelimen välinen vuorovaikutus kuvataan usein sekvenssikaavioiden avulla. Sekvenssikaaviot on standardoitu Unified Modeling Language -ohjelmassa.
Sekä asiakas-palvelin- että P2P-arkkitehtuurit ovat nykyään laajalti käytössä.
Asiakas-palvelin -ohjelmistoarkkitehtuurin perustyyppi käyttää vain kahdenlaisia isäntäkoneistoja: asiakkaita ja palvelimia. Tätä arkkitehtuurityyppiä kutsutaan joskus kaksitasoiseksi. Kaksitasoinen arkkitehtuuri tarkoittaa, että asiakas toimii yhtenä tasona ja palvelinprosessi toimii toisena tasona.
Asiakas-palvelin -ohjelmistoarkkitehtuurista on tullut yksi verkkolaskennan perusmalleista. Asiakas-palvelin-mallin avulla on kirjoitettu monenlaisia sovelluksia. Tavanomaiset verkkotoiminnot, kuten sähköpostin vaihto, www-yhteydet ja tietokantojen käyttö, perustuvat asiakas-palvelin-malliin. Esimerkiksi verkkoselain on käyttäjän tietokoneella oleva asiakasohjelma, joka voi käyttää minkä tahansa maailman verkkopalvelimen tietoja.
Toimintaperiaate
Perusperiaate on yksinkertainen: asiakas lähettää palvelupyynnön ja palvelin vastaa pyynnön mukaan. Käytännössä asiakas saattaa avata TCP-/UDP-yhteyden tai käyttää sovelluskerroksen protokollaa kuten HTTP:tä tai SMTP:tä. Palvelinprosessi yleensä "kuuntelee" määriteltyä porttia ja käsittelee saapuvat pyynnöt, mahdollisesti käynnistäen uusia säikeitä tai prosesseja jokaisen pyynnön käsittelyä varten. Asiakas yleensä aloittaa yhteyden, mutta palvelimen on oltava saatavilla ja saavutettavissa.
Arkkitehtuurin tyypit
- Kaksitasoinen (client–server): asiakas ja palvelin. Sovellukset kuten perinteiset tietokanta-asiakkaat ovat esimerkki.
- Monikerroksinen (multi-tier): erottaa käyttöliittymän, sovelluslogiikan ja tietovaraston. Esimerkiksi kolmitasoinen malli: esitys-, logiikka- ja tietokantataso.
- Palvelupohjainen ja mikropalvelut: toiminnot jaetaan pienempiin itsenäisiin palveluihin, jotka kommunikoivat verkon yli (esim. REST- tai gRPC-rajapinnat).
- Yhden paikan asennus: sekä asiakas- että palvelinprosessi samassa koneessa, usein kehityksessä tai testauksessa.
Tekniset käsitteet ja käytännöt
- Stateless vs. stateful: jotkut palvelimet käsittelevät jokaisen pyynnön itsenäisesti (stateless, esim. REST), toiset ylläpitävät tilaa istunnon ajan (stateful, esim. tiettyt TCP-palvelut).
- Yhteyden hallinta: pysyvät yhteydet (keep-alive), uudelleenyritykset, aikakatkaisut ja yhteyksien rajoitukset ovat tärkeitä skaalautuvuuden kannalta.
- Protokollat: yleisiä protokollia ovat HTTP/HTTPS, SMTP, FTP, IMAP/POP3, SSH sekä tietokantakohtaiset protokollat. RPC-tekniikat (etäproseduuri-kutsut) myös yleisiä palveluiden välisessä kommunikoinnissa.
Edut ja haitat
- Edut
- Selkeä vastuunjako ja keskitetty hallinta (esim. päivitykset ja varmuuskopiot palvelimella).
- Helppo keskitetty skaalautuvuus palvelinresursseilla (kuormanjako, välimuisti, klusterointi).
- Turvallisuuspolitiikkojen ja pääsynhallinnan keskitetty toteutus.
- Haitat
- Keskitetty palvelin voi muodostaa yksittäisen vianpisteen (single point of failure), ellei toteuteta redundanssia.
- Palvelimen kapasiteetti voi rajoittaa suorituskykyä, ellei skaalausta ole suunniteltu.
- Verkkoviive ja ruuhka voivat heikentää vasteaikoja erityisesti etäyhteyksissä.
Tietoturva ja luotettavuus
Tietoturva on keskeinen osa asiakas-palvelin-arkkitehtuuria. Käytännön toimenpiteitä ovat muun muassa:
- Salattu liikenne (esim. TLS/SSL HTTPS-yhteyksille).
- Autentikointi ja auktorisointi (tokenit, OAuth, API-avaimet).
- Palomuuri- ja verkon eristys, palveluiden mikrosegmentointi.
- Syötteen validointi ja suojautuminen hyökkäyksiltä kuten SQL-injektio tai XSS.
- Korkea saatavuus: kuormantasain, varmuuskopiointi, replikaatio ja automaattinen failover vähentävät keskitetyn palvelimen riskejä.
Skaalautuvuus ja suorituskyvyn parantaminen
Skaalautuvuuden parantamiseksi käytetään usein useita tekniikoita: kuormantasaus, palvelinklustereita, välimuistiratkaisuja (CDN, in-memory cache), tietokannan sharding tai replikaatio sekä asynkroninen työnjako viestinvälitysjärjestelmien (esim. message queue) avulla. Nykyaikaiset pilvipalvelut tarjoavat automaattista skaalausta ja hallittuja palveluita, jotka helpottavat kapasiteetin sopeuttamista kysyntään.
Asiakas-palvelin vs. P2P
Vertailu P2P-arkkitehtuuriin nostaa esiin keskeiset erot:
- Keskittyneisyys: Asiakas-palvelin on keskitetty (palvelin tarjoaa resurssit), P2P on hajautettu (solmut jakavat resurssejaan keskenään).
- Resurssien hallinta: Keskitetyn palvelimen hallinta on helpompaa ja kontrolloitavampaa; P2P:ssä resurssien löytyminen ja eheys voivat olla haastavampia.
- Skaalautuvuus: P2P voi teoriassa skaalata hyvin, koska jokainen solmu voi tarjota resursseja, mutta hallinta ja turvallisuus monimutkaistuvat. Asiakas-palvelin vaatii enemmän keskitettyä infrastruktuuria skaalautuakseen.
- Toleranssi vikoja kohtaan: P2P-verkot ovat yleensä vikasietoisempia, koska ei ole yhtä kriittistä solmua; asiakas-palvelin vaatii redundanssia estääkseen palvelukatkot.
- Esimerkit: P2P:stä tunnettuja sovelluksia ovat esimerkiksi BitTorrent ja monet lohkoketjuteknologiat; asiakas-palvelimen esimerkkejä ovat WWW, sähköposti ja useimmat yrityssovellukset.
Käytännön esimerkkejä
- Verkkoselain ja WWW-palvelin: selain on asiakas, web-palvelin vastaa HTTP-pyyntöihin.
- Sähköpostijärjestelmät: SMTP-palvelin lähettää viestejä, IMAP/POP3-palvelimet tarjoavat postilaatikon sisällön asiakkaille.
- Tietokanta-asiakkaat: sovellus toimii asiakkaana ja tietokantapalvelin tarjoaa kyselyihin vastaukset.
Visualisointi ja suunnittelu
Asiakas-palvelin-vuorovaikutusta kuvaillaan usein kaavioilla kuten sekvenssikaavioilla (sequence diagrams), jotka kuuluvat Unified Modeling Language -standardin piiriin. Kaaviot auttavat mallintamaan viestinvaihdon ajoitusta ja järjestyksiä eri komponenttien välillä sekä suunnittelemaan virheenkäsittelyä ja aikakatkaisuja.
Yhteenveto
Asiakas–palvelin-malli on vakiintunut ja laajalti käytetty ohjelmistoarkkitehtuuri, joka tarjoaa selkeän työnjaon, keskitetyn hallittavuuden ja monia keinoja skaalaamiseen ja suojaamiseen. Mallin valintaan vaikuttavat sovelluksen vaatimukset, turvallisuus, ylläpidettävyys ja haluttu vikasietoisuus. P2P-mallit tarjoavat vaihtoehdon hajautetummalle resurssien jakamiselle, mutta tuovat mukanaan eri haasteet hallittavuudessa ja turvallisuudessa.


