SlideShare a Scribd company logo
Vert.x - Polyglot
Asynchronous Applications

          Tim Fox
       Vert.x Project Lead
             Red Hat
          @timfox
What is Vert.x?
 ■ General purpose application platform
 ■ Superficially similar to Node.js – but not a clone!
 ■ Asynchronous APIs
 ■ Polyglot – mix and match Java, JavaScript/CoffeeScript, Ruby, Groovy and
   Python (others to follow).
 ■ Simple but not Simplistic
 ■ Part of the new breed of application platforms
Project Info
 ■   Independent Community Project
 ■   Hopefully moving to the Eclipse Foundation soon!
 ■   100% open source (ASL 2.0 + Creative Commons)
 ■   9th most watched Java project on github
     https://github.com/languages/Java/most_watched
Core APIs
 ■   TCP/SSL clients and servers
 ■   HTTP/HTTPS clients and servers – including WebSockets
 ■   File system
 ■   Event bus
 ■   100% asynchronous
 ■   Don't call us, we'll call you!
Core APIs
 ■   TCP/SSL clients and servers
 ■   HTTP/HTTPS clients and servers – including WebSockets
 ■   File system
 ■   Event bus
 ■   100% asynchronous
 ■   Don't call us, we'll call you!
Basic web-server (JavaScript)

 load('vertx.js')


 vertx.createHttpServer().requestHandler(function(req) {
     var file = req.path === '/' ? 'index.html' : req.path
     req.response.sendFile(file)
 }).listen(8080)
Why Asynchronous?

 ■ Many long lived connections are a feature of modern applications –
   Websockets, MQTT
 ■ OS threads are still a precious resource
 ■ Need to service many connections with small number of threads
 ■ Blocked OS threads means they can't do other work
 ■ But async APIs suck, right?
 ■ Use promises library like     to “Flatten the Pyramid of Doom”
Threading model

 ■   Vert.x implements the Multi-Reactor Pattern
 ■   An event loop is an OS thread
 ■   Handles events for many handlers
 ■   Vert.x has multiple event loops. Typically one per core.
 ■   Don't block the event loop!
Hybrid Threading Model
 ■   Don't force everything to run on an event loop
 ■   Worker verticles can block
 ■   Communicate with other verticles by message passing.
 ■   Allows us to leverage the huge ecosystem of blocking Java libs
Concurrency
 ■   Vert.x components are single-threaded.
 ■   “Actor-style” concurrency.
 ■   Move away from 'Java-style' multi-threaded concurrency
 ■   No more synchronized, volatile or locking
 ■   Wave goodbye to many race conditions
Event Bus
 ■   The nervous system of Vert.x
 ■   Verticles communicate using the event bus.
 ■   Super simple API.
 ■   Point to point. Publish/Subscribe. Request/Response.
 ■   Pass simple strings, numbers or other primitive types.
 ■   JSON messages are preferred for structured data.
Event bus code example
 var handler = function(message) {
     console.log('Received message ' + message.msg)
 }
 vertx.eventBus.registerHandler('example.address', handler)

 vertx.setPeriodic(1000, function() {
     vertx.eventBus.send('example.address', {msg:'foo'})
 })
Distributed Event Bus
 ■ Connects multiple Vert.x JVM instances
 ■ Forms a large distributed event space
 ■ Applications are loosely coupled components distributed across your
   network
Extend the Event Bus to the Browser
 ■   Event bus extends to client side JavaScript too
 ■   Uses the same API on the client
 ■   Powerful distributed event space spanning both client and server nodes
 ■   Ideal for modern “real-time” web applications
Module system
 ■ Verticles can be packaged into re-usable packages called modules
 ■ Modules can contain code in any of the Vert.x languages
 ■ Modules can live in the “usual” places. (Vert.x 2.0 - Maven Central, Nexus,
   etc)
 ■ Encourage an eco-system of Vert.x modules.
 ■ Empower the community
 ■ Keep the core project compact.
