sexta-feira, 27 de maio de 2016

Vert.x an event-driven application framework

Vert.x is an asynchronous event-driven platform  (paradigm where the program flow is determinate by events like user actions) where is possible creating web applications.

It processes all I/O using Netty. Therefore, it is meaningless to verify differences of the performance between Vert.x and Netty.

Vert.x is a server framework that provides API and functions different and independent from Netty, designed with different purpose from Netty.

Netty is a framework that can process the low-level I/O and Vert.x can process the higher-level I/O than Netty.

Vert.x is similar the Node.js and Akka, run in the JVM, is scalable, concurrent, non-blocking, distributed and polyglot.

  •        Each component is called verticle.

  •       Vertx can scale when create more instances of verticle.

  •       Vert.x treats its verticle as an 'actor' of the Actor model.

  •       Each verticle runs simultaneously on a separate thread single.

  •       There is no state that is being shared between the Verticle.

  •       Uses Event-bus as the Vert.x core.





The Event-bus is a system message that work like JMS.

All communication between Verticle happens through Event-Bus.

Verticle can publish or listen event in an address on event-bus

The Vert.x Event-Bus supports point-to-point, pub-sub, and request-response messages.

The numbers of event-loops are created by default with the number of CPU core.

If a verticle's event-handler for example has some I/O operations heavy, it may take time until

If the event-handler verticle has, for example, some I / O heavy implemented that may take some time to complete, it will block the event-loop.



All event messages will not be delivered to other verticle operating in the same event-Loop to the previous handler was completed

A single event loop serving a high volume of connections via an asynchronous programing model.

Most of the real work is done in a pool of background threads.

Vert.x does not block 100 concurrent long running requests.


Core API:
  • TCP/SSL clients and servers
  • HTTP/HTTPS clients and servers including Web Sockets
  • Event Bus
  • File System
  • 100% asynchronous


Mainly provides asynchronous API.

A general-purpose application framework running in JVM

Very performative, asynchronous APIs, event-driven, on-blocking (asynchronous I/O is a form of input/output processing that permits other processing to continue before the transmission has finished.)
Highly scalable but also easy to implement concurrency.

Polyglot, are possible use Java,JS, Ruby, Groovy, Python, Scalam Clojure and Ceylon.

Use all available cores on a single machine

A verticle never gets executed by more than one thread concurrently.

No race conditions, no deadlock. You write your code as single threaded.

Is good for:
  •   Real-time Analytics dashboard 
  • Big data queries and task coordination






--------Comparison---------

Vert.x Vs NodeJS

Polyglot - JS
JVM      - V8
Huge ecosystem of Java Libraries - big ecosystem of node modules
Small community - big community
-----------------

References:




















Um comentário:

  1. Thanks for a nice article and a useful link database. I will certainly have the opportunity to use them. If you are interested in software development and business development I also invite you on https://ax-dynamics.com/. Have a nice day :)

    ResponderExcluir