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
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 Belgium
People 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
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.
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=1346635427
dinsdag 30 oktober 12

C10k problem
The 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
                        ✦Netty
                        ✦JRuby
                        ✦Groovy
                        ✦Rhino
                        ✦Jython
                        ✦Hazelcast


                                     @timfox

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 input
Non-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
                             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
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
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
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
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
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
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

        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
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.
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

 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
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.

Creating polyglot and scalable applications on the jvm using Vert.x

  • 1.
    Creating Polyglot andScalable Applications on the JVM with Vert.x Jettro Coenradie @gridshore dinsdag 30 oktober 12 The butterfly represents the lightweight scalable architecture
  • 2.
    http://maps.google.com dinsdag 30 oktober12 Does this territory look familiar?
  • 3.
    http://maps.google.com dinsdag 30 oktober12 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 onthe 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
  • 8.
    http://en.wikipedia.org/wiki/C10k_problem dinsdag 30 oktober12 Wikipedia page about the C10K problem showing the main characteristics of available solutions: event-driven, non-blocking and asynchronous
  • 9.
    Scalable applications onthe 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 tonon-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 30oktober 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.