Proč používat vícevrstvé aplikace (s API) při vývoji?

Když se řekne „vícevrstvá aplikace“, běžný laik si pod tímto technickým termínem asi nepředstaví nic konkrétního. I přesto je však více než pravděpodobné, že pokud používá chytrý telefon, přichází přesně s takovou aplikací do styku dnes a denně – většina současných mobilních apek je totiž na vícevrstvé architektuře založena a celá řada jejich funkcí je umožněna propojením těchto vrstev přes rozhraní API.

Ti, kteří se o vývoj v IT světě aktivně zajímají, samozřejmě o vícevrstvých aplikacích slyšeli již dávno, ale i přesto jim mohou být některé detaily tohoto důmyslného konceptu dosud neznámé, a není tak na škodu si o nich říct něco bližšího. Podívejme se tedy nejen na samotnou definici vícevrstvé architektury, ale zejména na její výhody a nevýhody, možnosti, které pro vaše aplikace nabízí, a také na konkrétní zkušenosti s tímto typem softwaru.

Pokud se po přečtení článku rozhodnete, že je vícevrstvá aplikace přesně tím, co potřebujete, není nic snazšího než vyplnit náš kontaktní formulář a probrat váš projekt s opravdovými profesionály, kteří jsou ve světě vícevrstvé architektury jako doma!

Co je to vícevrstvá architektura a vícevrstvá aplikace?

Pojmem vícevrstvá architektura (případně multi-tier nebo n-tier architektura) se označuje struktura softwarových produktů, jejichž fungování nezajišťuje jeden jediný program, ale několik vrstev běžících na různé výpočetní infrastruktuře. Jednotlivé vrstvy spolupracují prostřednictvím definovaných rozhraní a jsou volně zaměnitelné, aniž by to negativně ovlivnilo chod celé aplikace. Důležitou součástí vícevrstvé architektury je také přenos dat za pomoci standardních protokolůtechnologií (REST API, SOAP, GraphQL). Vícevrstvá aplikace je tedy konečný software využívající tohoto typu architektury.

Pokud si to chcete představit na konkrétním příkladu, vzpomeňte si na svůj poslední nákup v nějakém eShopu. Klientská část (uživatelské rozhraní), se kterou jste během nákupu interagovali, běžela ve vašem prohlížeči, aplikační logika (algoritmy a procesy) na webovém či aplikačním serveru a data (popis zboží, objednávky, ceny, …) byla získávána z databázového serveru. V tomto případě se tedy jedná o architekturu třívrstvou, ale existují i dvouvrstvé, čtyřvrstvé a vícevrstvé (n-vrstvé) architektury. Počet vrstev závisí na funkcích a komplexnosti aplikace. 

Vývoj vícevrstvé aplikace
Vývoj vícevrstvé aplikace

Není vrstva jako vrstva

Pokud půjdeme více do hloubky, narazíme dříve či později na rozdíl mezi anglickými termíny tierlayer, které v češtině splývají do jednoho překladu „vrstva“. Rozdíl mezi nimi spočívá v tom, že „tier“ označuje fyzickou hardwarovou vrstvu, zatímco „layer“ znamená softwarovou (logickou) vrstvu.

Toto rozlišení je významné při rozhodování se mezi vertikálnímhorizontálním přístupem k vývoji vícevrstvých aplikací. Vertikální přístup předpokládá vyhrazení určitých strojů (tiers) k provádění specifických úloh rozdělených do logických vrstev (layers). Horizontální přístup je naopak založený na posílení jednotlivých tierů (např. přidáním dalších serverů) kvůli lepšímu vyrovnání zátěže (load balancing). V praxi se samozřejmě oba postupy velmi často kombinují, a v takovém případě hovoříme o diagonálním přístupu.

Pozornost si zaslouží také již zmíněný výraz API neboli rozhraní pro programování aplikací (Application Programming Interface). Jedná se o soubor procedur, funkcí či protokolů jiného softwaru (knihovna, program, jádro operačního systému, …), které může po napojení používat jiná služba nebo aplikace. Pokud tedy například vyvinete mobilní apku pro předpověď počasí, budete potřebovat odněkud čerpat meteorologická data. Pomocí API se napojíte na specializovanou službu třetí strany, která tato data shromažďuje, a vaše aplikace díky tomu bude moct zobrazovat uživatelům aktuální předpověď.

Proč se vývoj vícevrstvé aplikace vyplatí a na co si dát pozor?

Vícevrstvá architektura přináší mnoho výhod, které vycházejí zejména z oddělení jednotlivých vrstev a volných vazeb mezi nimi. S tímto konceptem se však pojí potenciálně i některá úskalí, proto si pojďme rozebrat plusymínusy vícevrstvých aplikací podrobněji.

Výhody vícevrstvých aplikací