Examples of modules
 ■   JDBC
 ■   MongoDB
 ■   Redis
 ■   AMQP
 ■   Mailer
 ■   Work queues
 ■   Session Manager
 ■   Web framework
 ■   Rhino, DynJS, Groovy, JRuby, Jython, Scala, Clojure, etc
Easy Developer Experience
 Vert.x 2.0:
  ■ Gradle template project
  ■ Maven archetype and plugins
  ■ Zero setup IDE debugging
  ■ Zero setup IDE testing
Introducing DynJS
 ■ New 100% InvokeDynamic JavaScript implementation for the JVM
 ■ Authors part of same polyglot team at Red Hat
 ■ DynJS language module for Vert.x
Node.js Compatibility
 ■ Run Node.js apps on Vert.x
 ■ Node.js support using DynJS
 ■ Migration path to Vert.x




                     + V8        Vert.x +
Summary
 ■   Write apps as set of loosely coupled components that live anywhere
 ■   Polyglot – use the language(s) you want
 ■   Simple concurrency – wave goodbye to most race conditions
 ■   Leverage existing Java library ecosystem
 ■   Module system – empower the community
 ■   Run Node.js apps too

     We believe Vert.x is the platform for the new generation of polyglot web and
                                 enterprise applications
Summary
 ■   Write apps as set of loosely coupled components that live anywhere
 ■   Polyglot – use the language(s) you want
 ■   Simple concurrency – wave goodbye to most race conditions
 ■   Leverage existing Java library ecosystem
 ■   Module system – empower the community
 ■   Run Node.js apps too

     We believe Vert.x is the platform for the new generation of polyglot web and
                                 enterprise applications
Get involved!
 ■   Loads more to do
 ■   Very small team!
 ■   Github: https://github.com/vert-x/vert.x
 ■   Google group: vertx
 ■   IRC channel: #vertx on freenode.net
Q&A
 https://github.com/vert-x/vert.x

 http://vertx.io/

More Related Content

PPT
JUDCon Brazil 2013 - Vert.x an introduction
ODP
Groovy & Grails eXchange 2012 vert.x presentation
PPTX
Vert.x devoxx london 2013
PDF
Vert.x introduction
PDF
Development with Vert.x: an event-driven application framework for the JVM
PDF
Vert.x
PDF
Vert.x – The problem of real-time data binding
PPTX
Event driven microservices with vertx and kubernetes
JUDCon Brazil 2013 - Vert.x an introduction
Groovy & Grails eXchange 2012 vert.x presentation
Vert.x devoxx london 2013
Vert.x introduction
Development with Vert.x: an event-driven application framework for the JVM
Vert.x
Vert.x – The problem of real-time data binding
Event driven microservices with vertx and kubernetes

What's hot (20)

PDF
Creating polyglot and scalable applications on the jvm using Vert.x
PPTX
Asynchronous programming in ASP.NET
PDF
KubeFuse - A File-System for Kubernetes
PDF
Node.js, toy or power tool?
PDF
Introduction to node js - From "hello world" to deploying on azure
PDF
Apache Camel in the belly of the Docker whale
PPTX
Turbo charging v8 engine
PDF
Innovating faster with SBT, Continuous Delivery, and LXC
PDF
Fabric8 - Being devOps doesn't suck anymore
PDF
Developing Java based microservices ready for the world of containers
PDF
BASICS OF VERT.X - A toolkit for building asynchronous and reactive app
PPTX
Building Micro-Services with Scala
PPTX
CloudStack Conference Public Clouds Use Cases
PDF
OSv – The OS designed for the Cloud
PDF
Spicing up JMX with Jolokia (Devoxx 2014)
ODP
Introducing OpenStack for Beginners
PDF
Container orchestration
ODP
Developing high-performance network servers in Lisp
PDF
4 JVM Web Frameworks
PDF
Jörg Schad - NO ONE PUTS Java IN THE CONTAINER - Codemotion Milan 2017
Creating polyglot and scalable applications on the jvm using Vert.x
Asynchronous programming in ASP.NET
KubeFuse - A File-System for Kubernetes
Node.js, toy or power tool?
Introduction to node js - From "hello world" to deploying on azure
Apache Camel in the belly of the Docker whale
Turbo charging v8 engine
Innovating faster with SBT, Continuous Delivery, and LXC
Fabric8 - Being devOps doesn't suck anymore
Developing Java based microservices ready for the world of containers
BASICS OF VERT.X - A toolkit for building asynchronous and reactive app
Building Micro-Services with Scala
CloudStack Conference Public Clouds Use Cases
OSv – The OS designed for the Cloud
Spicing up JMX with Jolokia (Devoxx 2014)
Introducing OpenStack for Beginners
Container orchestration
Developing high-performance network servers in Lisp
4 JVM Web Frameworks
Jörg Schad - NO ONE PUTS Java IN THE CONTAINER - Codemotion Milan 2017
Ad

