Vert.x - 2014 JDay Lviv (English)
-
Upload
bartek-zdanowski -
Category
Documents
-
view
539 -
download
2
Transcript of Vert.x - 2014 JDay Lviv (English)
Bartek Zdanowski
vert.x
Bartek Zdanowski● developer @ TouK● co-organizer of Confitura conference● vertx lover● father and husband :)
@BartekZdanowski
what actually vert.x is?
vert.x
vert.x
● application platform● concurrent code● thread safe● event driven● polyglot● with very nice event bus● scalable
vert.x
vert.x
● what is the Problem?○ number of mobile users raises from year to year*
■ 2,1 bln in 2012■ 7 bln in 2018
○ number of intelligent devices raises■ Internet of things - 30 bln in 2020!**■ IPv6 is already ready for all of them
* http://mobithinking.com/mobile-marketing-tools/latest-mobile-stats/b** http://en.wikipedia.org/wiki/Internet_of_Things
vert.x
● what is the Problem?○ Tomcat: 200 threads = 200 connections○ rest of incoming connections must wait…
vert.x
● what is the Problem?● 1 thread handles one task
○ if thread is waiting for job to finish, whole queue of tasks waits
○ traditional synchronous approach○ waiting for job to finish (loop!)
vert.x
* Thread Pools
http://tripoutlook.com/wp-content/uploads/2013/03/Car-parking.jpg
vert.x
* Thread Pools
http://upload.wikimedia.org/wikipedia/commons/5/52/Parallel_Parking_cars.jpg
vert.x
* Thread Pools
http://avtovesti.com/wp-content/uploads/2012/05/taxi1.jpg
vert.x
● different approach!○ 1 task = series of events lousely coupled○ asynchronous○ event that informs that new job/data is waiting○ program should release thread instead of waiting for
operation (I/O) to be finished
vert.x
● different approach!● program must wait for data. But only one thread should
wait!
event
thread
vert.x
● different approach!● program must wait for data. But only one thread should
wait!
event
reactor
thread
vert.x
● how it’s done in vert.x?○ multi-reactor pattern○ thread pool equals to cores count
vert.x
● how it’s done in vert.x?○ introduces asynchronous programming approach○ event driven○ distributed○ scalable○ thread safe○ uses actor model
vert.x
Show me the code!(demo)
vert.x
● thread safe? when?
○
class MyService {public synchronized Result doSomething(Data data) {
//do some critical stuff}
}
vert.x
● thread safe? when?
class MyService {public synchronized Result doSomething(Data data) {
//do some critical stuff}
}
● only when 1 thread!
vert.x
● thread safe? when?○ each verticle instance is always executed by the
same thread from thread pool○ separated classloaders for each verticle instance○ event bus separates threads○ shared data: maps, sets
vert.x
Publisher
EventBus
Subscriber1 Subscriber2
Publisher - subcriberpublish() //broadcast
vert.x
Publisher
EventBus
Subscriber1 Subscriber2
Publisher - subcribersend() //point-to-point
vert.x
Publisher
EventBus
Subscriber1 Subscriber2
Publisher - subcribersend() //point-to-pointround robin
vert.x
● EventBus○ publish() - all subscribers○ send() - only one subscriber, round robin○ queueing of messages to be delivered
● but○ no acknowledgement○ messages are stored in memory only - volatile
messages!
vert.x
● EventBus○ distributed - cluster○ can be spanned to web client side via SockJS
vert.x
Publisher
EventBus
Subscriber1 Subscriber2cluster!
host1 host2 host3
vert.x
● how vert.x scales○ many instances of one verticle○ clustering (auto-magic!)○ eventbus spans through all nodes of cluster○ uses all available cores
vert.x - modules
● deployment units● contain code and all dependencies● reusable code● can be shared via Bintray, Maven ● can be published on Vert.x module registry
vert.x - modules
Modules demo
vert.x - webserver
● simple and fast● with event bus exposed by SockJS
vert.x – getting started
● http://vertx.io● User maven archetype:
Create first verticle withmvn archetype:generate -Dfilter=io.vertx:
● Add some codemvn install
● Ready to go!mvn vertx:runMod
vert.x
● other features○ Polyglot
■ Java, JavaScript, CoffeeScript, Ruby, Python, Groovy + Scala, Clojure and...PHP
○ embedding vert.x in application○ Filesystem API○ DNS API
vert.x
● Opponents?● node.js! really?!
http://www.cubrid.org/blog/dev-platform/inside-vertx-comparison-with-nodejs/
vert.x
● Opponents?● node.js! really?!
http://www.cubrid.org/blog/dev-platform/inside-vertx-comparison-with-nodejs/
vert.x
● To summarize○ extremely scalable○ thread safe and multithreaded○ extremely efficient○ distributed eventbus○ polyglot○ modularized○ ready for year 2020 - 30 bln of devices ;)
vert.x
vert.x on Raspberry Pi! Monitoring Jenkins builds!
http://touk.pl/blog/en/2013/09/30/our-build-lights-in-action/
https://github.com/zdanek/vertx-pres
https://github.com/zdanek/vertx-module-example
https://docs.google.com/presentation/d/1SvEyExQJbjTKI7RAMPZhTFYJBz6h
MhI7w2pie_LNtDw/edit?usp=sharing
vert.x
Дякую
vert.x