Hlavní silnou stránkou vícevrstvých aplikací je bezpochyby flexibilita. Pokud je potřeba některou z vrstev vyměnit nebo upravit, nebude to mít vliv na funkčnost aplikace jako celku. To se hodí například tehdy, když je potřeba kompletně přepracovat aplikační logiku. Uživatelé si ničeho nevšimnou, protože vzhled zůstane i navzdory rozsáhlým změnám stejný. A stejně tak lze totálně „překopat“ uživatelské rozhraní, aniž by se to dotklo jinak funkční logiky, nebo třeba provést výměnu databází (např. přejít z MySQL na Microsoft SQL). To vše lze navíc často provádět i za chodu aplikace bez jakýchkoli výpadků či omezení dostupnosti.

Další výhodou je rychlejší vývoj. Vzhledem k nezávislosti jednotlivých vrstev může na každé z nich pracovat souběžně jiný tým vývojářů. Tutéž business logiku, design nebo databázi mohou navíc využívat i další aplikace, což opět významně šetří čas.

Snazší je také údržbařízení výkonu. Rozdělení kódu do vrstev ulehčuje provádění aktualizací a potřebných úprav. Silné vytížení jedné z vrstev nemá vliv na výkonnost ostatních, takže nedochází tak snadno k pádům aplikací.

Zapomenout nesmíme ani na dobré zabezpečení a větší odolnost proti útokům. Více vrstev znamená pro potenciálního útočníka více překážek. I v případě, že se mu podaří některý z modulů napadnout, zůstávají ostatní části nedotčeny. Díky větší adaptabilitě n-tier architektury lze navíc přizpůsobit zabezpečení jednotlivých vrstev různým typům útoků. K vyšší bezpečnosti přispívá také to, že data jsou uložena jinde, než kde běží aplikace – celý systém je tak „zapouzdřený“ a méně zranitelný vůči kybernetickým hrozbám.

Dobré zabezpečení aplikace
Dobré zabezpečení aplikace

A v neposlední řadě: Například mobilní aplikace v dnešní době již prakticky nelze vyvíjet ani jinak než jako vícevrstvé. Kromě těch úplně nejprimitivnějších apek se bez multi-tier architektury zkrátka neobejdete – ať už kvůli škálovatelnosti, údržbě a aktualizacím, centralizaci dat, zabezpečení či kompatibilitě napříč různými typy zařízení. Jednovrstvá architektura všechny tyto požadavky nedokáže pokrýt a vaše aplikace by se tak nikdy nedostala k vašim uživatelům. Přes API lze navíc napojit například i webovou nebo desktopovou verzi, což ještě rozšíří škálu koncových zařízení, a nebo třeba i služby třetích stran (platební brány, Google Maps apod.)

Pár slabých míst

Rozdělení architektury aplikace do jednotlivých vrstev s sebou může přinášet i určité komplikace. Jednou z nich je potenciálně vysoce heterogenní prostředí, které může vzniknout v případě, že pro fyzické vrstvy použijete hardware různých výrobců a na serverech poběží odlišné operační systémy. To bude znamenat zvýšené nároky na údržbu, upgrady a monitoring IT zdrojů, a dost možná také vyšší provozní náklady.

Komplexní prostředí může mít vliv i na odstraňování chyb. Každá další vrstva navyšuje složitost systému, což představuje problém při řešení problémů zasahujících do všech úrovní. Pokud navíc vaše řešení využívá microservices architektury, vstupují do hry i další faktory, jako například závislost na externích službách, distribuovaná povaha architektury a komunikace mezi jednotlivými službami přes API. Debugging může být v takovém případě časově náročnější než u jednovrstvých aplikací.

Microservices

S konceptem vícevrstvých aplikací souvisí také microservices architektura – strategie založená na rozčlenění softwaru do oddělených, vzájemně spolupracujících modulárních bloků, tzv. mikroservis. Rozdíl oproti n-tier architektuře spočívá v tom, že v tomto případě mohou být do mikroservis rozloženy i jednotlivé vrstvy (například samotné uživatelské rozhraní může být tvořeno několika mikroservisami). V krajním případě lze dokonce mít zvláštní mikroservisy pro každou hlavní stránku nebo typ obsahu, případně pro jednotlivé aspekty zpracování dat v rámci back-endu.

Pokud by vás zajímal projekt z naší dílny, který tento přístup využívá, projděte si případovou studii k aplikaci Legato. Jedná se o ERP systém pro správu domovů pro seniory realizovaný formou progresivní webové aplikace, který pomáhá personálu domova s evidencí klientů, plánováním služeb, zaznamenáváním dat apod. Vzhledem k tomu, že jedním z hlavních požadavků na systém byla modulovatelnost, rozhodli jsme se právě pro microservice architekturu. Ta umožňuje bezproblémové přidávání nových modulů bez nutnosti zasahovat do celého kódu. Cloudový provoz navíc nabízí vynikající možnosti škálování podle skutečného vytížení.

