Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Applications polyglottes concurrentes avec Vert.x

Applications polyglottes concurrentes avec Vert.x

Avatar for Julien Viet

Julien Viet

April 14, 2015
Tweet

More Decks by Julien Viet

Other Decks in Technology

Transcript

  1. @julienviet #vertx Bio   • Employé par Red Hat comme contributeur

    de Vert.x • Contributeur open source depuis 2002 • Marseille JUG leader • Quelques projets auxquels j’ai contribué: Vert.x, CRaSH, GateIn, JBoss Portal, JBoss AS 3
  2. @julienviet #vertx Le  projet   • Project open source sous licenses

    Apache et Eclipse • Projet de la fondation Eclipse • Indépendant • Vert.x 2.1.x versions de production courante • Vert.x 3 en développement : milestone 4 • Cette présentation va parler des fonctionnalités de Vert.x 3 pas forcément disponibles dans Vert.x 2
  3. @julienviet #vertx Qu’est  ce  que  Vert.x   • Pile pour développer

    des applications pour la JVM • Inspiré par Erlang/OTP et Node.js – Non bloquant et asynchrone • Polyglotte • Hautes performances • Simple mais pas simpliste, flexible, sans dogmes • Léger et embarquable • Cluster / failover
  4. @julienviet #vertx API  core  asynchrone   • Core léger, peu de

    dépendances • Clients et serveurs TCP/SSL • Clients et serveurs HTTP/HTTPS • Websocket, SockJS • Systeme de fichier • Bus d’événement • DNS • UDP • Données distribuées
  5. @julienviet #vertx Asynchrone   • Callbacks / évenements • Principe de l’event

    loop • Les serveurs modernes doivent pouvoir gérer une concurrence élevée – serveur web, websockets, IoT, etc… • Les threads sont encore une resource précieuse • Besoin de servir beaucoup de connections avec peu de cores • Un thread bloqué ne peut rien faire d’autre
  6. @julienviet #vertx Ver'cle   • Le composant déployé dans Vert.x • Dans

    n’importe quel language • Un seul thread • Les verticles communiquent par messages • Embarqué ou depuis la ligne de commande • Déployé dans des jars
  7. @julienviet #vertx Genera'on  polyglo4e   • Les API Vert.x 2 sont

    maintenues à la main • Vert.x 3 génère les API dans chaque language • JavaScript, Groovy, RxJava – Ruby à venir, etc … • Maintenance automatique • Les API de la stack entière sont générées • Documentation polyglotte
  8. @julienviet #vertx Bus  d’évènement   • Le système nerveux de Vert.x

    • Les Verticles échangent des messages grace au bus • Point à point - pub/sub – requête/réponse • Immuables • JSON, byte[], etc…
  9. @julienviet #vertx La  demo   • Un dashboard de monitoring • Les

    métriques sont aggrégées dans le navigateur • Réactif : basé sur les messages
  10. @julienviet #vertx Event  bus  dans  le  navigateur   • Le bus

    d’événement est étendu au client • Meme API que sur le serveur • Idéal pour les applications web ‘temps réel’ • Transport avec SockJS
  11. @julienviet #vertx Nouveautés  Vert.x  3   • L’API Core reste fondamentalement

    identique • Génération polyglotte : (API, Lang) • Support de RxJava, RxGroovy, RxJS • Une stack ‘supportée’ : composant * langage
  12. @julienviet #vertx Le  deployment   • Compilation à la volée du

    source : Java, Groovy, etc… • Trouve les resources sur en local ou dans un repo maven • CLI / main(String[] args) / Maven / Gradle • Isolation par classloader optionelle
  13. @julienviet #vertx La  stack   • Vert.x Apex: web framework • Data:

    JDBC & NoSQL • Vert.x Unit • Mail service • Metrics • Reactive • Messaging & Integration: JCA, AMQP, RabbitMQ • Cluster
  14. @julienviet #vertx Vert.x  Apex   • Une libraire pour écrire des

    applications web modernes et scalable style Express.js / Sinatra • Basé sur Vert.x Core qui fournit une API HTTP • Routing, négociation de contenu, session • Templating: Handlebars, Jade, Thymeleaf, MVEL • Webserver, Event-bus bridge • Sécurité : Authentification, CORS, Authorization • etc…
  15. @julienviet #vertx Metrics   • Vert.x Core fournit une SPI • Implementation

    Codahale • NetServer / NetClient • HttpServer / HttpClient • EventBus • Timers
  16. @julienviet #vertx Cluster  &  Haute  Disponibilité   • Event bus distribué

    • Haute disponibilité d’un Verticle • Historiquement Hazelcast • JGroups pour la 3.0
  17. @julienviet #vertx Acces  aux  base  de  données   • Non bloquant

    – MongoDB – Redis – Async MySQL/PosgresQL • Bloquant – JDBC
  18. @julienviet #vertx Reac've  APIs   • RxJava – RxGroovy – RxJS

    • Api RxJava-ifiée comme un langage : toObservable()! • Implementation de la spec reactive-streams
  19. @julienviet #vertx Vert.x  Unit   • Ecrire des tests asynchrones • Inspiré

    de Qunit et Junit • Junit runner ou polyglotte • Reporting Junit XML, console ou event bus
  20. @julienviet #vertx Vert.x  3.0   • Dernierement: milestone4 • Prochaines milestones jusqu’à

    à la final • Ruby, JGroup cluster manager, Work Queue, Redis, Openshift, AMQP, RabbitMQ, InfluxDB???
  21. @julienviet #vertx Vert.x  3.1   • Scala, Clojure, Ceylon, Python • IoT

    – MQTT, CoAP • Cassandra • HTTP2 • Event bus : transport pluglable, encryption, authorization, control de flux
  22. @julienviet #vertx Conclusion   • Polyglotte : le bon langage pour

    le bon outil • Modèle de concurrence simplifié • Comme tu veux: Gradle/Maven / fatjar / main / etc… • Où tu veux : eventbus distribué ou non !!!