SlideShare a Scribd company logo
1 of 30
Download to read offline
Vert.x – asinkroni,
skalabilni i poliglotni
framework nove generacije

Mihovil Rister
Razvojni inženjer
@ Pet Minuta d.o.o.
Sadržaj predavanja
•
•
•
•
•
•
•
•

Vert.x – što je to?
Karakteristike
Osnovne komponente
Arhitektura
Uporaba
Usporedba
Najbolje prakse
Zaključak
Vert.x – što je to ?
•
•
•
•
•
•
•

Zapravo i nije framework, više kao platforma na JVM
Prva verzija u svibnju 2012. g. (Node.js, 2009. g.)
Inicijalno projekt zaposlenika VMwarea
8. 2013 - Eclipse Foundation (Incubating)
JDK 1.7 +
Jedan od najzanimljivijih projekata na GitHubu
Skalabilan, poliglotan, modularan, asinkron,
jednostavan
Vert.x – tko je to ?

Tim Fox
http://vertx.io/
Vert.x – što je to ?
• Koji problem rješava?
• C10K !
• „It's time for web servers to handle ten thousand
clients simultaneously, don't you think? After all, the
web is a big place now.” Dan Kegel (2003.)
• Upravljanje i optimiranje resursima pri velikom broju
simultanih korisnika (konekcija).
• Thread po konekciji? Blokirajuće operacije?
• Vert.x - asnikrona i event driven arhitektura
Vert.x – Karakteristike
• Poliglotan (JS, Java, Python, Groovy, Ruby – Scala i
Clojure dolaze)
• Asinkron (zapravo event driven)
• Modularan (koristi module i može biti modul)
• Jednostavan (bez puno konfiguracije)
• Skalabilan (koristi sabirnicu za komunikaciju)
• Jednostavan model višenitnosti (multithreading,
Reactor pattern)
• Embedabilan i koristi sve prednosti JVM-a
Vert.x – Osnovne komponente
• Vertica (Verticle)

• Vert.x instanca
• (Distribuirana) sabirnica događaja (Event bus)
• Modul
Vert.x – Osnovne komponente - Vertica
•
•
•
•

Osnovna jedinica upravljanja (deploymenta)
Kod koji Vert.x izvršava
Izolirani ClassLoader
Ne mogu globalno dijeliti stanje (static, globalne
varijable,...)
• 2 tipa vertica:
1. Logička vertica - single threading – non blocking code
2. Radna vertica (Worker verticle) – može korisiti multithreading i
kod koji blokira (nije asinkron)
Vert.x – Vertica u Javi
import org.vertx.java.core.Handler;
import org.vertx.java.core.http.HttpServerRequest;
import org.vertx.java.platform.Verticle;
public class Server extends Verticle {
public void start() {
vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() {
public void handle(HttpServerRequest req) {
String file = req.path().equals("/") ? "index.html" : req.path();
req.response().sendFile("webroot/" + file);
}
}).listen(8080);
}
}
$vertx run Server.java
Vert.x – Vertica u Javi 8 + Lambda
import org.vertx.java.core.http.HttpServerRequest;
import org.vertx.java.deploy.Verticle;
public class Server extends Verticle {
@Override
public void start() throws Exception {
vertx.createHttpServer().requestHandler((HttpServerRequest req) -> {
String file = req.path.equals("/") ? "index.html" : req.path;
req.response().sendFile(file);
}).listen(8086);
}
}
$vertx run Server.java
Vert.x – Osnovne komponente - Vert.x instanca
• Jedna ili više vertica
• Radi u vlastitoj JVM instanci
• Više instanci na istom hostu (više hostova koji
komuniciraju putem distribuiranog Event busa)
• Garantirano: Vert.x instancu izvršava samo jedan
thread (singlethreading programiranje)
• Održava set threadova za:
– Event (Run) Loop (1 po CPU jezgri)
– thread pool za izvršavanje radnih vertica
Vert.x – Osnovne komponente -Vert.x instanca
Event Loops
Quad Core CPU

$vertx run Server.java –instances 4
Vert.x – Osnovne komponente – Event Bus
•
•
•
•
•
•
•

