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

Applications polyglottes concurrentes avec Vert.x

Applications polyglottes concurrentes avec Vert.x

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 !!!