EGY NAGYBÓL HÚSZ KISEBB
JAVA EE ALKALMAZÁSÉPÍTÉS 2015-BEN - ESETTANULMÁNY
KÁLMÁN ANDRÁS, KÁSA KÁROLY PRECOGNOX INFORMATIKAI KFT, 2015. WWW.PRECOGNOX.COM
TARTALOM • Monolit és több applikációra bontott alkalmazások előnyei és hátrányai • Monolit alkalmazásunknál használt technológiák • Több alkalmazásra elosztott megvalósításnál használt technológiák
• Eszközök amiket a megnövekedő összetettség miatt kell használni • Egy JAX-RS implementáció példa
MONOLIT ALKALMAZÁS Kisebb alkalmazásnál - Monolit előnyök: • könnyebb deployment
• Egyszerűbb architektúra • Jól átlátható fejlesztési időben a team-nek Nagyobb funkcióhalmaznál - Monolit hátrány
• Vertikálisan kell skálázni a fejlesztői, teszt és éles gépek erőforrásait (elsősorban RAM) • Megnövekedő deployment idő -> belassuló fejlesztés • Egy funkció hibája a teljes alkalmazást és a többi team tagot is visszafogja • Apró módosítás miatt (pl. szöveg resource változás) is teljes újratelepítés
TÖBB ALKALMAZÁS ([MICRO]SERVICE) EGYÜTTMŰKÖDÉSE Előnyök: • Könnyebb fejlesztés, mert átlátható és gyorsan módosítható, kisebb modulokon dolgozunk • Tiszta, jól definiált funkcionális határvonalakat könnyebb betartatni
• Általános szolgáltatás többször felhasználható • Gyorsabb deployment ami nem akadályozza feltétlenül a teljes működést
Hátrányok: • Összetettséget visz át az architektúrára • Bonyolult release folyamat és verziózás
• Figyelni kell az API-k verzió kompatibilitására • Nehezebb tesztkörnyezetet felállítani (lokálisan és szerveren is)
• Sok adminisztráció a Git-ben és JIRA-ban • Bonyolultabb konfiguráció menedzsment és service discovery szükséges
MONOLIT VÁLTOZATUNK FŐ MEGOLDÁSAI 1. Egy nagy ANT build script
2.
Jenkins készített EAR-t és ezt tettük Jboss 6-ba
3. Homogén fejlesztőkörnyezet Vagrant segítségével 4. Infrastruktúra automatizálás és deployment Chef alkalmazásával
5. Teljes kiesés a frissítés idejére. Hosszú lefutású folyamatok miatt előtte fél óráig is blokkoltunk bizonyos funkciókat 6. Heterogén fejlesztői tudásszint miatt a funkcionális határvonalakat gyakran megsértették. Nagy refaktorálásokat kellett beiktatni, amit nehéz elfogadtatni a megrendelővel
TÖBB ALKALMAZÁSRA ELOSZTOTT MEGOLDÁSUNK 1. Gradle build (convention over configuration előnye ANT-hoz képest) 2. Jenkins Docker image-eket készít 3. A neki legmegfelelőbb („legvékonyabb”) alkalmazásszerver minden app-nak (Dropwizard, Jetty, Tomcat, Wildfly) 4. Chef szerepe visszaszorult a Docker alkalmazásával 5. Ritka a fő funkció elérhetetlenné válása, mert a háttér szolgáltatások gyorsan cserélhetők, szinte kiesés nélkül 6. Kis fejlesztői csapatok felelnek az egyes alkalmazásokért, amik méretük miatt így konzisztensebb minőségben fejlődnek
ÚJ ÉS RÉGI VERZIÓ TECHNOLÓGIAI ÖSSZEHASONLÍTÁS Monolit • MVC - JSF + J2EE Control és Service rétegek + JPA perzisztencia • 4 nagyobb alkalmazás (SSO, custom File server, custom CRM és a fő alkalmazás) • Külső alkalmazásoknak WS alapú API • ElasticSearch log tárolás saját Logback appender-rel és Kibana lekérdezőfelület • Nagios monitoring (dőlt betűvel azokat jelöltem amiket nem alkalmazunk az új változatban)
ÚJ ÉS RÉGI VERZIÓ TECHNOLÓGIAI ÖSSZEHASONLÍTÁS Több alkalmazásra elosztott • AngularJS + TypeScript frontend, RESTful backends • 20 alkalmazás, amiből csak 2 stateful • Message alapú alkalmazásközi kommunikáció RabbitMQ-val
• 7 alkalmazás publikus a többi API csak belső használatra • Fluentd? alapú log centralizálás
• DataDog monitoring as a Service
ÖSSZETETTSÉG NÖVEKEDÉS AZ ÚJ ARCHITEKTÚRÁN • JWT alapú autentikáció és autorizáció a stateless alkalmazásoknál • Minden alkalmazáshoz saját Docker container-ek tartalmazzák az alkalmazás szervert és benne az app-ot • Consul és Registrator alapú service discovery • NGINX proxy
• Correlation id továbbadása szükséges a hívásláncon (debug-hoz) • Fault tolerance megvalósítás és traffic monitoring kell - Hystrix
HYSTRIX „Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.”
JAX-RS INTERFACE
REST SERVICE IMPLEMENTATION
HYSTRIX WRAPPED CLIENT COMMAND
CLIENT
KÁSA KÁROLY Precognox fejlesztési vezető
[email protected]
Kereső világ http://kereses.blog.hu - A blog about big data, search and text mining
Hungarian Natural Language Processing Meetup http://www.meetup.com/Hungarian-nlp/