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.
2. REX Akka dans une architecture microservices
Présentations...
2
Joachim Rousseau
__jro
joe-mojo
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. Contexte
REX Akka dans une architecture microservices
4
Serv. 2
Serv. 3
Serv. 1
Serv. 4
Serv. 5
Serv. 6
TCP
TCP
HTTP
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
8. REX Akka dans une architecture microservices
Akka Stream
Back-pressured stream processing
8
9. REX Akka dans une architecture microservices
Akka Stream
Back pressure
9
Fast :)
Slow :’(
Publisher
Subscriber
10. REX Akka dans une architecture microservices
Akka Stream
Back pressure
10
100op/sec
1op/sec
Request(3)
11. REX Akka dans une architecture microservices
Akka Stream
Back pressure
11
12. REX Akka dans une architecture microservices
Akka Stream avec un message broker ?
12
Business Logic
Source Flow Sink
topic
message
commit
?
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. 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. 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. REX Akka dans une architecture microservices
Consommateur avec akka-stream-kafka
16
Topic 1 Consumer
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. REX Akka dans une architecture microservices
Producteur avec akka-stream-kafka
18
Producer
Topic
1
19. REX Akka dans une architecture microservices
Producteur avec akka-stream-kafka
19
Consumer
Producer
Topic
1
Topic
2
20. REX Akka dans une architecture microservices
Producteur avec akka-stream-kafka
Batch
20
Consumer
Producer
Topic
1
Topic
2
22. REX Akka dans une architecture microservices
22
Flow
Failure
23. REX Akka dans une architecture microservices
23
akka-stream
-contrib
Flow
Failure
24. REX Akka dans une architecture microservices
Review
24
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. REX Akka dans une architecture microservices
Akka-http
Processing pipeline
26ServerClient
User App Akka
HTTP
User AppAkka
HTTP
Request
Response
Single HTTP connection
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. REX Akka dans une architecture microservices
Akka-http
client
28
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. REX Akka dans une architecture microservices
Akka-http
création du serveur
30
31. REX Akka dans une architecture microservices
Akka-http
serveur : directives
31
Directive?
32. REX Akka dans une architecture microservices
Akka-http
serveur : directives
32
33. REX Akka dans une architecture microservices
Review
33
34. REX Akka dans une architecture microservices
Sockets
avec akka-tcp
34
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. 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. 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. 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. REX Akka dans une architecture microservices
Akka-tcp
Tampon de paquets TCP
def receive = buffering(sessionActor) orElse ???
40. REX Akka dans une architecture microservices
Akka-tcp
Choisir le bon message du potocole
41. REX Akka dans une architecture microservices
Akka-tcp
Dépliage (décodage en chaîne) des messages
42. REX Akka dans une architecture microservices
Akka-tcp
Dépliage (décodage en chaîne) des messages
43. REX Akka dans une architecture microservices
Review
43
44. REX Akka dans une architecture microservices
Production
44
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. REX Akka dans une architecture microservices
Logger avec un MDC
46
47. REX Akka dans une architecture microservices
Logger avec un MDC
47
48. REX Akka dans une architecture microservices
Logger avec un MDC
48
Actor MyOwnActor
+ mdc
Slf4jMDCLoggingActor
+ aroundReceive
49. REX Akka dans une architecture microservices
Executé dans un conteneur Docker
49
Container
Kafka
Consu
Health
Checker
Topic
1
Topic
2
50. REX Akka dans une architecture microservices
Packaging / Livraison
50
sbt publish sbt marathon:config publish to S3
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. REX Akka dans une architecture microservices
Monitoring des acteurs
52
53. REX Akka dans une architecture microservices
Au final
53
54. REX Akka dans une architecture microservices
Littérature
54
55. REX Akka dans une architecture microservices
Remerciements
55
Fabian Gutierrez
FabGutierr
fagossa
56. REX Akka dans une architecture microservices
Merci !
Des questions ?
https://github.com/fagossa/scalaio_akka/