Vert.x
Caractéristiques
Vert.x se distingue par un modèle simple de simultanéité, il permet une réécriture d'un code comme une application mono-thread. Chaque thread représente une boucle événementielle utilisable par le serveur.

Architecture de Vert.x
Verticle
- TOUJOURS exécuté sur 1 thread
- TOUJOURS assigné sur 1 event loop
Les paquets de code qui transitent et qui sont utilisés dans Vert.x sont appelés Verticles. Un Verticle peut être écrit en plusieurs langages : Javascript, Ruby, Java, Groovy ou Python. Il exécute un traitement isolé et est déclenché lorsqu’il reçoit un évènement. Deux verticles ne se connaissent pas mutuellement, elles sont toutes les deux isolées, ce qui veut dire que chacune ne connaisse pas le code de l'autre, nous allons voir comment elles se communiquent ensemble.
Vert.x Instance
Les verticles circulent à l’intérieur d’une instance Vert.x. Une instance Vert.x s’exécute dans sa propre instance de la JVM. Il peut y avoir beaucoup de verticles exécutant dans une instance Vert.x unique à un moment donné. Vert.x assure que chaque verticle est exécuté par un seul et unique thread, il n’y a pas d’échanges de verticles donc pas de souci de concurrence, ça change pas mal de choses pour un développeur Java ou Ruby, ce qui veut dire qu'il y a moins de problèmes à gérer.
Event Loop
Règle d'or : NE JAMAIS BLOQUER UN EVENT LOOP !
Dans une instance Vert.x, il y a une gestion d'un petit nombre de threads, correspondant au nombre de threads aux noyaux disponibles sur le serveur. Nous appelons ces threads des events loops
Event Bus
- Publish/Subscribe
- Request/Response
- Peer to Peer
Le bus événementiel (Event bus), représenté comme un tunnel, est le système de communication principal pour les verticles, en effet, chaque verticle étant isolée et n'ayant pas connaissance de l'existence des autres, utilise leur communication via un event bus.
Que nous somems dans une même instance vert.x ou dans une autre, les verticles peuvent communiquer entre eux vers l'aide de messages via un event bus. La communication par messages implique au système une montée en charge sur les différents coeurs disponibles tout en écrivant le code des verticles en mono-thread.
Workers
Malheureusement, nous ne pouvons pas tout rendre 100% asynchrone, pour exemple dans un verticle nous devons jamais bloquer un event loop.
Parfois, nous avons besoin de faire des traitements qui peuvent être bloquants.
Exemple : Lorsque nous faisons une connexion à une base de données comme JDBC ou encore faire un simple serveur web qui ne nécessite pas beaucoup de connexions, ces traitements vont bloquer notre event loop.
Vert.x propose de créer des verticles qui sont des workers, un worker est juste une pool de threads. Dans un worker, il est accepté de faire des opérations qui peuvent bloquer la thread.
Modules

Exemple de nommage des modules
- Authentication Manager
- Session Manager
- JDBC Persistor
- MongoDB Persistor
Vert.x a l'utilité d'être également modulaire. À l’instar de node.js, vos projets sont exportables sous forme de modules, appellés mods. Ces modules deviennent alors utilisables par d’autres projets Vert.x, ils peuvent donc communiquer ensemble via un mécanisme d’event bus, ils deviennent alors des busmods.
Le système d'éventbus est partout dans la vision de Vert.x, ainsi il permet une communication entre les différents mods mais il permet aussi aux différents verticles de communiquer lorsqu'ils sont isolés. Ce qui caractérise les projets Vert.x scalables.