Similar to Vert.x keynote for EclipseCon 2013 (20)

PDF
Introducing Vert.x 2.0 - Taking polyglot application development to the next ...
PDF
Node.js 101 with Rami Sayar
PPTX
PPTX
Beginners Node.js
PPTX
Server Side Web Development Unit 1 of Nodejs.pptx
PPTX
World of Node.JS
PDF
FITC - Node.js 101
PPTX
introduction to node.js
PPTX
After the LAMP, it's time to get MEAN
PPTX
GeekCampSG - Nodejs , Websockets and Realtime Web
PPT
Exploring Node.jS
PPTX
Node.js Chapter1
PDF
OSMC 2023 | IGNITE: Serving Server-Side WASM with Web Awareness with NGINX Un...
PPSX
Node.js In The Enterprise - A Primer
PPTX
Quick introduction to nodeJs
PDF
Node js Development Company - Aparajayah
PPTX
Intro to Node.js (v1)
PDF
Node, express & sails
PDF
Node js internal
PDF
An introduction to Node.js
Introducing Vert.x 2.0 - Taking polyglot application development to the next ...
Node.js 101 with Rami Sayar
Beginners Node.js
Server Side Web Development Unit 1 of Nodejs.pptx
World of Node.JS
FITC - Node.js 101
introduction to node.js
After the LAMP, it's time to get MEAN
GeekCampSG - Nodejs , Websockets and Realtime Web
Exploring Node.jS
Node.js Chapter1
OSMC 2023 | IGNITE: Serving Server-Side WASM with Web Awareness with NGINX Un...
Node.js In The Enterprise - A Primer
Quick introduction to nodeJs
Node js Development Company - Aparajayah
Intro to Node.js (v1)
Node, express & sails
Node js internal
An introduction to Node.js
Ad

