facebook LinkedIN LinkedIN - follow
IT SYSTEMS 6/2015 , ITSM (ITIL) - Řízení IT

Tomcat vládne všem a boří mýty o výběru aplikačního serveru



I když je dnes moderní diskutovat o potřebnosti Java aplikačních serverů vůbec, většina webových aplikací se stále na aplikační server nasazuje. Výběr aplikačního serveru je důležitým rozhodnutím, které má velký vliv na architekturu i na průběh zákaznických projektů.


Při diskuzích s kolegy i zákazníky často slýchám výhrady typu „Tomcat není aplikační server“ nebo „Opravdu velký web nemůže běžet pod Tomcatem“. Tento článek se pokusí podobné a jiné pochyby rozptýlit a ukázat, že pro mnohé projekty je Tomcat výhodnou a plnohodnotnou volbou.

Mýtus první: Tomcat není Java aplikační server?

Ve světle striktní definice Java aplikačního serveru nejde o mýtus, ale o formálně správnou výhradu. Java aplikační server totiž implementuje Java EE specifikaci nebo její část a Tomcat skutečně neimplementuje Java EE specifikaci ani její část zvanou web profil (existuje od verze Java EE 6). Není to tedy certifikovaný Java aplikační server. Je to pouze servlet kontejner s podporou JSP stránek. Stačí to? Pro velkou část webových aplikací ano. Místo o certifikovaných aplikačních serverech proto budu dál hovořit o dobrých aplikačních serverech.

Co dělá aplikační server dobrým aplikačním serverem?

  • Dovoluje mi používat nejmodernější technologie.
  • Práce se serverem je rychlá a produktivní.
  • Server je dobře škálovatelný.
  • Má kvalitní dokumentaci a vstřícnou komunitu.
  • Mohu používat identický aplikační server pro vývoj i produkční nasazení.

Tomcat tyto atributy splňuje, což se zde pokusím postupně rozebrat.

Mýtus druhý: Standard je nade vše, aneb Java EE vs. Spring

Vhodnost použití Tomcatu pro danou aplikaci hodně souvisí s tím, jestli její architektura staví na Java EE specifikaci nebo používá Spring či jiný open source framework.

Obecně považuji mnohé open source technologie za lety prověřené a stabilní. Kvalitní framework s podporou komunity pro mě znamená víc než standard. U aplikačního frameworku čekám především funkční úplnost, kvalitní dokumentaci a podporu komunity.

Jednotlivé verze Java EE specifikace typicky dělí několik let (Java EE 6 – prosinec 2009, Java EE 7 – červen 2013, Java EE 8 – očekávané uvedení ke konci roku 2016). Jednotlivé verze Spring frameworku také typicky dělí několik let (Spring 3 – prosinec 2009, Spring 4 – prosinec 2013), ale další projekty spadající pod Spring framework mají svůj samostatný životní cyklus (např. Spring Data, Spring Web Services, Spring Boot). Mohou tak rychleji reagovat na nové trendy a především na zpětnou vazbu z Java komunity.

Uvedu dva příklady – depedency injection (vkládání závislostí) a Java 8.

V době, kdy vznikala CDI specifikace, už aplikace postavené na Springu dependency injection několik let používaly. CDI specifikace je sice výborná a v mnoha ohledech lepší než Spring, ale přišla pozdě. Ilustruje to častý přístup posledních verzí Java EE specifikací – kvalitní implementaci již dlouho používaných myšlenek. Inovace přichází z Java komunity a open source projektů. Java EE specifikace trendy nenastavuje, ale pouze dohání.

Druhým příkladem je Java 8, která byla Oraclem uvolněná v březnu 2014. Mohu aplikace se Springem provozovat na Javě 8 a Tomcatu? Ano, prakticky hned od uvolnění Javy 8. Návrh rozhraní ve Springu je výborně kompatibilní s myšlenkou funkcionálních rozhraní (functional interfaces), takže se Springem 4 mohu prakticky hned používat lambda výrazy. Je s Javou 8 kompatibilní i aktuální specifikace Java EE 7? Jistě ano, ale například aktuální verze WebSphere aplikačního serveru 8.5.5 Javu 8 stále nepodporuje. IBM SDK pro Javu 8 je stále horkou novinkou.

