creating polyglot and scalable applications on the jvm using vert.x
DESCRIPTION
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.TRANSCRIPT
Jettro Coenradie@gridshore
Creating Polyglot and Scalable Applications on the JVM with Vert.x
dinsdag 30 oktober 12
The butterfly represents the lightweight scalable architecture
http://maps.google.com
dinsdag 30 oktober 12
Does this territory look familiar?
http://maps.google.com
dinsdag 30 oktober 12
Tripoint of countries: The netherlands, Germany and BelgiumPeople here speak multiple languages and are therefore Polyglot
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
1996
1
1997
1.1
JDBC, Reflection
1998
1.2
JIT Compiler, Collections framework
2000
1.3
Hotspot JVM, JNDI
2002
1.4
Reg Exp, NIO, XML parsing
2004
5
Generics, Varargs, enums
2006
6
Scripting Language Support
2011
7
Dynamic languages on JVM
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.
Polyglot applications on the JVM
dinsdag 30 oktober 12
Now the JVM supports creating Polyglot applications.
C10K Problem
http://www.tumblr.com/tagged/rockconcert?before=1346635427dinsdag 30 oktober 12
C10k problemThe crowd becomes to big for your platform
http://en.wikipedia.org/wiki/C10k_problem
dinsdag 30 oktober 12
Wikipedia page about the C10K problem showing the main characteristics of available solutions: event-driven, non-blocking and asynchronous
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.
Vert.x
@timfox
✦Netty✦JRuby✦Groovy✦Rhino✦Jython✦Hazelcast
dinsdag 30 oktober 12
Introduction of vertx, the creator and the main technologies used.
Polyglot application platform
JavaScript
dinsdag 30 oktober 12
The available languages for vert.x and the languages for which support is being created.
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 inputNon-blocking: can use the CPU more effectively if there is something to do, it does not fall asleep
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.
Vert.x Components
Verticle
Verticle
Worker
Worker
Module Module Module
CoreServices
Event Loop 1
Event Loop 2
Background Pool
Event Bus
dinsdag 30 oktober 12
Go through all the different components of Vert.x
Verticle
Verticle
Worker
Worker
Module Module Module
CoreServices
Event Loop 1
Event Loop 2
Background Pool
Event Bus
Vert.x Core
• Must be implemented by all languages
• Core services must be called direct
• Example Services
• TCP/SSL, HTTP/HTTPS, WebSockets, Logging, SockJS and more
dinsdag 30 oktober 12
Core services must be called directly, no need for sending messages
Verticle
• Unit of deployment in Vert.x
• Can contain other scripts
• Can contain libraries
• Can start other verticles
Verticle
Verticle
Worker
Worker
Module Module Module
CoreServices
Event Loop 1
Event Loop 2
Background Pool
Event Bus
dinsdag 30 oktober 12
- Demo basic verticle
Module
• Modules communicate using messages
• A public module repository
• https://github.com/vert-x/vertx-mods/tree/gh-pages/mods
Verticle
Verticle
Worker
Worker
Module Module Module
CoreServices
Event Loop 1
Event Loop 2
Background Pool
Event Bus
dinsdag 30 oktober 12
Worker Verticle
• For tasks that require blocking
• For tasks that take a lot of computation
• Uses thread of the background pool
• They are never executed by more than one thread
Verticle
Verticle
Worker
Worker
Module Module Module
CoreServices
Event Loop 1
Event Loop 2
Background Pool
Event Bus
dinsdag 30 oktober 12
Verticle or Module
• Verticle is easy to use
• Verticle needs to be configured with its classpath when running
• A module is a package of vert.x stuff complete with dependencies.
Verticle
Verticle
Worker
Worker
Module Module Module
CoreServices
Event Loop 1
Event Loop 2
Background Pool
Event Bus
dinsdag 30 oktober 12
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.
Threads
• Amount equals number of cores
• Verticles/modules are assigned to an event loop
Event loop
• A thread pool for worker verticles
• Actions can block or take longer CPU time
Background Pool
dinsdag 30 oktober 12
Demo: Office events
Event Bus
Invitations Notifications MongoPersistor
App
Back
up
CoreServices
Background PoolEvent Loop 1
Event Loop 2
Website
Event Loop 1
https://github.com/jettro/vertx-samples/tree/master/office-eventsdinsdag 30 oktober 12
The office events demo is available on github. It is used to show modules, verticles and worker verticles in different languages.
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.
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
Events
• Publish/Subscribe
• Peer-to-Peer
• Replying to messages
• Distributed event-bus
dinsdag 30 oktober 12
More info about event usage in Vert.x
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
There is more
• Shared data
• Embedded mode
• Clustered mode
dinsdag 30 oktober 12
More info
JettroCoenradie
@jettroCoenradie@gridshorehttp://www.linkedin.com/in/jettrohttp://www.gridshore.nlhttp://www.trifork.nl
Vert.x
http://vertx.io Downloads and documentation
http://groups.google.com/group/vertx
@timfoxTim Fox
https://github.com/jettro/vertx-samples/ office-events
https://github.com/jettro/
dinsdag 30 oktober 12
Rock ?? Concert by Rod Stewart with 3.500.000 visitors
Questions ??
dinsdag 30 oktober 12
Now we can scale our rock concert to around 3.5 million users.