Vert.x

Présentation

Qu'est-ce que Vert.x ?


Tim Fox, le créateur de Vert.x

  • Un Framework évènementiel "event-driven"
  • Une application de type "event driven" est principalement définie par ses réactions aux différents événements qui peuvent se produire, c'est-à-dire des changements d'état de variable comparé au séquentielle qui suit le déroulement des instructions du programme.

  • Développement d'applications Web évolutives
  • Comme Node.js, Vert.x permet aux développeurs de créer des applications webs évolutives dans le sens qu'ils peuvent créer des serveurs webs performants et en multi-langages (polyglotte)

  • Tourne sur la machine virtuelle Java (JVM)
  • Vert.x est basé sur la machine virtuelle Java (JVM) alors que Node.JS est utilisé sur la machine virtuelle du moteur Javascript (V8).

  • Tim Fox (Red Hat), le créateur
  • Vert.x a été crée en 2011 alors que Tim Fox travaillait pour VMWare, il a quitté la société en 2012 puis a rejoint RedHat.

  • Fondation Eclipse (2013)
  • En Janvier 2013, il a été décidé que le projet du framework Vert.x rejoindrait la fondation Eclipse.

    Philosophie de Vert.x

    Voici la propre philosophie que vise Tim Fox, selon lui, son outil n'est pas qu'un simple framework, son objectif est que celui-ci soit une plateforme.
    Il a l'avantage d'être léger, simple et polyglotte. Voici les principaux mots-clés décrivant Vert.x :

  • Polyglotte

  • Exemple de code des différents langages de programmation - Polyglotte

  • Simple
  • Extensible
  • Concurrentiel
  • 100% Open Source
  • En résumé, nous sommes tous des développeurs polyglottes. Nous nous disons que nous sommes conscients qu’il y a des langages meilleurs que d’autres pour des problématiques différentes, exemple : ça va être plus simple en Python.

    Vert.x fonctionne sur la JVM, elle va ainsi utiliser les capacités de celle-ci et peut comprendre du Ruby ou du Python. On peut développeur ces langages dans Vert.x.

    Tim Fox veut que son framework rassemble ces différentes communautés. Nous verrons qu'ils peuvent discuter les uns avec les autres via des events bus (voir la partie Event Bus)

    Vert.x : Une approche différente

  • Modèle de programmation asynchrone
  • De manière générale, ce qu’on appelle le développement asynchrone est un peu différent de la gestion du multithreading et de la concurrence que l’on trouve dans les langages comme le Java, C, C#, etc.

    Dans le modèle “classique”, vous créez vos threads vous-même et devez gérer plusieurs éléments pour éviter les problèmes au niveau du partage de mémoire, dans le cas où les données sont utilisées par plusieurs threads.

    Pour résoudre ces problèmes, il faut mettre en place des mécanismes de synchronisation, de mutex, de lock, etc. Ces mécanismes sont en général assez coûteux en mémoire et il est recommandé de les éviter au maximum.

  • Programmation avec système d'évènements/messages
  • Une autre manière de voir les choses est de définir des entités dont les traitements sont indépendants les uns des autres et dont le code est isolé. Comme le code est isolé, il n’y a pas de partage de mémoire entre les threads et vous pouvez créer un thread par entité.

    Si vous avez besoin d’échanger des informations entre ces entités ou de déclencher un traitement, vous utilisez un système de messages ou d’évènements selon les besoins.

  • Reactor Pattern
  • Le patron de conception Reactor permet de traiter de façon évènementiel dans un environnement concurrentiel, les évènements peuvent provenir de différentes sources diverses. Il ressemble fortement au design pattern Observateur, mais à la différence de celui-ci, il est capable d'accepter plusieurs sources d'événements.

    Sous le capot de Vert.x

  • Liste des outils qui fonctionnent en dessous de Vert.x :

  • Netty

  • Netty : Couche réseau non bloquante
    • C'est un framework permettant la communication entre un client et le réseau en mode non bloquant.


    Hazelcast

  • Hazelcast : Espace mémoire partagé
    • Vert.x utilise Hazelcast. Hazelcast est un type de stockage distribué. Vert.x fait appel à des données partagées. Il permet à plusieurs instances de Vert.x de partager les mêmes données.


    Jackson

  • Jackson : Génération et parsing JSON
    • Vert.x utilise du JSON pour définir un fichier de description d’un module Vert.x par exemple ou encore pour communiquer entre un client/serveur.

    ...et d'autres couches permettant l'utilisation d'autres langages

  • Le coeur de vert.x est écrit en Java, puis nous une fine couche d'abstraction a été effectuée pour chaque langage de la JVM que supporte le framework. Ainsi, chaque langage a sa propre API et respecte le développement habituel d’un dev.
    Exemple : Un développeur Ruby code à la façon Ruby…
  • JRuby, Jython, Mozilla Rhino...
    • Vert.x utilise des implémentations d'interpréteurs de langages pour comprendre ainsi les langages supportés pour la JVM, par exemple, le Ruby sera supporté grâce à l'interpréteur JRuby.

  • Liste des API fournies par Vert.x :
  • Avec ce qu'offre Vert.x comme API, il intègre la connexion réseau étendue avec des serveurs TCP, HTTP/HTTPS et les clients, le support pour WebSockets et SockJS, etc.