Sympatická je mi rovněž nekonfliktní image Spring frameworku, který se vždy prezentoval jako doplněk a nadstavba nad Javou EE. Na druhé straně zastánci Javy EE se s každou novou verzí radují, že už konečně není důvod dál používat Spring.

Mýtus třetí: Open source chybí produktivita, dokumentace a reference

Start Tomcatu i nasazování aplikací je velmi rychlé. Certifikované aplikační servery se většinou marně snaží přiblížit se rychlosti práce s Tomcatem.

K Tomcatu existuje rozsáhlá dokumentace. O ochotě komunity pomáhat s problémy svědčí například otázky na StackOverflow, kde je pro Tomcat evidováno více než 23000 otázek (z toho cca 63% zodpovězených).

V Profinitu Tomcat používáme v produkčním prostředí velkých projektů jak pro státní správu, tak například pro finanční instituce. Na českém trhu roste poptávka po portálových řešeních postavených na Liferay portálu. Považuji Tomcat za dobrou volbu i pro jeho provoz a v praxi už jsme takový projekt dodávali.

Za výbornou referenci pro Tomcat považuji, že dva z velkých hráčů na poli cloudu a integrace – firmy Pivotal a MuleSoft – postavily na Tomcatu svoje komerční řešení Pivotal tc Server a MuleSoft Tcat. Oba servery staví na původní distribuci Tomcatu, ke které přidávají lepší podporu pro pro vysokou škálovatelnost, zejména nástroje pro snadnější administraci velkých clusterů. Pro Tomcat nabízí také placenou podporu.

Mýtus čtvrtý: Opravdu velký web nemůže běžet pod Tomcatem

Setkávám se s názorem, že Tomcat je možná přijatelný pro malé intranetové aplikace, ale rozhodně nezvládne obsluhovat požadavky uživatelů velkého webu na internetu.

Tomcat má výbornou podporu pro škálovatelnost, které se dosahuje vhodnou konfigurací clusteru.

Pro umožnění load balancingu je třeba před cluster Tomcatů umístit vhodný webový server nebo síťový prvek. Typicky se používá webový server Apache httpd. V minulosti jsme dodávali portálový projekt, kde se Liferay portál nasazoval na cluster Tomcat serverů s F5 jako firewallem a load balancerem. Webový server nebo síťový prvek zajišťuje vedle load balancingu i správné chování pro failover.

Replikace HTTP session může být realizována pomocí persistence (sdílený souborový systém, databáze) nebo paměťovou replikací mezi uzly clusteru (každý s každým nebo replikace na záložní uzel). 

Obr. 1: Typický deployment Tomcatu v clusteru. Jednotlivé uzly mezi sebou provádí replikaci HTTP session, předřazený Apache web server se stará o load balancing a failover.
Obr. 1: Typický deployment Tomcatu v clusteru. Jednotlivé uzly mezi sebou provádí replikaci HTTP session, předřazený Apache web server se stará o load balancing a failover.


V čem jsou lepší jiné servery?

Přímému srovnání Java aplikačních serverů se věnoval můj předchozí článek v IT Systems 4/2015. Tato kapitola má za cíl zopakovat aspekty, které považuji za nejdůležitější.

JBoss / Wildfly

JBoss aplikační server plně implementuje Java EE specifikaci. Pokud uvažujeme aplikaci, která již je provozovaná pod Tomcat serverem, nevidím důvod přecházet na JBoss.

Glassfish

Podobně jako JBoss. Výraznou nevýhodou je, že Oracle už neposkytuje podporu pro Glassfish. Glassfish má sice slíbený další vývoj, ale už jen jako referenční implementace Java EE specifikace.

IBM WebSphere, Oracle WebLogic

Vidím dva opravdu pádné důvody pro nasazení WebSphere nebo WebLogic serverů. Prvním je podpora distribuovaných transakcí. Pokud vaše architektura distribuované transakce používá, transakční manažery ve WebSphere a WebLogic serverech nabízejí jejich robustní a prověřené implementace.

Druhým důvodem pro WebSphere nebo WebLogic je administrace serverů a zejména velkých clusterů. Komfortní administrátorské konzole, zabezpečení práce se servery a nástroje pro automatizaci vytváření běhových prostředí jsou vlastnosti, které Tomcat nemá.

IBM to vidí a nabízí Liberty Profile

