čtvrtek 11. listopadu 2004

Třívrstvá architektura v kostce I.

Úvod

Ač vědomě či nevědomě se s produkty postavenými podle moderního scénáře business aplikací, též nazývaného třívrstvá architektura, setkáváme na každém kroku. Nevěříte, tak si položte otázky, jestli jste někdy používali online shop, eleketronickou rezervaci hotelu, letenky či ubytování nebo jste využili servis některého zpravodajského portálu. Pokud je vaše odpověď ano, pak jste s pravděpodobností hraničící s jistotou, narazili na třívrstvou, někdy též nazývanou vícevrstvou, architekturu.

Proč tři a ne dvě?

Model třívrstvé architektury je přímou evolucí, z dnešního pohledu již koncepčně zastaralé, dvouvrstvé architektury. Dvouvrstvá architektura vychází z vrstvy klientské a vrstvy datové, jak ukazuje následující obrázek.

Obrázek ukazuje dvě vrstvy, vrstvu klientskou a datovou

Klient obsahuje většinu aplikační logiky, se kterou pracuje přímo nad datovým zdrojem. V mnoha scénářích je zdroj dat reprezentován relační databází a klient využívá jazyk SQL pro práci s daty. Mezi další typy datového zdroje patří soubory a nebo jiné aplikace např. informační systémy.

Nevýhody tohoto modelu se ukázaly při vzrůstající komplexností klientských aplikací. Se složitostí aplikací vzrůstaly výkonové nároky na klientské počítače což byl jeden faktor. Další faktory přímo vyplynuly z masivního rozšíření aplikací, softwárové firmy byly nuceny pružně reagovat na poptávku a tím pádem se snažit operativně plnit přání zákazníků. Z těchto business procesů byly definovány požadavky na budoucí aplikace. Například nutnost sdílení zdrojů, omezení datového přenosu atd., diky kterým se začalo uvažovat o architektuře, která by tyto požadavky pokryla.

Řešení se našlo v podobě přidání třetí - střední vrstvy (middle tier). Samozřejmě se nejednalo pouze o přidání vrstvy, bylo nutno specifikovat jednotlivé vrstvy resp. jejich role v architektuře. Třívrstvou architekturu znázorňuje následující obrázek.

Obrázek ukazuje tři vrstvy, vrstvu klientskou, 

aplikační a datovou

Staronový význam jednotlivých vrstev

S přechodem na třívrstvou architekturu se posunul i význam jednotlivých vrstev, nejmarkantněji se to projevilo u vrstvy klientské. Díky nově definované aplikační vrstvě bylo možné aplikační logiku, která do té doby ležela na klientu, přesunout na aplikační server. Díky tomuto tahu se klientům značně ulevilo neboť veškerý výpočetní výkon byl přesunut na výkonné servery.

Diky přesunutí aplikační logiky na jedno místo bylo možné dosáhnout jejího sdílení a lepší správy a dostupnosti. Aplikační vrstva prezentovaná aplikačním serverem mohl a nabídnout služby v podobě rozložení zátěže (load balancing) či výpadku (fail over). Významnou měrou se podařilo redukovat datový přenos, jehož těžiště se přesunulo na trasu mezi aplikačním serverem a datovým zdrojem. Spojení aplikačního serveru a datového zdroje bylo možno realizovat vhodným přenosovým připojením. Snížení datového přenosu přímo ovlivnilo rychlost odezvy klientů a umožnilo jejich připojení na linkách s omezenou přenosovou rychlostí .

Tenký a Tlustý klient

Takto "očesaní" klienti možná zavdali příčinu k jejich pojmenování na tenké klienty (thin client) . Obecně byla ovšem klientská vrstva definována jako vrstva, která je určena pouze k prezentaci dat uživateli. Tenký klient je proto takový klient, který neobsahuje žádnou aplikační logiku. Aplikační logiku mu zprostředkuje aplikační server, ke kterému tenký klient přistupuje. Naopak tlustý klient, v dvouvrstvém modelu pouze klient, obsahuje většinu aplikační logiky. Ve skutečnosti i tenký klient musí nějakou aplikační logiku obsahovat, ale oproti tlustému klientu je to naprosto zanedbatelná část.

A co webový prohlížeč?

Webový prohlížeč, v rámci předchozí definice, spadá do skupiny tenkého klienta. Já osobně rozlišuji mezi prohlížečem a tenkým klientem. Prohlížeč postavený na standardech webu používá pro popis grafického uživatelského rozhraní (GUI) jazyk HTML a CSS. Jazyk HTML v kombinaci s CSS nenabízí takové možnosti oproti tenkým klientům, aby bylo možné popsat složitější rozhraní. Další nevýhodou prohlížeče je svázání s modelem žádost/odpověď (request/response) nastaveným HTTP protokolem.

Tyto odlišnosti mě vedou k rozlišování pojmu webový prohlížeč a tenký klient v kontextu třívrstvé architektury. Mezi častý omyl patří rozlišování tenkých a tlustých klientů podle toho jestli se jedná o webový prohlížeč. K tomuto bych rád podotknul, že klíčovým faktorem není to jestli se jedná ve výsledku o prohlížeč či nikoliv, ale rozložení aplikační logiky.

Datová vrstva

U datové vrstvy též nazývané backend nedošlo v třívrstvém modelu k žádnému posunu. Tato vrstva slouží jako datová základna a lhostejno jestli je v pozadí relační databáze, souborový systém, webová služba či jiná aplikace.

Aplikační vrstva

Jak již bylo vzpomenuto o pár odstavců výše, aplikační vrstva v podstatě tvoří skořápku pro aplikační logiku. Tato vrstva resp. aplikační logika zajišťuje přístup k datům, práci s daty a z jejich vystavení ve vhodném formátu (XML, HTML) pro klient vrstvu. Z pohledů doby zaznamenala aplikační vrstva právě nejbouřlivější vývoj. Jako nejjednodušší realizaci aplikační vrstvy můžeme považovat webový server s CGI rozhraním, jehož pomocí se volaly výkone rutiny prezentované spustitelnými soubory a později serverovými skripty.

Komplexnost aplikační vrstvy vedla k jejímu dalšímu rozdělení na vrstvy. Toto rozčlenění pomohlo definovat odpovědnosti jednotlivých vrstev v rámci aplikační vrstvy. Vrstvy jsou definovány jako prezentační (presentation), aplikační (business) a datová (persistence). Na pomezí těchto vrstev leží například MVC (Model View Controller), ORM atd., ale o tom v příštím díle. Samozřejmě pokud bude zájem.