Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau

95 vues

Publié le

Vous voulez faire du streaming dans une architecture réactive ? Vous avez besoin d’implémenter un protocole TCP, un serveur HTTP léger pour servir une API ou encore un client pour attaquer facilement cette API ?
Aujourd’hui le framework d’acteur Akka est devenu incontournable avec son intégration (notamment) dans Play!.
Venez découvrir différents cas d’utilisation réels au travers d’un REX d’architecture réactive basée sur des microservices.

Publié dans : Technologie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

XebiCon'17 : Rex Akka dans une architecture microservice - Joachim Rousseau

  1. 1. REX Akka dans une architecture microservices
  2. 2. REX Akka dans une architecture microservices Présentations... 2 Joachim Rousseau __jro joe-mojo
  3. 3. REX Akka dans une architecture microservices Agenda ▼ Contexte ▼ Comment avons-nous utilisé Akka streams ▼ Pourquoi Akka HTTP ? ▼ Socket et Akka TCP ▼ Production 3
  4. 4. Contexte REX Akka dans une architecture microservices 4 Serv. 2 Serv. 3 Serv. 1 Serv. 4 Serv. 5 Serv. 6 TCP TCP HTTP
  5. 5. Reactive Manifesto REX Akka dans une architecture microservices 5
  6. 6. REX Akka dans une architecture microservices Par où commencer ? ▼ Le format du message ? ▼ Séparer le traitement en étapes ? ▼ Supporter plusieurs points d’entrée ? 6
  7. 7. REX Akka dans une architecture microservices 7
  8. 8. REX Akka dans une architecture microservices Akka Stream Back-pressured stream processing 8
  9. 9. REX Akka dans une architecture microservices Akka Stream Back pressure 9 Fast :) Slow :’( Publisher Subscriber
  10. 10. REX Akka dans une architecture microservices Akka Stream Back pressure 10 100op/sec 1op/sec Request(3)
  11. 11. REX Akka dans une architecture microservices Akka Stream Back pressure 11
  12. 12. REX Akka dans une architecture microservices Akka Stream avec un message broker ? 12 Business Logic Source Flow Sink topic message commit ?
  13. 13. REX Akka dans une architecture microservices Kafka ▼ Journal de messages ▼ Pub-Sub ▼ Distribué ▼ Rapide ▼ Persistance ▼ Consommation indépendante pour chaque client ▽ vitesses différentes 13 Web Service Integrator Web Service Integratortopic
  14. 14. REX Akka dans une architecture microservices Kafka offsets ▼ Chaque µ-service est un consommateur ▼ Attention au lag 14 Consu. Actor 2 Producer Consu. Actor 1 Consu. Actor 3 logs offset #923 offset #785 offset #1003 offset #1003
  15. 15. REX Akka dans une architecture microservices Consommateur avec akka-stream-kafka PlainSource vs CommitableSource 15 ▼ CommitableSource ▽ Obligation de commiter l’offset ▽ “at least once” ▼ PlainSource ▽ Stockage externe de l’offset ▽ Pas d’auto-commit par défaut
  16. 16. REX Akka dans une architecture microservices Consommateur avec akka-stream-kafka 16 Topic 1 Consumer
  17. 17. REX Akka dans une architecture microservices Producteur avec akka-stream-kafka PlainSink vs CommitableSink 17 ▼ CommitableSink ▽ Du consommateur au producteur ▽ Commit auprès de la source lorsque la production est finie ▼ PlainSink ▽ Pour un simple producteur ▽ Publie un message dans Kafka Producer Topic 1 Consumer Producer Topic 1 Topic 2
  18. 18. REX Akka dans une architecture microservices Producteur avec akka-stream-kafka 18 Producer Topic 1
  19. 19. REX Akka dans une architecture microservices Producteur avec akka-stream-kafka 19 Consumer Producer Topic 1 Topic 2
  20. 20. REX Akka dans une architecture microservices Producteur avec akka-stream-kafka Batch 20 Consumer Producer Topic 1 Topic 2
  21. 21. REX Akka dans une architecture microservices 21
  22. 22. REX Akka dans une architecture microservices 22 Flow Failure
  23. 23. REX Akka dans une architecture microservices 23 akka-stream -contrib Flow Failure
  24. 24. REX Akka dans une architecture microservices Review 24
  25. 25. REX Akka dans une architecture microservices Akka-http ▼ Complet ▼ Complètement asynchrone ▼ réactif ▼ Serveur et client ▼ Existe en version acteur ou akka-stream Flow[HttpRequest, HttpResponse] 25
  26. 26. REX Akka dans une architecture microservices Akka-http Processing pipeline 26ServerClient User App Akka HTTP User AppAkka HTTP Request Response Single HTTP connection
  27. 27. REX Akka dans une architecture microservices Akka-http client ▼ Différents niveaux de détail ▼ Appel en tant que Flow ▼ Appel en tant qu’acteur 27 Consu. Actor 2 Service logs
  28. 28. REX Akka dans une architecture microservices Akka-http client 28
  29. 29. REX Akka dans une architecture microservices Akka-http serveur 29 Service 2 Kafka Consu Health Checker topic 1 topic 2 HTTP topic 2
  30. 30. REX Akka dans une architecture microservices Akka-http création du serveur 30
  31. 31. REX Akka dans une architecture microservices Akka-http serveur : directives 31 Directive?
  32. 32. REX Akka dans une architecture microservices Akka-http serveur : directives 32
  33. 33. REX Akka dans une architecture microservices Review 33
  34. 34. REX Akka dans une architecture microservices Sockets avec akka-tcp 34
  35. 35. REX Akka dans une architecture microservices Akka-tcp ▼ Client et serveur ▼ Envoie et reçoit des “commandes” TCP ▽ ex: Bind, Connect, Close… ▼ Envoie et reçoit des données ▼ Permet d’implémenter n’importe quel protocole applicatif 35 Server TCP
  36. 36. REX Akka dans une architecture microservices Akka-tcp Côté client 36 Akka IO Client Actor Connect create register Connected Delegate (“connection”) Manages TCP I/O to/from remote Akka IO Client Actor Connect Delegate (“connection”) Handler Connected register handler create create
  37. 37. REX Akka dans une architecture microservices Akka-tcp Côté serveur 37 Akka IO Server Actor Bind Delegate (“connection”) Manages TCP I/O to/from remote Akka IO Server Actor Bind Delegate (“connection”) Handler Bound create register handler create register Bound
  38. 38. REX Akka dans une architecture microservices Akka-tcp Le protocole CB2A 38 ● Business Message #1 ● Business Message #2 ● Business Message #3 ● Business Message #4 ● Business Message #5 TCPPackets
  39. 39. REX Akka dans une architecture microservices Akka-tcp Tampon de paquets TCP def receive = buffering(sessionActor) orElse ???
  40. 40. REX Akka dans une architecture microservices Akka-tcp Choisir le bon message du potocole
  41. 41. REX Akka dans une architecture microservices Akka-tcp Dépliage (décodage en chaîne) des messages
  42. 42. REX Akka dans une architecture microservices Akka-tcp Dépliage (décodage en chaîne) des messages
  43. 43. REX Akka dans une architecture microservices Review 43
  44. 44. REX Akka dans une architecture microservices Production 44
  45. 45. REX Akka dans une architecture microservices Monitoring de Kafka Est-ce que mes consommateurs fonctionnent ? 45 ▼ __consumer_offset ▽ Interne à Kafka ▽ Stocker la métadonnée ▼ Burrow ▽ REST API ▽ Vérification du lag ▽ https://github.com/linkedin/Burrow
  46. 46. REX Akka dans une architecture microservices Logger avec un MDC 46
  47. 47. REX Akka dans une architecture microservices Logger avec un MDC 47
  48. 48. REX Akka dans une architecture microservices Logger avec un MDC 48 Actor MyOwnActor + mdc Slf4jMDCLoggingActor + aroundReceive
  49. 49. REX Akka dans une architecture microservices Executé dans un conteneur Docker 49 Container Kafka Consu Health Checker Topic 1 Topic 2
  50. 50. REX Akka dans une architecture microservices Packaging / Livraison 50 sbt publish sbt marathon:config publish to S3
  51. 51. REX Akka dans une architecture microservices Monitoring des acteurs 51 ▼ Kamon ▼ Yammer metrics ▼ InfluxDb Influx DB Actor Grafana Tele- graph Actor Tele- graph
  52. 52. REX Akka dans une architecture microservices Monitoring des acteurs 52
  53. 53. REX Akka dans une architecture microservices Au final 53
  54. 54. REX Akka dans une architecture microservices Littérature 54
  55. 55. REX Akka dans une architecture microservices Remerciements 55 Fabian Gutierrez FabGutierr fagossa
  56. 56. REX Akka dans une architecture microservices Merci ! Des questions ? https://github.com/fagossa/scalaio_akka/

×