I když existují dobré důvody pro použití WebSphere serveru v produkčním prostředí, existuje jenom málo důvodů trápit se s WebSphere serverem při vývoji. Snadnost instalace, HW nároky nebo rychlost startu a nasazování aplikací jsou několika z mnoha důvodů, proč se z pohledu vývojáře nemůže WebSphere s Tomcatem a jinými volně dostupnými servery měřit.

Server Liberty Profile se to snaží změnit. Jeho hlavní motivací je nabídnout vývojářům větší rychlost vývoje a produktivitu. S trochou nadsázky to chápu jako snahu IBM nabídnout vývojářům takový vlastní Tomcat.

Používanost serverů

Kde se vzal sebevědomý nadpis článku, který tvrdí, že Tomcat vládne všem? Jak jsou na tom servery s používaností v reálném světě? Sledováním používanosti aplikačních serverů se dlouhodobě zabývá firma ZeroTurnaround stojící za nástrojem JRebel. Otázka na používaný aplikační server se objevila v jejich průzkumech z let 2012 a 2014. V obou případech byl mezi respondenty ankety Tomcat vybrán nejpoužívanějším serverem.

Profinit, Tomcat

Květen 2012 – Developer Productivity Report: Tomcat (59%), JBoss (28%), Jetty (27%), WebLogic (14%), Glassfish (11%), WebSphere (10%)

Květen 2014 – Java Tools and Technologies: Tomcat (50%), JBoss (16%), Jetty (12%), Glassfish (7.5%), WebLogic (6%), WebSphere (4%)

Anketa se dále snažila rozklíčovat, jestli je Tomcat používaný pouze při vývoji nebo i v produkčním prostředí. Na otázku, jestli používají stejný aplikační server v produkci i při vývoji, odpovědělo 81% respondentů, že ano.

Zajímavý pohled nabízí i počty otázek evidovaných na webu StackOverflow, který je obecně považovaný za nejlepší volně dostupnou znalostní databázi pro programátory. Různé servery mají svoje vlastní komunity, kde se uživatelé radí o problémech, ale obrovský počet otázek na Tomcat dokládá jeho velkou používanost.

Server Počet otázek k datu 19. 4. 2015 (procento zodpovězených)
Tomcat 23051 (63 %)
JBoss 9538 (57 %)
Glassfish 5667 (60 %)
Jetty 4093 (65 %)
WebSphere 3693 (63 %)
WebLogic 3543 (55 %)


Shrnutí

Cílem tohoto článku nebylo přesvědčit, že Tomcat je ve všech ohledech jednoznačně nejlepší Java aplikační server, ale ukázat, že pro mnohé systémy je správnou a stejně dobrou volbou jako řešení, ať už volně dostupná nebo komerční. Myslím, že vnímání Tomcatu se dávno posunulo z pozice alternativy na plnohodnotnou variantu.

Ani jednou jsem nezmínil faktor ceny za licenci. Dříve se často argumentovalo tím, že Tomcat je dobrý, protože je zadarmo. Raději mám formulaci, že Tomcat je dobrý, i když je zadarmo. Považuji ho za kvalitní řešení bez ohledu na cenu.

Nesnažím se argumentovat ve prospěch opouštění jiných aplikačních serverů v prostředích, kde dobře fungují. Každý nový projekt, který spíše než na Java EE specifikaci staví na Spring frameworku, by ale měl vývoj a nasazení pod Tomcatem zvážit.

Tomáš Piňos, Profinit Tomáš Piňos
Autor článku působí ve společností Profinit jako specialista na oblast bankovních aplikací a Java portálů.
Chcete získat časopis IT Systems s tímto a mnoha dalšími články z oblasti informačních systémů a řízení podnikové informatiky? Objednejte si předplatné nebo konkrétní vydání časopisu IT Systems z našeho archivu.


Inzerce

GPU servery jako klíč k rychlejší analýze a práci s daty

vshostingEfektivita a výkonnost IT infrastruktury patří k zásadním faktorům ovlivňujícím chod moderních firem. V situacích, kdy běžné servery nedostačují, přichází na řadu GPU servery, které díky své architektuře umožňují rychlejší zpracování paralelních úloh. Od analýz rozsáhlých datových sad přes simulace až po náročné vizualizační projekty – GPU servery nabízejí řešení pro nejrůznější firemní aplikace.