JHipster

 
Blog
03.03.2020

"V tomto článku vám predstavíme ako sme postupovali pri výbere technológií pre náš nový projekt."

Vývoj SW technológií beží vysokým tempom a stále sa zrýchľuje. Pravidelne sa musíme vzdelávať, sledovať vývoj, nové trendy a vedieť vyhodnotiť, ktoré z nich vieme efektívne využiť na zjednodušenie a skvalitnenie vývoja našich aplikácií. 

Vzdelávať sa v nových technológiách je ako investícia, ktorá nás dnes stojí čas a energiu, ale ktorá nám ušetrí túto investíciu v budúcnosti. Pretože úspešné technológie vieme nasadiť na viacerých ďalších projektoch. Pri každom ďalšom nasadení sa ich požitie stáva jednoduchším a rýchlejším na základe získaných skúseností.

Dôležité je rozpoznať, do ktorých sa nám oplatí investovať práve dnes a pri ktorých radšej ešte počkať.

Našim cieľom je pracovať čo najefektívnejšie, riešiť úlohy čo najjednoduchšie, nevymýšľať to, čo je už vymyslené, využívať moderné technológie tam, kde nám to zjednoduší a skvalitní prácu.

Snažíme sa využívať tie najlepšie open-source riešenia, radšej ako kódovať vlastné moduly.

Predovšetkým, pri začínajúcom projekte, treba zvážiť, aké technológie využijeme. Pri realizácii riešenia sme urobili analýzu možností výberu. Používali sme Java/Spring backend a React/JavaScript frontend a Tomcat aplikačný server. 

Nové technológie, ktoré sme zvažovali boli:
•    cloud, microservices či klasická monolitická aplikácia
•    kontajnery, serverless
platformy
•    synchrónne ci asynchrónne API
•    REST API / async. messaging Kafka
•    Java Spring Boot či Java EE či Node.Js
•    React či Vue.Js či Angular 
•    SQL či NoSql
•    fulltext search Elasticsearch či Hibernate Search
•    bussiness intelligence: data reporting engine Jasper Report, Eclipse BIRT

Náš projekt slúži pre monitorovanie a vyhodnocovanie povodní a s tým spojených rizík. Celý systém sa prirodzene dal rozdeliť na niekoľko ucelených komponentov s vlastným API rozhraním. Dekompozícia systému nás teda nabádala k použitiu microservices pre jednotlivé komponenty. 

Najskôr sme sa rozhodli, že na backende využijeme Spring Boot

Alternatívny kandidát Node.js má síce silne rastúci trend popularity. Na druhej strane Spring Boot má dlhoročnú veľmi úspešnú históriu, množstvo nasadení na jednoduchších i komplexných riešeniach. Pred Node.Js má náskok a stále sa dynamicky rozvíja. 

V Springu boli implementované funkcionality, ktoré boli dovtedy výhodou Node.Js ako: 
asynchrónny stack, výkonnosť, škálovateľnosť, funkcionálne programovanie. 

Spring má aj first class support pre moderný programovací jazyk Kotlin, ktorý v posledných rokoch silne rastie na popularite.

Zvážili sme aj použitie Spring Boot alebo štandardnú Java EE. Spring tak, ako aj v minulosti určuje trend v Java svete a s uplatnením nových technológii je výrazne vpredu pred štandardizáciou JavaEE, hlavne v oblasti cloud technológií, mikroservisov. 

Spring umožňuje ETL (extract/transform/load) aplikáciám s použitím množstva inteligentných zariadení IoT (Internet Of Things) online zber dát z mnohých zdrojov, ich paralelné spracovanie v pipelines, transformáciu, analýzu (data analytics) a uloženie. 
História i aktuálny vývoj Spring nám dáva istotu do budúcnosti.

Ďalšie rozhodnutie bolo, že zostaneme pri synchrónnych REST API, lebo naše aplikácie by nemali zásadný benefit z asynchrónneho spracovania a tým spojenej výhody efektívneho spracovania veľkého počtu súčasných requestov.

Hľadali sme aj možnosti generovania kódu, aby sme ušetrili čas na vytvorenie kostry aplikácie a sústredili sa na kódovanie biznis logiky. 

Vyskúšali sme projekt JHipster, ktorý generuje kostru aplikácie z dátového modelu a podporuje rôzne technológie ako:
•    Monolitická aplikácia/mikroservices
•    React/Angular
•    rôzne SQL i NoSql Databázy
•    Caching 
•    Elasticsearch
•    Kontajnerizáciu

