Vert.x - Mihovil Rister, Javantura

367 views
275 views

Published on

Vert.x (vertx.io) je relativno novi, asinkroni, poliglotni framework uvjetovan događajima te baziran na JVM-u, a svojevremeno jedan od najpraćenijih projekata na GitHubu. Također, bio je i razlog ozbiljnih napetosti između Red Hata i VMwarea, koje su umalo zaustavile projekt. Cilj ovog predavanja je predstaviti Vert.x svijet, pokazati osnove, te ponuditi najbolja iskustva, prakse i preporuke pri njegovoj uporabi.
Javantura, Zagreb, 2014.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
367
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • vert.x is a community project sponsored by VMware.Trenutna (final) verzija je 2.0.2.
  • Opičenjak.
  • Vert.x taj C10Kproblem riješiti svojom asinkronom prirodom odnosno arhitekturom.
  • Embedabilan – aplikacije se mogu razvijati kao moduli koji (a i sama platforma) mogu biti ukljuceni u projekt.
  • Embedabilan – aplikacije se mogu razvijati kao moduli koji (a i sama platforma) mogu biti ukljuceni u projekt.
  • Odlično za moderne, distribuirane „real time” sustave te srodno s J2EE sustavima baziranim na messaging arhitekturama
  • Izmjene poruka u Java-a (Point to point)
  • Također svaki svoj module možete registrirati na javni reqistar i tako pomoći zajedniciModularno, uključujete po potrebi što i kada Vam trebaVertex 2.0 jezgra razumije samo Javu, sve ostalo su moduliupakirana Vert.x aplikacija, spremna za ponovno/daljnje korištenjePreferirani nalčin jer jer je i sam Vert.x projekt tako organiziran (od verzije 2.0)Fat jars
  • Rhino ja Javascript Implementaciju
  • Objasniti malo sliku
  • Znaci djeljenje nije moguće van vert.x instance
  • Svakak instanca vertice ima vertx objekt za pristup core funkcionalnostima
  • Svakak instanca vertice ima vertx objekt za pristup core funkcionalnostima
  • Rhino ja Javascript Implementaciju
  • Rhino ja Javascript Implementaciju
  • Rhino ja Javascript Implementaciju
  • Java je nr1 jezik za enterpise developmentOboje su could ready, s time da je Node.js rasireniji po pruzateljima cloud platformi
  • Rhino ja Javascript ImplementacijuNode.js ima hrpetinu template engina poput Jade, ko vert,x ntoga bas inema (rade se na Yoke - midellwareu)Rx java – promise based programming
  • Adaptacija i TCP/Ip optimizacija na razini OS-a (upute na ver.x stranici)(promjene u kodu se automatski primjenuju
  • Ne realtime u onom znanstveno računalnom smislu
  • Ima prostora za napredak.
  • Vert.x - Mihovil Rister, Javantura

    1. 1. Vert.x – asinkroni, skalabilni i poliglotni framework nove generacije Mihovil Rister Razvojni inženjer @ Pet Minuta d.o.o.
    2. 2. Sadržaj predavanja • • • • • • • • Vert.x – što je to? Karakteristike Osnovne komponente Arhitektura Uporaba Usporedba Najbolje prakse Zaključak
    3. 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. 4. Vert.x – tko je to ? Tim Fox http://vertx.io/
    5. 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? Blokirajude operacije? • Vert.x - asnikrona i event driven arhitektura
    6. 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. 7. Vert.x – Osnovne komponente • Vertica (Verticle) • Vert.x instanca • (Distribuirana) sabirnica događaja (Event bus) • Modul
    8. 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. 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. 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. 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. 12. Vert.x – Osnovne komponente -Vert.x instanca Event Loops Quad Core CPU $vertx run Server.java –instances 4
    13. 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. 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. 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. 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, ...
    17. 17. Vert.x – Arhitektura
    18. 18. Vert.x – Arhitektura (distribuirana sab.)
    19. 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. 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. 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. 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. 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. 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. 25. Vert.x – Usporedba Vert.x Node.js Polyglot JavaScript Lakoda 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. 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. 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 mogude) 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. 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. 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. 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

    ×