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.
Je Tomcat dobrý aplikační server?
Java aplikační server implementuje Java EE specifikaci nebo její část.
Tomcat není Java aplikační server…
Ve světle definice Java aplikačního serveru nejde o mýtus, ale o formálně správnou výhradu. Tomcat skutečně neimplementuje Java EE specifikaci, ani její část zvanou web profil (existuje od verze Java EE 6). Není to 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 je dobrý aplikační server?
- 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í.
Jednotlivé aspekty se pokusím rozebrat.
Technologie – 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.
Mýtus – Standard je nade vše…
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í.
Java 8 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.
Produktivita, dokumentace, reference
Start Tomcatu i nasazování aplikací je velmi rychlé. Certifikované aplikační servery se většinou 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 Profinitu 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 aMuleSoft 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.
Škálovatelnost
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.
Mýtus – Opravdu velký web nemůže běžet pod Tomcatem…
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. Profinit dodával 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).
Následující diagram ukazuje, jak vypadá 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?
Srovnání aplikačním serverů se věnoval předchozí článek. Tato kapitola má za cíl zopakovat aspekty, které považuji za nejdůležitější.
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.
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 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í – 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? Jak jsou na tom servery s používaností v reálném světě?
Průzkumy ZeroTurnaround
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.
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.
StackOverflow
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.
Počty otázek k datu 19. 4. 2015:
Server | Počet otázek (procento zodpovězených) |
Tomcat | 23051 (63 %) |
JBoss | 9538 (57 %) |
Glassfish | 5667 (60 %) |
Jetty | 4093 (65 %) |
WebSphere | 3693 (63 %) |
WebLogic | 3543 (55 %) |
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.
Cílem č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.