JHipster nám umožnil rýchlo vytvoriť niekoľko prototypov a porovnávať ich navzájom. 
To nám uľahčilo rozhodnutie pre architektúru s komponentami:

Microservices: 
•    moduly, ktoré vykonávajú samotnú biznis logiku aplikácie
•    majú REST API
•    sú stateless a škálovateľné a podľa veľkosti záťaže môžu bežať viaceré inštancie

 

Config & registry server: slúži pre mikroservisy a API gateway:
•    ako registračný server, kde sa po štarte registrujú
•    pri štarte si stiahnu svoje konfiguračné údaje
•    monitoruje ich stav 
•    poskytuje údaje pre monitorovací dashboard v UI1
•    kvôli škálovateľnosti pre každý stateless mikroservis registruje všetky práve bežiace inštancie


 API Gateway: 
•    ma Proxy server -  smeruje HTTP (REST Api) requesty na mikroservisy
•    ma Load Balancer -  zabezpečuje ochranu proti preťaženiu, ak ma daný mikroservis registrovaných viacero inštancií - smeruje requesty striedavo na všetky inštancie 
•    User Access - zabezpečuje autentifikáciu užívateľov na Identity Provider-a
•    poskytuje OpenApi dokumentáciu k poskytovaným REST API
•    obsahuje React Web aplikáciu s biznis logikou 

 

ELK stack - Elasticsearch, Logstash, Kibana
•    fulltext search pre biznis dáta mikroservisov + ich uloženie v rýchlo dostupnej forme
•    pre logy mikroservisov:
•    centrálne uloženie
•    rýchle vyhľadávanie s rôznymi filtrami
•    údaje pre Dashboard s grafmi a štatistikami v UI3

 

Identity Provider: zabezpečuje
•    centrálnu správu užívateľov
•    centrálnu autentifikáciu pre jednotlivé komponenty
•    Identity Federation
•    Single Sign On SSO

 

Použili sme menovite tieto technológie:
•    Spring Boot backend
•    React frontend
     Responsive Web Design s Twitter Bootstrap
•    Rest API s OpenApi dokumentáciou
•    Spring Security s Oauth2 / OIDC a RedHat Keycloak server, SSO Single Sign On
•    stateless microservices
•    service managment/discovery
s Netflix Eureka
•    Rest API Gateway s Netflix Zuul routing
•    load balancer s Ribbon
•    service reliability/resilience s Histrix circuit breaker
•    metrics pre Prometeus, na monitorovanie/diagnostiku prevádzkových stavov aplikácie
•    centrálny Config server pre konfiguráciu všetkých komponentov
•    centrálne logovanie s ELK stack (Elasticsearch, Logstash, Kibana)
•    Docker kontajnery
•    Elasticsearch fulltext vyhľadávanie (pre aplikačné dáta aj log)
•    distribuovaná cache Hazelcast
•    Liquibase pre automatizáciu inicializácie / upgrade SQL databáz
•    monitoring Dashboards pre konfiguráciu, prevádzkové stavy, sledovane metriky, logy. 

 

Toto riešenie nám umožňuje nasadenie na vlastné servery a do rôznych cloudov ako AWS, Azure, Google GWS, Kubernetes, ...

Microservice nám poskytujú voľnosť využitia odlišnej DB podľa typu dát a potrieb servisu, napr. s jednou microservice SQL s inou NoSql, s ďalšou GraphQL,...

Postupne sme tieto JHipster/Spring technológie využili na 3 rôznych projektoch a máme rozpracované ďalšie.

Rozhodli sme sa aj urobiť upgrade bežiaceho projektu Webgis (mapové služby) na JHipster stack. Potrebovali sme vylepšiť/modernizovať Javascript web interface pre administráciu a konfiguráciu, preto sme s pomocou JHipster vytvorili novy frontend v React-e. Migrovali sme aj backend API na Jhipster/SpringBoot stack. Tým sme unifikovali kód staršieho projektu s novými, čo nám umožní jednoduchšiu údržbu, rozširovanie funkcionality, kódu a upgrade. 

 

V blízkej budúcnosti budeme používať tieto technológie aj na ďalších projektoch. 
Vždy budeme priebežne sledovať a vyhodnocovať aj použitie ďalších technológií, ktoré nám pomôžu robiť vývoj SW jednoduchšie a kvalitnejšie.

Ondrej, Senior Software Developer 

Ďalšie novinky