Klient-server (client-server) je architektura distribuované aplikace, která se skládá ze dvou základních komponent: klient a server.

  • Server je komponenta, která poskytuje určitou službu. Službou zde rozumíme například data nebo provedení nějakého výpočtu. K jednomu serveru může být připojen libovolný počet klientů.
  • Klient je komponenta, která se k serveru připojuje, aby této služby využila.

Komunikaci zahajuje klient, který k serveru naváže stabilní spojení a odešle svůj první požadavek. Následně může stejné spojení využít i pro požadavky následující. Server pro každého nového klienta vytvoří nový vnitřní stav, který se označuje jako relace (session). Tento stav k němu přiřadí až do doby, než se klient odpojí. Relace primárně slouží k omezení síťové komunikace - klient se může například přihlásit jen na začátku relace a pak už se na existující přihlášení pouze odvolávat.

diagram tříd (UML)

Výhody

  • kapacita klientů a serverů je plně nezávislá
  • kód klienta i serveru lze nezávisle aktualizovat (omezeno kompatibilitou rozhraní)

Nevýhody

  • protože je klientů řádově víc než serverů, server musí umět pracovat s mnoha klienty najednou a udržovat relaci pro každého z nich
  • bezpečnost a dobré úmysly klientů nelze nijak zajistit (mohou být třeba napadeni viry), a proto musí server zajistit autentikaci a autorizaci klientů
  • jako centrální místo může být server cílem útoků, například DDOS (distribuované přetížení serveru)

Reference