Cloudový provoz aplikace
Cloudový provoz aplikace

Naše zkušenosti a reference klientů

Za každou IT firmu mluví nejhlasitěji nejen její aplikace, ale také sami klienti. Přečtěte si, co o výše zmíněném systému Legato řekl Jakub Žákavec ze společnosti Delpsys s.r.o.:

„Firma Think Easy vyhrála výběrové řízení na vývoj ERP systému, které jsme vypsali. Realizace proběhla formou microservices architecture a progresivní webové aplikace. Oceňuji především rychlé reakce na naše požadavky a vážím si otevřené komunikace. Spolupráce s Matějem, Matoušem a jejich týmem nám dává smysl. S Think Easy se pouštíme do dalších fází našeho projektu.“

Naše zkušenosti s vícevrstvými aplikacemi se samozřejmě neomezují pouze na systém Legato. Ba právě naopak – prakticky všechny aplikace, které vyvíjíme, obsahují prvky vícevrstvé architektury nebo microservices.

Například inzertní systém Engerio, který jsme vyvinuli pro stejnojmennou slovenskou společnost, chytře využívá Cloud Native technologií pro zobrazování nativní reklamy. Celý systém je vysoce komplexní a postavený na vzájemné komunikaci mezi mnoha vrstvami, aby zvládal úlohy jako získávání a třídění dat, zobrazování relevantního inzertního obsahu a přizpůsobení rozvržení pro mobily a tablety. Kromě toho bylo potřeba zajistit také komunikaci s reklamní službou SmartAd. A aby toho nebylo málo, systém musel zvládat nápor milionů návštěvníků denně s velmi nízkou odezvou, to vše při provozu 24/7.

Za pomoci n-tier přístupu a technologií AWS Cloud se nám podařilo všechny tyto náročné požadavky zvládnout, což potvrzuje i Zuzana Kačírová, CEO společnosti Engerio:

„Pre náš projekt sme sa pri výbere programátorskej firmy rozhodovali medzi viacerými. Think Easy nás presvedčili svojim precíznym prístupom už pri úvodnej analýze. Pri príprave podkladov aj z finálnych výstupov bolo vidieť ako detailne rozmýšľajú nad návrhom aplikácie. Veľmi sa nám na spolupráci páči, že sa hlbšie zamýšľajú ako funkcie aplikácie spraviť užívateľsky čo najprívetivejšie. Zároveň myslia na veľa detailov, ktoré by nám ako klientovi nenapadli. Vnímame, že máme partnera, na ktorého sa môžeme spoľahnúť.“

Další ukázkou naší práce je aplikace Exitovky pro společnost INTEFOLIO s.r.o. Tato mobilní aplikace pro AndroidiOS slouží k hraní populárních únikových her v režimu multiplayer. Až šest hráčů prochází hrou společně, avšak každý na svém mobilním zařízení se synchronizovanou obrazovkou. Principem únikovek je plnění úkolů (čtyři různé typy) ve venkovních prostorech, což znamenalo vysoké nároky na přesnost GPS lokátoru (v řádu metrů). Vývoj nám trval celkem tři měsíce a pracovali jsme na něm ve frameworku Django.

Spolupráce s klientem byla velice úspěšná, což dokládá svými slovy i Stanislav Zrůst ze společnosti INTEFOLIO s.r.o.:

„Výběr společnosti Think Easy byl pro projekt Exitovky nejlepší volbou. Velmi dobře se nám spolupracovalo a v řadě věcí mi vyšli vstříc. Oceňuji zejména spolehlivost, kvalitní komunikaci a dobrý poměr cena/výkon. Exitovku máme v plánu dále rozvíjet a s Think Easy budeme i nadále spolupracovat v zaběhnutých kolejích. Věřím, že z naší aplikace se stane mobilní synonymum pro venkovní únikové hry.“

Moderní vícevrstvá aplikace na míru

Zaujal vás koncept vícevrstvé architektury a uvažujete o tom, že by i vaše příští aplikace mohla být rozdělena do více na sobě nezávislých vrstev? Lákají vás výhody v podobě vyšší flexibilityrychlejšího vývoje? Nebo jen potřebujete rozšířit funkce vaší mobilní či webové apky o nové funkce pomocí API?

Ať už jsou vaše plány a požadavky jakékoli, budete k jejich naplnění potřebovat spolehlivého partnera, který vás provede celým procesem od návrhu řešení až po poprodejní servis a bude vám vždy k dispozici pro konzultace. Nezáleží na tom, zda již máte vymyšlený kompletní projekt, nebo chcete jen probrat počáteční nápad – využijte náš kontaktní formulář a ozvěte se nám. Co nejdříve se s vámi spojíme a najdeme řešení, které nejlépe odpovídá vaší situaci!