In this presentation I show the basic vert.x options for creating polyglot applications that scale on the JVM. Later on the live presentation will also be published. It will be in Dutch though.
Creating polyglot and scalable applications on the jvm using Vert.x
1. Creating Polyglot and Scalable
Applications on the JVM with Vert.x
Jettro Coenradie
@gridshore
dinsdag 30 oktober 12
The butterfly represents the lightweight scalable architecture
3. http://maps.google.com
dinsdag 30 oktober 12
Tripoint of countries: The netherlands, Germany and Belgium
People here speak multiple languages and are therefore Polyglot
4. Polyglot applications
http://maps.google.com
dinsdag 30 oktober 12
- Polyglot applications is not about writing them in Dutch, German and French
- Discuss combining multiple jvm languages in one application
5. JDBC, Reflection
JIT Compiler, Collections framework
Hotspot JVM, JNDI
Reg Exp, NIO, XML parsing
Generics, Varargs, enums
Scripting Language Support
Dynamic languages on JVM
1 1.1 1.2 1.3 1.4 5 6 7
1996 1997 1998 2000 2002 2004 2006 2011
dinsdag 30 oktober 12
The history of the JVM and the introduction of Dynamic languages on the JVM and the
importance for a polyglot application on the JVM.
6. Polyglot applications on the JVM
dinsdag 30 oktober 12
Now the JVM supports creating Polyglot applications.
7. C10K Problem
http://www.tumblr.com/tagged/rockconcert?before=1346635427
dinsdag 30 oktober 12
C10k problem
The crowd becomes to big for your platform
9. Scalable applications on the JVM
dinsdag 30 oktober 12
Some of the mentioned solutions run on the JVM and the JVM is the right tools for the job
when you want to create non-blocking, event-driven, asynchronous applications.
10. Vert.x
✦Netty
✦JRuby
✦Groovy
✦Rhino
✦Jython
✦Hazelcast
@timfox
dinsdag 30 oktober 12
Introduction of vertx, the creator and the main technologies used.
11. Polyglot application platform
JavaScript
dinsdag 30 oktober 12
The available languages for vert.x and the languages for which support is being created.
12. Scalable: Blocking to non-blocking
dinsdag 30 oktober 12
Blocking has the risk that the CPU is doing nothing while a thread is waiting for input
Non-blocking: can use the CPU more effectively if there is something to do, it does not fall
asleep
13. Easily Concurrent
dinsdag 30 oktober 12
- We can use the multiple cores of a machine within one JVM
- Easy concurrency due to thread bound modules and verticles => No Locking
- Synchronous calling of a request handler. Therefore no concurrency issues.
14. Vert.x Components
Event Loop 1 Background Pool
Verticle
Verticle
Worker
Worker
Core
Services
Event Bus
Module Module Module
Event Loop 2
dinsdag 30 oktober 12
Go through all the different components of Vert.x
15. Vert.x Core
Event Loop 1 Background Pool
• Must be implemented by all languages
Verticle
Verticle
Worker
Worker
Core
• Core services must be called direct
Services
• Example Services Event Bus
• TCP/SSL, HTTP/HTTPS, WebSockets, Module Module Module
Logging, SockJS and more
Event Loop 2
dinsdag 30 oktober 12
Core services must be called directly, no need for sending messages
16. Verticle
Background Pool
• Unit of deployment in Vert.x
Event Loop 1
Verticle
Verticle
Worker
Worker
Core
• Can contain other scripts Services
• Can contain libraries
Event Bus
• Can start other verticles Module Module Module
Event Loop 2
dinsdag 30 oktober 12
- Demo basic verticle
17. Module
Background Pool
• Modules communicate using messages
Event Loop 1
Verticle
Verticle
Worker
Worker
Core
• A public module repository Services
• https://github.com/vert-x/vertx-mods/
Event Bus
tree/gh-pages/mods
Module Module Module
Event Loop 2
dinsdag 30 oktober 12
18. Worker Verticle
Background Pool
• For tasks that require blocking
Event Loop 1
Verticle
Verticle
Worker
Worker
Core
• For tasks that take a lot of computation Services
• Uses thread of the background pool
Event Bus
• They are never executed by more than one Module Module Module
thread
Event Loop 2
dinsdag 30 oktober 12
19. Verticle or Module
Background Pool
• Verticle is easy to use
Event Loop 1
Verticle
Verticle
Worker
Worker
Core
• Verticle needs to be configured with its Services
classpath when running
Event Bus
• A module is a package of vert.x stuff
complete with dependencies.
Module Module Module
Event Loop 2
dinsdag 30 oktober 12
20. Communicating between modules
• Send messages over the Event bus
• Vert.x will automatically convert messages between modules
Java JsonObject
Groovy Map
Ruby Hash
JavaScript Object
Python Hash
dinsdag 30 oktober 12
Messages can contain contain raw types, but JSON is recommended to be used for
information sending using messages.
21. Threads
Event loop
• Amount equals number of cores
• Verticles/modules are assigned to an event loop
Background
Pool
• A thread pool for worker verticles
• Actions can block or take longer CPU time
dinsdag 30 oktober 12
22. Demo: Office events
Event Loop 1 Background Pool
Backup
App
Core
Services
Event Bus
Mongo
Invitations Website Notifications
Persistor
Event Loop 2 Event Loop 1
https://github.com/jettro/vertx-samples/tree/master/office-events
dinsdag 30 oktober 12
The office events demo is available on github. It is used to show modules, verticles and
worker verticles in different languages.
23. Module layout
• Module naming: prefix.<name>-v<version>
• mod.json
• scripts or classes
• lib/ - libraries required by the module
dinsdag 30 oktober 12
mod.json is the configuration for the module containing the main item, worker or not and
some other options.
24. Configuration
• Pass configuration when deploying a verticle or module
• Use a json object
• json is used according the language as discussed before
dinsdag 30 oktober 12
25. Events
• Publish/Subscribe
• Peer-to-Peer
• Replying to messages
• Distributed event-bus
dinsdag 30 oktober 12
More info about event usage in Vert.x
26. Logging
• Default uses java utils logging
• Use other logging framework: log4j for example
• <home>/bin/vertx
• DEFAULT_JVM_OPTS="-Dorg.vertx.logger-delegate-factory-class-
name=org.vertx.java.core.logging.impl.Log4jLogDelegateFactory"
• Add the library to the vertx lib folder
• Create a log4j.properties file
dinsdag 30 oktober 12
27. There is more
• Shared data
• Embedded mode
• Clustered mode
dinsdag 30 oktober 12
28. More info
Vert.x
Tim Fox @timfox Jettro
http://vertx.io Downloads and Coenradie
documentation
http://groups.google.com/group/vertx
@jettroCoenradie
https://github.com/jettro/vertx-
samples/ office-events @gridshore
http://www.linkedin.com/in/jettro
http://www.gridshore.nl
http://www.trifork.nl
https://github.com/jettro/
dinsdag 30 oktober 12
29. Questions ??
Rock ?? Concert by Rod Stewart with 3.500.000 visitors
dinsdag 30 oktober 12
Now we can scale our rock concert to around 3.5 million users.