Vert.x keynote for EclipseCon 2013

  • 1. Vert.x - Polyglot Asynchronous Applications Tim Fox Vert.x Project Lead Red Hat @timfox
  • 2. What is Vert.x? ■ General purpose application platform ■ Superficially similar to Node.js – but not a clone! ■ Asynchronous APIs ■ Polyglot – mix and match Java, JavaScript/CoffeeScript, Ruby, Groovy and Python (others to follow). ■ Simple but not Simplistic ■ Part of the new breed of application platforms
  • 3. Project Info ■ Independent Community Project ■ Hopefully moving to the Eclipse Foundation soon! ■ 100% open source (ASL 2.0 + Creative Commons) ■ 9th most watched Java project on github https://github.com/languages/Java/most_watched
  • 4. Core APIs ■ TCP/SSL clients and servers ■ HTTP/HTTPS clients and servers – including WebSockets ■ File system ■ Event bus ■ 100% asynchronous ■ Don't call us, we'll call you!
  • 5. Core APIs ■ TCP/SSL clients and servers ■ HTTP/HTTPS clients and servers – including WebSockets ■ File system ■ Event bus ■ 100% asynchronous ■ Don't call us, we'll call you!
  • 6. Basic web-server (JavaScript) load('vertx.js') vertx.createHttpServer().requestHandler(function(req) { var file = req.path === '/' ? 'index.html' : req.path req.response.sendFile(file) }).listen(8080)
  • 7. Why Asynchronous? ■ Many long lived connections are a feature of modern applications – Websockets, MQTT ■ OS threads are still a precious resource ■ Need to service many connections with small number of threads ■ Blocked OS threads means they can't do other work ■ But async APIs suck, right? ■ Use promises library like to “Flatten the Pyramid of Doom”
  • 8. Threading model ■ Vert.x implements the Multi-Reactor Pattern ■ An event loop is an OS thread ■ Handles events for many handlers ■ Vert.x has multiple event loops. Typically one per core. ■ Don't block the event loop!
  • 9. Hybrid Threading Model ■ Don't force everything to run on an event loop ■ Worker verticles can block ■ Communicate with other verticles by message passing. ■ Allows us to leverage the huge ecosystem of blocking Java libs
  • 10. Concurrency ■ Vert.x components are single-threaded. ■ “Actor-style” concurrency. ■ Move away from 'Java-style' multi-threaded concurrency ■ No more synchronized, volatile or locking ■ Wave goodbye to many race conditions
  • 11. Event Bus ■ The nervous system of Vert.x ■ Verticles communicate using the event bus. ■ Super simple API. ■ Point to point. Publish/Subscribe. Request/Response. ■ Pass simple strings, numbers or other primitive types. ■ JSON messages are preferred for structured data.
  • 12. Event bus code example var handler = function(message) { console.log('Received message ' + message.msg) } vertx.eventBus.registerHandler('example.address', handler) vertx.setPeriodic(1000, function() { vertx.eventBus.send('example.address', {msg:'foo'}) })
  • 13. Distributed Event Bus ■ Connects multiple Vert.x JVM instances ■ Forms a large distributed event space ■ Applications are loosely coupled components distributed across your network
  • 14. Extend the Event Bus to the Browser ■ Event bus extends to client side JavaScript too ■ Uses the same API on the client ■ Powerful distributed event space spanning both client and server nodes ■ Ideal for modern “real-time” web applications
  • 15. Module system ■ Verticles can be packaged into re-usable packages called modules ■ Modules can contain code in any of the Vert.x languages ■ Modules can live in the “usual” places. (Vert.x 2.0 - Maven Central, Nexus, etc) ■ Encourage an eco-system of Vert.x modules. ■ Empower the community ■ Keep the core project compact.
  • 16. Examples of modules ■ JDBC ■ MongoDB ■ Redis ■ AMQP ■ Mailer ■ Work queues ■ Session Manager ■ Web framework ■ Rhino, DynJS, Groovy, JRuby, Jython, Scala, Clojure, etc
  • 17. Easy Developer Experience Vert.x 2.0: ■ Gradle template project ■ Maven archetype and plugins ■ Zero setup IDE debugging ■ Zero setup IDE testing
  • 18. Introducing DynJS ■ New 100% InvokeDynamic JavaScript implementation for the JVM ■ Authors part of same polyglot team at Red Hat ■ DynJS language module for Vert.x
  • 19. Node.js Compatibility ■ Run Node.js apps on Vert.x ■ Node.js support using DynJS ■ Migration path to Vert.x + V8 Vert.x +
  • 20. Summary ■ Write apps as set of loosely coupled components that live anywhere ■ Polyglot – use the language(s) you want ■ Simple concurrency – wave goodbye to most race conditions ■ Leverage existing Java library ecosystem ■ Module system – empower the community ■ Run Node.js apps too We believe Vert.x is the platform for the new generation of polyglot web and enterprise applications
  • 21. Summary ■ Write apps as set of loosely coupled components that live anywhere ■ Polyglot – use the language(s) you want ■ Simple concurrency – wave goodbye to most race conditions ■ Leverage existing Java library ecosystem ■ Module system – empower the community ■ Run Node.js apps too We believe Vert.x is the platform for the new generation of polyglot web and enterprise applications
  • 22. Get involved! ■ Loads more to do ■ Very small team! ■ Github: https://github.com/vert-x/vert.x ■ Google group: vertx ■ IRC channel: #vertx on freenode.net