Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Lagom, reactive framework(paris jug2017)

278 visualizaciones

Publicado el

Paris Jug 14mars 2017

Publicado en: Software
  • Sé el primero en comentar

Lagom, reactive framework(paris jug2017)

  1. 1. Lagom Reactive microservices framework Lagom Reactive microservices framework Fabrice Sznajderman - @fsznajderman 14 mars 2017 @lagom
  2. 2. Roadmap ● Microservices / Event Sourcing / CQRS ● Overview ● Principales fonctionnalités ● Live coding ● Next step
  3. 3. Qui vous parle? Fabrice Sznajderman ● Développeur Scala @Zenika ○ Formateur Java/Scala ● Contributeur (Lagom, JHipster, rapture) ● Bagger (Scala - Lagom - SBT) ● Co-organisateur conférence ScalaIO
  4. 4. Core concepts Microservices / Event Sourcing / CQRS
  5. 5. Microservices
  6. 6. Microservices
  7. 7. Microservices Microservices-Based Architecture is a simple concept: it advocates creating a system from a collection of small, isolated services, each of which owns their data, and is independently isolated, scalable and resilient to failure. Services integrate with other services in order to form a cohesive system that’s far more flexible than the typical enterprise systems we build today. Reactive Microservices Architecture: Design Principles for Distributed Systems - jonas Boner http://www.oreilly.com/programming/free/reactive-microservices-architecture.html
  8. 8. Microservices
  9. 9. Event Sourcing
  10. 10. Approche traditionnelle
  11. 11. Event sourcing
  12. 12. CQRS
  13. 13. CQRS ● Command ● Query ● Responsability ● Segregation
  14. 14. Approche traditionelle
  15. 15. Write (Command) : Event log. Modèle simple. Read (Query) : Dénormalisation, scalabillité, performance... CQRS
  16. 16. CQRS
  17. 17. Lagom Overview / Principales fonctionnalités / Live coding
  18. 18. Overview
  19. 19. ● Construire un système de microservices ● Basé sur les principes réactifs ● Intégration dans l’environnement de développement Overview - Objectifs
  20. 20. ● Coeur du framework est écrit en Scala ● API en Java 8 ● API en Scala 2.11.* Overview - Quel langage ?
  21. 21. ● Java 8 & Scala ● (Immutables) ● SBT / Maven ● Jackson ● Cassandra / JDBC* ● Message broker* (Kafka) ● Play framework ● Akka : persistence, pub/Sub, cluster ● Akka Stream Overview - Composants techniques *depuis la version 1.2.0
  22. 22. Principales fonctionnalités
  23. 23. ● Description de l’API basée sur une interface ● Request / response synchrone ● Message asynchrone - Streaming Fonctionnalités - Service API
  24. 24. Fonctionnalités - Service API public interface HelloWorldService extends Service { ServiceCall<NotUsed, String> hi(String name); @Override default Descriptor descriptor() { return named("helloWorld").withCalls(restCall(Method.GET, "/hello/:name", this::hi)); } }
  25. 25. ● Garde l’état courant en mémoire ● Capture et persiste tous les changements d’états (events) ● CQRS Read side (query & update) ● Clustering / sharding ● CassandraSession Fonctionnalités - Persistance API
  26. 26. Fonctionnalités - Persistance API public class UserEntity extends PersistentEntity<UserCommand, UserEvent, UsersState> { @Override public Behavior initialBehavior(Optional<UsersState> snapshotState) { BehaviorBuilder b = newBehaviorBuilder( snapshotState.orElse(new UsersState(UsersList.builder().build(), "now"))); b.setCommandHandler( UserCommand.SignIn.class, (cmd, ctx) -> ctx.thenPersist(new UserSigned(cmd.name), evt -> ctx.reply(Done.getInstance()))); b.setEventHandler( UserSigned.class, evt -> { /*get information from event and update state*/ final UsersList newState = /*current update state*/; return new UsersState(newState, LocalDateTime.now().toString()); }); b.setReadOnlyCommandHandler(UserCommand.ListUsers.class, (cmd, ctx) -> ctx.reply(state().users.getUsers())); return b.build(); }
  27. 27. ● ConductR pour la production ● Scalabilité ● Déploiement ● Monitoring Fonctionnalités - Environnement Production
  28. 28. ● Consul / Zookeeper ● Treafik / HaProxy ● Docker ● Monitoring (traefik) Fonctionnalités - Environnement Production (free)
  29. 29. ● Intégration dans l’IDE ● Plusieurs services fournis par défaut ● Rechargement du code à chaud ● Une seule commande pour démarrer le système Fonctionnalités - Environnement de développement
  30. 30. Structure d’un projet - Démarrage du système ● Une commande pour lancer le système : ○ sbt runAll / mvn runAll ● Plusieurs services activés au démarrage : ○ Cassandra ○ Service locator ○ Service gateway ○ Tous les services déclarés
  31. 31. Structure d’un projet - Overview
  32. 32. Live coding
  33. 33. ● Hello World ● Calculator - ConductR ● Sloak - CQRS / Events Sourcing ● Déploiement sans conductR - Etat des lieux Roadmap - Live coding
  34. 34. Next step ● [Documentation] http://www.lagomframework.com ● [Gitter] https://gitter.im/lagom/lagom ● [Github] https://github.com/lagom/lagom ● [Plugin] https://github.com/Fabszn/scaffolding-plugin-lagom ● [Communauté] https://github.com/Lagom-community
  35. 35. Merci!

×