Živčani sustav Vert.x-a
Komunikacija između vertica (među procesna)
Zbilja jednostavan API
Pub/Sub, Req/Resp, PtoP načini prosljeđivanja poruka
JSON poruke za strukturirane podatke
Distribuirani: spaja Vert.x JVM instance
Do klijentske strane (npr. Browser + SocksJS ili Web
Socket)
• Nije perzistentan (in memory)
Vert.x – Osnovne komponente – Event Bus
import org.vertx.java.core.Handler;
import org.vertx.java.core.eventbus.EventBus;
...
Handler<Message<String>> myHandler = new Handler<Message<String>>() {
public void handle(Message<String> message) {
System.out.println("Primih poruku: " + message.body);
// izvrši neophodne radnje
message.reply(„Odgovor");
}
};
//----------------------------------------------------------------------------------------------------------------eb.registerHandler("test.address", myHandler);
eb.send("test.address", "Ovo je poruka", new Handler<Message<String>>() {
public void handle(Message<String> message) {
System.out.println("Primih odgovor: " + message.body);
}
});
Vert.x – Osnovne komponente - Modul
• Mod – upakirana Vert.x aplikacija
• Module koriste druge aplikacije ili drugi Vert.x sustavi

• Idealno za distribuciju putem Mavena (Nexus)
• Vert.x javni registar modula - http://modulereg.vertx.io/

• Busmod – modul koji komunicira preko EventBusa s
verticama putem JSON poruka.
• Moduli su preferiran način korištenja i embedanja Vert.x
aplikacija
Vert.x – Osnovne komponente - Modul
• Primjeri:
– mod-mongo-peristor, mod-redis, mod-jdbc-persistor, modpostresql,...
– mod-mailer, mod-session-manager, mod-auth-mgr
– mod-guice, mod-spring-appcontext
– mod-kafka, mod-jersey, mod-socketio
– mod-zip, mod-unzip, mod-ampq

• Jezici koje vert.x podržava su također moduli:
– mod-lang-rhino, mod-lang-groovy, mod-lang-jython, mod-langjruby, mod-lang-scala, mod-lang-coljure, ...
Vert.x – Arhitektura
Vert.x – Arhitektura (distribuirana sab.)
Vert.x – Arhitektura
• Dijeljenje podataka između vertica (Shared state):

• Vertice mogu djeliti nepromjenjive podatke (Immutabe)
• Sesija po Vert.x instanci
• Vert.x daje pristup Shared Map i Shared Set

• Samo jednostavni tipovi: brojevi, boolean, String i Buffer
• Bitno za npr. Cache, sinkronizacijsku logiku, otvorene
konekcije i sl.
Vert.x – Arhitektura
• Primjer dijeljene mape
ConcurrentMap<String, Integer> map = vertx.sharedData().getMap("app.my-data");
map.put("key1", 123);
map.putIfAbsent("key1", 123);
map.replace("key1", 123, 124);
map.get("key1");
map.remove("key1");
Vert.x – Arhitektura
• Primjer dijeljenog seta
Set<String> set = vertx.sharedData().getSet("app.may-set");
set.add("Mihovil");
set.contains("Mihovil");
vertx.removeSet("app.may-set");
Vert.x – Arhitektura
• Concurrency model:
–
–
–
–
–

Multi-reactor pattern
Synchronised, volatile, locking
Single threaded kod po vertici
Hibridni multithreading (logička i worker vertica)
Izolirani ClassLoader i jedan thread/event loop za egzekuciju

• Asinkroni model programiranja:
– Event handleri
– Asinkroni API za filesystem i streamove
– Izmjena poruka putem sabirnice
Vert.x – Arhitektura
Vert.x interno koristi ove open source projekte:
• Netty 4.0 -> network IO
• JRuby -> Ruby engine
• Jython -> Python engine
• Mozilla Rhino -> JavaScript engine
• Hazelcast -> upravljanje grupama i klasterom
• Jackson -> za JSON
• ...
Vert.x – Uporaba
• Maven:
<dependency>
<dependency>
<groupId>io.vertx</groupId>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<artifactId>mod-mongo-persistor</artifactId>
<version>2.0.2-final</version>
<version>2.0.0-final</version>
</dependency>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-platform</artifactId>
<version>2.0.2-final</version>
</dependency>
mvn archetype:generate -Dfilter=io.vertx: -DgroupId=com.mycompany -DartifactId=my-module
-Dversion=0.1
Vert.x – Usporedba
Vert.x

Node.js

Polyglot

JavaScript

Lakoća skaliranja i klasteriranja

Nije tako lako skalirati

Skromniji broj modula

Velik broj modula

Dobra dokumentacija

Dobra dokumentacija

Bolje perfromanse

Ne tako dobre performanse (u odnosu na
Java vert.x)

Malo primjera uporabe

Puno primjera uporabe

Mali community

Velik community

Lakše uključivanje u Java projekte i
iskorištavanje Java ekosustava

Nije često korišten za enterprise sustave
Vert.x – Usporedba
• Programerska perspektiva :
– Dobre stvari:
•
•
•
•
•

JAVA !
Jednostavan i neopširan API
Timovi za razvoj u raznim jezicima
Zero conf. debugiranje i testiranje (podrška za integracijske testove)
Container API (programsko deplojanje i undeplojanje te logiranje)

– Ne tako dobre:
• Dosta anonimnih unutarnjih klasa (Lambdas to the rescue!)
• Nativne extenzije na drugim platformama na koje su ljudi navikli
• Nezgodno debugiranje busmoda (stack trace završava kod izmjene
poruka)
• Nema (out of the box) MVC podršku
• JDK7+ pa nema Androida
Vert.x – Najbolje prakse
•
•
•
•
•
•
•
•
•

Don’t block the event loop!
Java za razvoj (najbolje performanse)
Dobar alat za određene vrste poslova, ne sve.
Poštedno korištenje worker vertica.
Koristiti asinkrone java biblioteke (ako je moguće)
JCA adapter za integraciju s J2EE
Koristiti i dijeliti module (javni registar)
Autodeploy kod razvoja, no možda ne i u produkciji 
Pratiti mrežni promet na hostu (tuniranje performansi)
Vert.x – Nabolje preporuke
• Koristiti za:
– „Real time” aplikacije (gdje biste i Node.js)
– Integraciju sa sustavima baziranim na messaging arhitekturi
(AMPQ, ZeroMQ, ...)
– Dashboardi i vezani API (big data)
– Message brokeri
– Push sustavi (push notifikacije za mobile)
– Veliki, particionirani cache sustavi
– Nadgledanje i upravljanje jobovima (Quartz, Jenkins, Hadoop)
– RPC sustavi, ad-hoc upiti nad velikim datasetovima
– Streaming podataka, audio-video, on the fly transformacije pod.
Vert.x – Zaključak
• Open source governance je bitan !
• Projekt je još mlad i u razvitku
• Nedostaje pravih, kompleksnih primjera
primjene u produkciji
• I u Java svijet dolaze nove vrste platforma, za
moderne izazove
• Poliglotnost: izrada kompleksnih modernih
enterprise sustava
Kontakt
Mihovil Rister

gsm

+385 91 5865 907

Razvojni inženjer,

mail

mihovil.rister@fiveminutes.eu

Pet Minuta d.o.o.

skype

mihovil.rister

web

http://www.fiveminutes.eu

More Related Content

What's hot

What's hot (11)

JavaCro'15 - Java parallelization - Zlatko Sirotić
JavaCro'15 - Java parallelization - Zlatko SirotićJavaCro'15 - Java parallelization - Zlatko Sirotić
JavaCro'15 - Java parallelization - Zlatko Sirotić
 
JavaCro'15 - Microservice architecture - Nenad Pečanac
JavaCro'15 - Microservice architecture - Nenad PečanacJavaCro'15 - Microservice architecture - Nenad Pečanac
JavaCro'15 - Microservice architecture - Nenad Pečanac
 
HUJAK skupština 2014
HUJAK skupština 2014HUJAK skupština 2014
HUJAK skupština 2014
 
JavaCro14: Pakiranje i instalacija JEE rješenja
JavaCro14: Pakiranje i instalacija JEE rješenjaJavaCro14: Pakiranje i instalacija JEE rješenja
JavaCro14: Pakiranje i instalacija JEE rješenja
 
JavaCro'14 - JavaScript single-page applications i JEE, can they fit together...
JavaCro'14 - JavaScript single-page applications i JEE, can they fit together...JavaCro'14 - JavaScript single-page applications i JEE, can they fit together...
JavaCro'14 - JavaScript single-page applications i JEE, can they fit together...
 
JavaCro'15 - API as a new architecture - Miroslav Rešetar
JavaCro'15 - API as a new architecture - Miroslav RešetarJavaCro'15 - API as a new architecture - Miroslav Rešetar
JavaCro'15 - API as a new architecture - Miroslav Rešetar
 
JavaCro'15 - Enterprise service bus - Juraj Ćutić
JavaCro'15 - Enterprise service bus - Juraj ĆutićJavaCro'15 - Enterprise service bus - Juraj Ćutić
JavaCro'15 - Enterprise service bus - Juraj Ćutić
 
JavaCro'14 - Auditing of user activity through NoSQL database – Kristijan Duv...
JavaCro'14 - Auditing of user activity through NoSQL database – Kristijan Duv...JavaCro'14 - Auditing of user activity through NoSQL database – Kristijan Duv...
JavaCro'14 - Auditing of user activity through NoSQL database – Kristijan Duv...
 
JavaCro'14 - Log as basis for distributed systems – Vjeran Marčinko
JavaCro'14 - Log as basis for distributed systems – Vjeran MarčinkoJavaCro'14 - Log as basis for distributed systems – Vjeran Marčinko
JavaCro'14 - Log as basis for distributed systems – Vjeran Marčinko
 
JavaCro'15 - Internet of things with RPi and Java - Matija Novak, Dragutin Ke...
JavaCro'15 - Internet of things with RPi and Java - Matija Novak, Dragutin Ke...JavaCro'15 - Internet of things with RPi and Java - Matija Novak, Dragutin Ke...
JavaCro'15 - Internet of things with RPi and Java - Matija Novak, Dragutin Ke...
 
JavaCro'15 - BOOTylicious Spring - Karlo Novak
JavaCro'15 - BOOTylicious Spring - Karlo NovakJavaCro'15 - BOOTylicious Spring - Karlo Novak
JavaCro'15 - BOOTylicious Spring - Karlo Novak
 

Viewers also liked

Javantura Zagreb 2014 - WildFly 8 - Tomaž Cerar
Javantura Zagreb 2014 - WildFly 8 - Tomaž CerarJavantura Zagreb 2014 - WildFly 8 - Tomaž Cerar
Javantura Zagreb 2014 - WildFly 8 - Tomaž Cerar
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 

Viewers also liked (8)

Javantura Zagreb 2014 - Google Dart - Željko Kunica
Javantura Zagreb 2014 - Google Dart - Željko KunicaJavantura Zagreb 2014 - Google Dart - Željko Kunica
Javantura Zagreb 2014 - Google Dart - Željko Kunica
 
Javantura Zagreb 2014 - WildFly 8 - Tomaž Cerar
Javantura Zagreb 2014 - WildFly 8 - Tomaž CerarJavantura Zagreb 2014 - WildFly 8 - Tomaž Cerar
Javantura Zagreb 2014 - WildFly 8 - Tomaž Cerar
 
Javantura Zagreb 2014 - universAAL - Andrej Grgurić
Javantura Zagreb 2014 - universAAL - Andrej GrgurićJavantura Zagreb 2014 - universAAL - Andrej Grgurić
Javantura Zagreb 2014 - universAAL - Andrej Grgurić
 
Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar
Javantura Zagreb 2014 - Nashorn - Miroslav RešetarJavantura Zagreb 2014 - Nashorn - Miroslav Rešetar
Javantura Zagreb 2014 - Nashorn - Miroslav Rešetar
 
Javantura Zagreb 2014 - Groovy-SQL - Dinko Srkoč
Javantura Zagreb 2014 - Groovy-SQL - Dinko SrkočJavantura Zagreb 2014 - Groovy-SQL - Dinko Srkoč
Javantura Zagreb 2014 - Groovy-SQL - Dinko Srkoč
 
Javantura Zagreb 2014 - Sencha Touch - Denis Jajčević
Javantura Zagreb 2014 - Sencha Touch - Denis JajčevićJavantura Zagreb 2014 - Sencha Touch - Denis Jajčević
Javantura Zagreb 2014 - Sencha Touch - Denis Jajčević
 
Javantura Zagreb 2014 - Vaadin - Peter Lehto
Javantura Zagreb 2014 - Vaadin - Peter LehtoJavantura Zagreb 2014 - Vaadin - Peter Lehto
Javantura Zagreb 2014 - Vaadin - Peter Lehto
 
Nemanja Čedomirović - PHP Srbija
Nemanja Čedomirović - PHP SrbijaNemanja Čedomirović - PHP Srbija
Nemanja Čedomirović - PHP Srbija
 

Similar to Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister

Mihovil Rister nerelacijaka sadašnjost, budućnost i primjene rev 1.4
Mihovil Rister  nerelacijaka sadašnjost, budućnost i primjene rev 1.4Mihovil Rister  nerelacijaka sadašnjost, budućnost i primjene rev 1.4
Mihovil Rister nerelacijaka sadašnjost, budućnost i primjene rev 1.4
Mihovil Rister
 
WebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacijeWebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacije
Matija Šmalcelj
 
Seminarv2 0 090609060123 Phpapp01
Seminarv2 0 090609060123 Phpapp01Seminarv2 0 090609060123 Phpapp01
Seminarv2 0 090609060123 Phpapp01
google
 
Web tehnologije u desktop developmentu
Web tehnologije u desktop developmentuWeb tehnologije u desktop developmentu
Web tehnologije u desktop developmentu
Darko Kukovec
 

Similar to Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister (20)

eZ publish intro
eZ publish introeZ publish intro
eZ publish intro
 
eZ Publish intro
eZ Publish introeZ Publish intro
eZ Publish intro
 
Mihovil Rister nerelacijaka sadašnjost, budućnost i primjene rev 1.4
Mihovil Rister  nerelacijaka sadašnjost, budućnost i primjene rev 1.4Mihovil Rister  nerelacijaka sadašnjost, budućnost i primjene rev 1.4
Mihovil Rister nerelacijaka sadašnjost, budućnost i primjene rev 1.4
 
Zašto nam treba PaaS u Srcu?
Zašto nam treba PaaS u Srcu?Zašto nam treba PaaS u Srcu?
Zašto nam treba PaaS u Srcu?
 
WebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacijeWebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacije
 
Kako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloudKako pretvoriti server_sobu_u_cloud
Kako pretvoriti server_sobu_u_cloud
 
GraphQL & Laravel - Efikasni API servisi
GraphQL & Laravel - Efikasni API servisiGraphQL & Laravel - Efikasni API servisi
GraphQL & Laravel - Efikasni API servisi
 
Why Firebird - Fact for decision makers, in Bosnian
Why Firebird  - Fact for decision makers, in BosnianWhy Firebird  - Fact for decision makers, in Bosnian
Why Firebird - Fact for decision makers, in Bosnian
 
Uvod u aplikacije - Luka Mandić
Uvod u aplikacije - Luka MandićUvod u aplikacije - Luka Mandić
Uvod u aplikacije - Luka Mandić
 
REST API - iskustva iz prakse
REST API - iskustva iz prakseREST API - iskustva iz prakse
REST API - iskustva iz prakse
 
Seminarv2 0 090609060123 Phpapp01
Seminarv2 0 090609060123 Phpapp01Seminarv2 0 090609060123 Phpapp01
Seminarv2 0 090609060123 Phpapp01
 
WinDays 13 - Internet Explorer 10 - san koji je postao java
WinDays 13 - Internet Explorer 10 - san koji je postao javaWinDays 13 - Internet Explorer 10 - san koji je postao java
WinDays 13 - Internet Explorer 10 - san koji je postao java
 
Web tehnologije u desktop developmentu
Web tehnologije u desktop developmentuWeb tehnologije u desktop developmentu
Web tehnologije u desktop developmentu
 
MSNetwork 4 - Enterprise funkcionalnosti u malim tvrtkama sa Office 365
MSNetwork 4 - Enterprise funkcionalnosti u malim tvrtkama sa Office 365MSNetwork 4 - Enterprise funkcionalnosti u malim tvrtkama sa Office 365
MSNetwork 4 - Enterprise funkcionalnosti u malim tvrtkama sa Office 365
 
JavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija Kranjec
JavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija KranjecJavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija Kranjec
JavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija Kranjec
 
Gatling - oružje u redovima performansnog testiranja
Gatling - oružje u redovima performansnog testiranjaGatling - oružje u redovima performansnog testiranja
Gatling - oružje u redovima performansnog testiranja
 
Linq to Sql vs NHibernate
Linq to Sql vs NHibernateLinq to Sql vs NHibernate
Linq to Sql vs NHibernate
 
You bought a WordPress theme and now what?
You bought a WordPress theme and now what?You bought a WordPress theme and now what?
You bought a WordPress theme and now what?
 
Programski jezik java
Programski jezik javaProgramski jezik java
Programski jezik java
 
Programski jezik java
Programski jezik javaProgramski jezik java
Programski jezik java
 

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association

Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association
 

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association (20)

Java cro'21 the best tools for java developers in 2021 - hujak
Java cro'21   the best tools for java developers in 2021 - hujakJava cro'21   the best tools for java developers in 2021 - hujak
Java cro'21 the best tools for java developers in 2021 - hujak
 
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK KeynoteJavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
 
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan LozićJavantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
 
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
 
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
 
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
 
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander RadovanJavantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
 
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
 
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
 
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
 
Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...
 
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej VidakovićJavantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
 
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
 
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
 
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
 
Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...
 
Javantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela PetracJavantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela Petrac
 
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje RuhekJavantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
 
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
 
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario KusekJavantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
 

Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister

  • 1. Vert.x – asinkroni, skalabilni i poliglotni framework nove generacije Mihovil Rister Razvojni inženjer @ Pet Minuta d.o.o.
  • 2. Sadržaj predavanja • • • • • • • • Vert.x – što je to? Karakteristike Osnovne komponente Arhitektura Uporaba Usporedba Najbolje prakse Zaključak
  • 3. Vert.x – što je to ? • • • • • • • Zapravo i nije framework, više kao platforma na JVM Prva verzija u svibnju 2012. g. (Node.js, 2009. g.) Inicijalno projekt zaposlenika VMwarea 8. 2013 - Eclipse Foundation (Incubating) JDK 1.7 + Jedan od najzanimljivijih projekata na GitHubu Skalabilan, poliglotan, modularan, asinkron, jednostavan
  • 4. Vert.x – tko je to ? Tim Fox http://vertx.io/
  • 5. Vert.x – što je to ? • Koji problem rješava? • C10K ! • „It's time for web servers to handle ten thousand clients simultaneously, don't you think? After all, the web is a big place now.” Dan Kegel (2003.) • Upravljanje i optimiranje resursima pri velikom broju simultanih korisnika (konekcija). • Thread po konekciji? Blokirajuće operacije? • Vert.x - asnikrona i event driven arhitektura
  • 6. Vert.x – Karakteristike • Poliglotan (JS, Java, Python, Groovy, Ruby – Scala i Clojure dolaze) • Asinkron (zapravo event driven) • Modularan (koristi module i može biti modul) • Jednostavan (bez puno konfiguracije) • Skalabilan (koristi sabirnicu za komunikaciju) • Jednostavan model višenitnosti (multithreading, Reactor pattern) • Embedabilan i koristi sve prednosti JVM-a
  • 7. Vert.x – Osnovne komponente • Vertica (Verticle) • Vert.x instanca • (Distribuirana) sabirnica događaja (Event bus) • Modul
  • 8. Vert.x – Osnovne komponente - Vertica • • • • Osnovna jedinica upravljanja (deploymenta) Kod koji Vert.x izvršava Izolirani ClassLoader Ne mogu globalno dijeliti stanje (static, globalne varijable,...) • 2 tipa vertica: 1. Logička vertica - single threading – non blocking code 2. Radna vertica (Worker verticle) – može korisiti multithreading i kod koji blokira (nije asinkron)
  • 9. Vert.x – Vertica u Javi import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.platform.Verticle; public class Server extends Verticle { public void start() { vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { String file = req.path().equals("/") ? "index.html" : req.path(); req.response().sendFile("webroot/" + file); } }).listen(8080); } } $vertx run Server.java
  • 10. Vert.x – Vertica u Javi 8 + Lambda import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.deploy.Verticle; public class Server extends Verticle { @Override public void start() throws Exception { vertx.createHttpServer().requestHandler((HttpServerRequest req) -> { String file = req.path.equals("/") ? "index.html" : req.path; req.response().sendFile(file); }).listen(8086); } } $vertx run Server.java
  • 11. Vert.x – Osnovne komponente - Vert.x instanca • Jedna ili više vertica • Radi u vlastitoj JVM instanci • Više instanci na istom hostu (više hostova koji komuniciraju putem distribuiranog Event busa) • Garantirano: Vert.x instancu izvršava samo jedan thread (singlethreading programiranje) • Održava set threadova za: – Event (Run) Loop (1 po CPU jezgri) – thread pool za izvršavanje radnih vertica
  • 12. Vert.x – Osnovne komponente -Vert.x instanca Event Loops Quad Core CPU $vertx run Server.java –instances 4
  • 13. Vert.x – Osnovne komponente – Event Bus • • • • • • • Živčani sustav Vert.x-a Komunikacija između vertica (među procesna) Zbilja jednostavan API Pub/Sub, Req/Resp, PtoP načini prosljeđivanja poruka JSON poruke za strukturirane podatke Distribuirani: spaja Vert.x JVM instance Do klijentske strane (npr. Browser + SocksJS ili Web Socket) • Nije perzistentan (in memory)
  • 14. Vert.x – Osnovne komponente – Event Bus import org.vertx.java.core.Handler; import org.vertx.java.core.eventbus.EventBus; ... Handler<Message<String>> myHandler = new Handler<Message<String>>() { public void handle(Message<String> message) { System.out.println("Primih poruku: " + message.body); // izvrši neophodne radnje message.reply(„Odgovor"); } }; //----------------------------------------------------------------------------------------------------------------eb.registerHandler("test.address", myHandler); eb.send("test.address", "Ovo je poruka", new Handler<Message<String>>() { public void handle(Message<String> message) { System.out.println("Primih odgovor: " + message.body); } });
  • 15. Vert.x – Osnovne komponente - Modul • Mod – upakirana Vert.x aplikacija • Module koriste druge aplikacije ili drugi Vert.x sustavi • Idealno za distribuciju putem Mavena (Nexus) • Vert.x javni registar modula - http://modulereg.vertx.io/ • Busmod – modul koji komunicira preko EventBusa s verticama putem JSON poruka. • Moduli su preferiran način korištenja i embedanja Vert.x aplikacija
  • 16. Vert.x – Osnovne komponente - Modul • Primjeri: – mod-mongo-peristor, mod-redis, mod-jdbc-persistor, modpostresql,... – mod-mailer, mod-session-manager, mod-auth-mgr – mod-guice, mod-spring-appcontext – mod-kafka, mod-jersey, mod-socketio – mod-zip, mod-unzip, mod-ampq • Jezici koje vert.x podržava su također moduli: – mod-lang-rhino, mod-lang-groovy, mod-lang-jython, mod-langjruby, mod-lang-scala, mod-lang-coljure, ...
  • 18. Vert.x – Arhitektura (distribuirana sab.)
  • 19. Vert.x – Arhitektura • Dijeljenje podataka između vertica (Shared state): • Vertice mogu djeliti nepromjenjive podatke (Immutabe) • Sesija po Vert.x instanci • Vert.x daje pristup Shared Map i Shared Set • Samo jednostavni tipovi: brojevi, boolean, String i Buffer • Bitno za npr. Cache, sinkronizacijsku logiku, otvorene konekcije i sl.
  • 20. Vert.x – Arhitektura • Primjer dijeljene mape ConcurrentMap<String, Integer> map = vertx.sharedData().getMap("app.my-data"); map.put("key1", 123); map.putIfAbsent("key1", 123); map.replace("key1", 123, 124); map.get("key1"); map.remove("key1");
  • 21. Vert.x – Arhitektura • Primjer dijeljenog seta Set<String> set = vertx.sharedData().getSet("app.may-set"); set.add("Mihovil"); set.contains("Mihovil"); vertx.removeSet("app.may-set");
  • 22. Vert.x – Arhitektura • Concurrency model: – – – – – Multi-reactor pattern Synchronised, volatile, locking Single threaded kod po vertici Hibridni multithreading (logička i worker vertica) Izolirani ClassLoader i jedan thread/event loop za egzekuciju • Asinkroni model programiranja: – Event handleri – Asinkroni API za filesystem i streamove – Izmjena poruka putem sabirnice
  • 23. Vert.x – Arhitektura Vert.x interno koristi ove open source projekte: • Netty 4.0 -> network IO • JRuby -> Ruby engine • Jython -> Python engine • Mozilla Rhino -> JavaScript engine • Hazelcast -> upravljanje grupama i klasterom • Jackson -> za JSON • ...
  • 24. Vert.x – Uporaba • Maven: <dependency> <dependency> <groupId>io.vertx</groupId> <groupId>io.vertx</groupId> <artifactId>vertx-core</artifactId> <artifactId>mod-mongo-persistor</artifactId> <version>2.0.2-final</version> <version>2.0.0-final</version> </dependency> </dependency> <dependency> <groupId>io.vertx</groupId> <artifactId>vertx-platform</artifactId> <version>2.0.2-final</version> </dependency> mvn archetype:generate -Dfilter=io.vertx: -DgroupId=com.mycompany -DartifactId=my-module -Dversion=0.1
  • 25. Vert.x – Usporedba Vert.x Node.js Polyglot JavaScript Lakoća skaliranja i klasteriranja Nije tako lako skalirati Skromniji broj modula Velik broj modula Dobra dokumentacija Dobra dokumentacija Bolje perfromanse Ne tako dobre performanse (u odnosu na Java vert.x) Malo primjera uporabe Puno primjera uporabe Mali community Velik community Lakše uključivanje u Java projekte i iskorištavanje Java ekosustava Nije često korišten za enterprise sustave
  • 26. Vert.x – Usporedba • Programerska perspektiva : – Dobre stvari: • • • • • JAVA ! Jednostavan i neopširan API Timovi za razvoj u raznim jezicima Zero conf. debugiranje i testiranje (podrška za integracijske testove) Container API (programsko deplojanje i undeplojanje te logiranje) – Ne tako dobre: • Dosta anonimnih unutarnjih klasa (Lambdas to the rescue!) • Nativne extenzije na drugim platformama na koje su ljudi navikli • Nezgodno debugiranje busmoda (stack trace završava kod izmjene poruka) • Nema (out of the box) MVC podršku • JDK7+ pa nema Androida
  • 27. Vert.x – Najbolje prakse • • • • • • • • • Don’t block the event loop! Java za razvoj (najbolje performanse) Dobar alat za određene vrste poslova, ne sve. Poštedno korištenje worker vertica. Koristiti asinkrone java biblioteke (ako je moguće) JCA adapter za integraciju s J2EE Koristiti i dijeliti module (javni registar) Autodeploy kod razvoja, no možda ne i u produkciji  Pratiti mrežni promet na hostu (tuniranje performansi)
  • 28. Vert.x – Nabolje preporuke • Koristiti za: – „Real time” aplikacije (gdje biste i Node.js) – Integraciju sa sustavima baziranim na messaging arhitekturi (AMPQ, ZeroMQ, ...) – Dashboardi i vezani API (big data) – Message brokeri – Push sustavi (push notifikacije za mobile) – Veliki, particionirani cache sustavi – Nadgledanje i upravljanje jobovima (Quartz, Jenkins, Hadoop) – RPC sustavi, ad-hoc upiti nad velikim datasetovima – Streaming podataka, audio-video, on the fly transformacije pod.
  • 29. Vert.x – Zaključak • Open source governance je bitan ! • Projekt je još mlad i u razvitku • Nedostaje pravih, kompleksnih primjera primjene u produkciji • I u Java svijet dolaze nove vrste platforma, za moderne izazove • Poliglotnost: izrada kompleksnih modernih enterprise sustava
  • 30. Kontakt Mihovil Rister gsm +385 91 5865 907 Razvojni inženjer, mail mihovil.rister@fiveminutes.eu Pet Minuta d.o.o. skype mihovil.rister web http://www.fiveminutes.eu