#DevoxxFR #networxx
Consignes de sécurité
• Merci de vous assoir en priorité devant
• Et plutôt regroupés (des perturbatio...
#DevoxxFR #networxx
#DevoxxFR #networxx
NETWORXX
Cyrille Dupuydauby @cyrdup
Raphaël Luta @raphaelluta
Thomas Pierrain @tpierrain
#DevoxxFR #networxx
@cyrdup
• Approche ‘Pit of success’
• Parle (trop) fort
• Code depuis (trop) longtemps
• Regarde (trop...
#DevoxxFR #networxx
@raphaelluta
• Adepte de Pareto
• Disciple de Little et Gunther
• Praticien de Murphy
• Défenseur de T...
#DevoxxFR #networxx
@tpierrain
• use case driven 

(« range ce marteau en or ! »)
• Aime comprendre et donner du sens
à ce...
#DevoxxFR #networxx
Question
#DevoxxFR #networxx
A quand remonte la dernière
fois que vous avez regardé
derrière la prise?
#DevoxxFR #networxx
#DevoxxFR #networxx
Objectifs
• Une culture réseaux rafraîchie
• Enrichir votre boite à outils
• Un modele mental utile
#DevoxxFR #networxx
Prêts ?
#DevoxxFR #networxx
#DevoxxFR #networxx
La mission
#DevoxxFR #networxx
#DevoxxFR #networxx
Briefing
Situation d’urgence:
Notre client « Tapiocorp », spécialisé dans l’agriculture
biologique, à d...
#DevoxxFR #networxx
Les infos disponibles
• Un système utilisant les
dernières technologies
• Conçu et développé par les
m...
#DevoxxFR #networxx
#DevoxxFR #networxx
La réalité
#DevoxxFR #networxx
Briefing
Situation d’urgence:
Notre client « Tapiocorp », spécialisé dans l’agriculture biologique,
à d...
#DevoxxFR #networxx
Observé par Tapiocorp
Temps moyen d’affichage de la page :
23,742 secondes
#DevoxxFR #networxx
La doc disponible…
#DevoxxFR #networxx
#1 Souci
#DevoxxFR #networxx
C’est lent
#DevoxxFR #networxx
#DevoxxFR #networxx
Propositions
A. Réécrire le serveur PHP avec un vrai
langage
B. Améliorer le hardware
C. Mesurer et ag...
#DevoxxFR #networxx
Proposition
A. Réécrire le serveur PHP avec un vrai
langage
B. Améliorer le hardware
C. Mesurer et agi...
#DevoxxFR #networxx
Ca va être long
#DevoxxFR #networxx
Proposition
A. Réécrire le serveur PHP avec un vrai
langage
B. Améliorer le hardware
C. Mesurer et agi...
#DevoxxFR #networxx
c’est beau
mais c’est cher
#DevoxxFR #networxx
Et surtout, cela n’améliore
pas vraiment les choses…
#DevoxxFR #networxx
Proposition
A. Réécrire le serveur PHP avec un vrai
langage
B. Améliorer le hardware
C. Mesurer et agi...
#DevoxxFR #networxx
BIEN JOUÉ
#DevoxxFR #networxx
DON’T GUESS, MEASURE
#1
#DevoxxFR #networxx
#DevoxxFR #networxx
#DevoxxFR #networxx
Observé par Tapiocorp
Temps moyen d’affichage de la page :
23,742 secondes
#DevoxxFR #networxx
MOYENNE
PERCENTILES, PERCENTILES,
PERCENTILES…
#2
#DevoxxFR #networxx
Les résultats (vue user)
TTFB
Page loadMediane
#DevoxxFR #networxx
#DevoxxFR #networxx
Question
Qu’est ce qu’on
fait maintenant ?
#DevoxxFR #networxx
Propositions
A. Vraiment, je réécris le PHP, mais en
SCALA
B. Je révise mon TCP
C. J’optimise mes requ...
#DevoxxFR #networxx
Proposition
A. Vraiment, je réécris le PHP, mais en
SCALA
B. Je révise mon TCP
C. J’optimise mes requê...
#DevoxxFR #networxx
Temps de faire de la
spéléologie…
#DevoxxFR #networxx
#DevoxxFR #networxx
HTTP 1.x
Basé sur du texte
Orienté question réponse
Basé sur TCP/IP
#DevoxxFR #networxx
TCP
TCP = Transmission Control Protocol
Orienté connexion et garantie de transmission (dans l’ordre)
B...
#DevoxxFR #networxx
IP
Internet Protocol
Assure le transfert de paquets de données entre deux
ordinateurs
Garanti que l’en...
#DevoxxFR #networxx
Le réseau
Ethernet (Cable/Fibre)
Wifi (Air)
3G (Air)
#DevoxxFR #networxx
TCP: un gros tuyau? TCP
#DevoxxFR #networxx
Magique? TCP
#DevoxxFR #networxx
Magique!
TCP/IP permet de faire de la
transmission FIABLE sur un réseau
NON FIABLE
TCP
#DevoxxFR #networxx
Maintenant:

Redécouvrons TCP/IP
Façon Montessori !
TCPUDP
#DevoxxFR #networxx
Mise en jambes#1 UDP
#DevoxxFR #networxx
Prêts?
#DevoxxFR #networxx
Un peu d’aléa ?
#2.a UDP
#DevoxxFR #networxx
Quel est le message?
#DevoxxFR #networxx
‘A travers les réponses à ces questions,
nous verrons ensemble pourquoi la
maîtrise de toutes les couc...
#DevoxxFR #networxx
Bilan ?#2.a UDP
#DevoxxFR #networxx
Bilan
On a perdu des enveloppes
Quel désordre !
#2.a UDP
#DevoxxFR #networxx
Un peu d’ordre TCP
#2.b
#DevoxxFR #networxx
Quel est le message?
#DevoxxFR #networxx
‘Pourquoi Google ne respecte t-il pas le
protocole TCP ? Qui est Naggle, et pourquoi
garde t-il mes do...
#DevoxxFR #networxx
Un travail pour le client TCP
#3
#DevoxxFR #networxx
Bilan
on manque d’efficacité !
TCP
#3
#DevoxxFR #networxx
On coupe le client?#3
#DevoxxFR #networxx
Flow control et donc …
négociation
TCP
#4
#DevoxxFR #networxx
#DevoxxFR #networxx
TCP
#4
#DevoxxFR #networxx
TCP
#5 Réseau non trivial
#DevoxxFR #networxx
Slow start &
Congestion control
TCP
#5
#DevoxxFR #networxx
Méfiez vous des intermédiaires ! TCP
#DevoxxFR #networxx
TCP
Méfiez vous des intermédiaires
#DevoxxFR #networxx
Une connexion TCP peut se
couper sans que vous le sachiez
Dans les faits
#DevoxxFR #networxx
TCP Connection
is an abstraction!
#3
#DevoxxFR #networxx
Wrap up
Echanges fiables sur medium non-fiable
Grace à :
• Numérotation paquet
•Acquittements
•Flow cont...
#DevoxxFR #networxx
Back to business
#DevoxxFR #networxx
#DevoxxFR #networxx
#DevoxxFR #networxx
Propositions
A. Je transforme mon monolithe en
micro-services
B. Je regarde les flux front
C. Je regard...
#DevoxxFR #networxx
Perdu !
#DevoxxFR #networxx
Propositions
A. Je transforme mon monolithe en
micro-services
B. Je regarde les flux front
C. Je regard...
#DevoxxFR #networxx
Problème #1 (côté backends)
#DevoxxFR #networxx
Une idée ?
#DevoxxFR #networxx
Zoomons un
peu …
#DevoxxFR #networxx
Peu de données
échangées mais un
temps de réponse
important
1 requête client 

=> 

des centaines de
p...
#DevoxxFR #networxx
Chatty
interactions
#DevoxxFR #networxx
Problème #1 - Chatty interactions
Problème de granularité des APIs
Beaucoup trop de petits aller-retou...
#DevoxxFR #networxx
Pour chaque appel de service
Latence totale = latence traitement requête par le service + latence rése...
#DevoxxFR #networxx
Pour chaque appel de service
Latence totale = latence traitement requête par le service + latence rése...
#DevoxxFR #networxx
Des frais de bouches réseaux
qui commencent à peser…
SVC
1
SVC
3
SVC
2
…
Back end web
(PHP)
latence ré...
#DevoxxFR #networxx
SVC
1
SVC
3
SVC
2
…
Back end web
(PHP)
Surtout
pour…
Des frais de bouches réseaux
qui commencent à pes...
#DevoxxFR #networxx
Un ROI parfois discutable…
latence traitement
requête par le service
latence réseau

(hand shake TCP)
#DevoxxFR #networxx
La solution ?
#DevoxxFR #networxx
La solution ?
Du chunk !
#DevoxxFR #networxx
La solution ?
Euh… du chunk !
#DevoxxFR #networxx
Chatty vs. Chunky
Batchons nos requêtes pour éviter de payer des frais de
latence réseau systématiques...
#DevoxxFR #networxx
C’est une question de design
#DevoxxFR #networxx
Comme si l’exécution était locale…
La malédiction du remoting…
#DevoxxFR #networxx
Comme si l’exécution était locale…
La malédiction du remoting…
CORBA
RMI
EJB
WCF…
C’est ça ! et la mar...
#DevoxxFR #networxx
A une approche code-first…
Le réseau, cet inconnu…
#DevoxxFR #networxx
…préférons une approche contract-first
Désignons nos APIs en tenant
compte des contraintes d’un
monde n...
#DevoxxFR #networxx
Parfois, un simple geste peut vous
sauver
Le Data Transfer Object
(DTO)
#DevoxxFR #networxx
Question
Est-ce que le
batching rajoute
de la latence ?
#DevoxxFR #networxx
Propositions
A. Je m’en fout, tant qu’il y a des
monades…
B. Oui, le batching rajoute de la latence
C....
#DevoxxFR #networxx
Réponse
A. Je m’en fout, tant qu’il y a des
monades…
B. Oui, le batching rajoute de la latence
C. Non,...
#DevoxxFR #networxx
Le paradoxe du smart batching
#DevoxxFR #networxx
Budget latence
}
}
}
}
}
Send Kernel
40%
Send API: 6%
Serialization: 2%
Ethernet Switch: 4%
Receive Ke...
#DevoxxFR #networxx
Budget latence
User space
Kernel I/O
User space
Kernel I/O
LAN
#DevoxxFR #networxx
Budget latence
User space
Kernel I/O
User space
Kernel I/O
LAN
#DevoxxFR #networxx
Budget latence
User space
Kernel I/O
User space
Kernel I/O
LAN
#DevoxxFR #networxx
Budget latence
User space
Kernel I/O
User space
Kernel I/O
LAN
#DevoxxFR #networxx
Budget latence
User space
Kernel I/O
User space
Kernel I/O
LAN
#DevoxxFR #networxx
Budget latence
User space
Kernel I/O
User space
Kernel I/O
LAN
#DevoxxFR #networxx
Budget latence
User space
Kernel I/O
User space
Kernel I/O
LAN
#DevoxxFR #networxx
Budget latence
User space
Kernel I/O
User space
Kernel I/O
LAN
#DevoxxFR #networxx
Budget latence
User space
Kernel I/O
User space
Kernel I/O
LAN
#DevoxxFR #networxx
Budget latence
Le passage par le kernel est une grosse
partie du budget latence sur le LAN
40% 40%
6%
...
#DevoxxFR #networxx
Smart batching
« … when batching is done correctly,
not only does it increase throughput,
it can also ...
#DevoxxFR #networxx
Smart batching
source: Martin THOMPSON
(Mechanical Sympathy blog)
#DevoxxFR #networxx
Smart batching
Si chaque passage coûte cher en
latence, on a intérêt à partager le
prix du péage à plu...
#DevoxxFR #networxx
Ou alors…
on peut aussi gruger ;-)
#DevoxxFR #networxx
Kernel bypass
Comme le passage par le kernel coute cher…
Serialization: 2%
Ethernet Switch: 4%
User sp...
#DevoxxFR #networxx
Kernel bypass
… on évite de passer par le kernel 

(nécessite des NICs spécifiques)
User space
Kernel I...
#DevoxxFR #networxx
Problème #2 (côté backends)
#DevoxxFR #networxx
« EN FAIT…
LA TAILLE, ÇA
COMPTE. »
#DevoxxFR #networxx
Attention à la taille
des messages !
et donc au format
de sérialization
#DevoxxFR #networxx
Problème #2 - La taille des messages
« SOAP XML ? je pense qu’on peut
trouver mieux les gars… 

Allez,...
#DevoxxFR #networxx
Le poids du savon…
#DevoxxFR #networxx
Le poids du savon…
#DevoxxFR #networxx
Le poids du savon…
#DevoxxFR #networxx
Le poids du savon…
#DevoxxFR #networxx
Le bon outil pour le bon usage
JSON, Protobuf, FlatBuffers, AVRO, SBE,…
#DevoxxFR #networxx
Problème #3 (côté backends)
#DevoxxFR #networxx
RPC

(Remote Procedure Call)
BURN THE SYNCHRONOUS WITCH!
#DevoxxFR #networxx
Make all things Asynchronous
#DevoxxFR #networxx
#DevoxxFR #networxx
Paradigmes
RPC paradigm
on réduit le couplage

(binaire->XML)
CORBA - RMI - EJB SOAP WS
REST paradigm
...
#DevoxxFR #networxx
Paradigmes
MoM paradigm
on réduit le couplage

(API->protocol)
JMS AMQP
#DevoxxFR #networxx
Effectivement, on
n’est pas obligé de
n’utiliser que …
#DevoxxFR #networxx
REST/JSON
#DevoxxFR #networxx
Meilleur découplage (topic based)
Absorbe la charge (de distribution)
Load Balancing (des consommateur...
#DevoxxFR #networxx
MoM classique (*MQ)
Broker based PubSub (fan-out)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publishe...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber
1
Broker
Broker
Broker
(cluster)
Publisher
Subscriber
2
Subscriber
3
Br...
#DevoxxFR #networxx
Version plus équitable
(UDP Multicast)
UDP
#DevoxxFR #networxx
MoM classique (*MQ)
Broker based PubSub (fan-out)
Subscriber
1
Broker
(cluster)
Publisher
Subscriber
2...
#DevoxxFR #networxx
MoM multicast
Pub/Sub sans Broker (fan-out équitable)
Subscriber
1
Publisher
Subscriber
2
Subscriber
3...
#DevoxxFR #networxx
MoM multicast
Subscriber
1
Publisher
Subscriber
2
Subscriber
3
topic A topic A
Network switch
topic A
...
#DevoxxFR #networxx
MoM multicast
Subscriber
1
Publisher
Subscriber
2
Subscriber
3
topic A topic A
Network switch
topic A
...
#DevoxxFR #networxx
MoM multicast
Subscriber
1
Publisher
Subscriber
2
Subscriber
3
topic A topic A
Network switch
topic A
...
#DevoxxFR #networxx
MoM multicast
Subscriber
1
Publisher
Subscriber
2
Subscriber
3
topic A topic A
Network switch
topic A
...
#DevoxxFR #networxx
MoM multicast
Subscriber
1
Publisher
Subscriber
2
Subscriber
3
topic A topic A
Network switch
topic At...
#DevoxxFR #networxx
MoM multicast
Subscriber
1
Publisher
Subscriber
2
Subscriber
3
topic A topic A
Network switch
topic At...
#DevoxxFR #networxx
MoM multicast
Subscriber
1
Publisher
Subscriber
2
Subscriber
3
topic A topic A
Network switch
topic A ...
#DevoxxFR #networxx
MoM multicast
Subscriber
1
Publisher
Subscriber
2
Subscriber
3
topic A topic A
Network switch
topic A ...
#DevoxxFR #networxx
MoM multicast
Subscriber
1
Publisher
Subscriber
2
Subscriber
3
topic A topic A
Network switch
Pub/Sub ...
#DevoxxFR #networxx
UDP multicast plus performant et plus
équitable certes, mais moins poli, moins
fiable et beaucoup moins...
#DevoxxFR #networxx
Une grosse différence
TCP: consumer-paced
UDP: source-paced
#DevoxxFR #networxx
Une grosse différence
TCP: consumer-paced
limité par le plus lent
UDP: source-paced
on lâche les ours
#DevoxxFR #networxx
#DevoxxFR #networxx
PAUSE
TCP
#DevoxxFR #networxx
Wrap up
#DevoxxFR #networxx
Une culture réseaux rafraîchie
• TCP / IP en action
• Les types de réseaux
• HTTP .*
#DevoxxFR #networxx
• MoM
• Techniques de mesures
• Outils ligne de commande
Enrichir votre boite à outils
#DevoxxFR #networxx
Un modele mental utile
• L’impact latence / bande
passante
• Connecté mais non…
#DevoxxFR #networxx
En parlant de modèle mental…
#DevoxxFR
8 FALLACIES OF
DISTRIBUTED SYSTEMS
Deutsch & Gosling
#DevoxxFR
#DevoxxFR
Peter Deutsch &
James Gosling
8 FALLACIES OF
DISTRIBUTED SYSTEMS
#DevoxxFR
8 FALLACIES OF
DISTRIBUTED SYSTEMS
1. The network is reliable.
2. Latency is zero.
3. Bandwidth is infinite.
4. T...
#DevoxxFR
8 FALLACIES OF
DISTRIBUTED SYSTEMS
1. The network is reliable.
2. Latency is zero.
3. Bandwidth is infinite.
4. T...
#DevoxxFR #networxx
Merci !
#DevoxxFR #networxx
Q & A
Prochain SlideShare
Chargement dans…5
×

Networxx (intro et fin)

245 vues

Publié le

Fondamentaux du réseaux. Intro et conclusion de l'université faite avec @tpierrain & @raphaelluta à Devoxx Paris 2016

Publié dans : Logiciels
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
245
Sur SlideShare
0
Issues des intégrations
0
Intégrations
18
Actions
Partages
0
Téléchargements
39
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Networxx (intro et fin)

  1. 1. #DevoxxFR #networxx Consignes de sécurité • Merci de vous assoir en priorité devant • Et plutôt regroupés (des perturbations sont à prévoir) • Vos accompagnateurs vont bientôt vous expliquer comment utiliser les coupons de survie qui se trouvent sur chacun de vos sièges NETWORXX Airlines
  2. 2. #DevoxxFR #networxx
  3. 3. #DevoxxFR #networxx NETWORXX Cyrille Dupuydauby @cyrdup Raphaël Luta @raphaelluta Thomas Pierrain @tpierrain
  4. 4. #DevoxxFR #networxx @cyrdup • Approche ‘Pit of success’ • Parle (trop) fort • Code depuis (trop) longtemps • Regarde (trop) sous le capot • Poste (trop) peu sur son blog • Aime (trop) le multithread • Contributeur OSS (NFluent, Michonne, Rafting)
  5. 5. #DevoxxFR #networxx @raphaelluta • Adepte de Pareto • Disciple de Little et Gunther • Praticien de Murphy • Défenseur de Tufte • Pourfendeur de Metcalfe
  6. 6. #DevoxxFR #networxx @tpierrain • use case driven 
 (« range ce marteau en or ! ») • Aime comprendre et donner du sens à ce qu’il fait (métier, technique) • Mélange les genres et les cultures (DDD & low latency par exemple) • Organise des trucs de geeks le midi • A joué en prod avec beaucoup de MoM ;-)
  7. 7. #DevoxxFR #networxx Question
  8. 8. #DevoxxFR #networxx A quand remonte la dernière fois que vous avez regardé derrière la prise?
  9. 9. #DevoxxFR #networxx
  10. 10. #DevoxxFR #networxx Objectifs • Une culture réseaux rafraîchie • Enrichir votre boite à outils • Un modele mental utile
  11. 11. #DevoxxFR #networxx Prêts ?
  12. 12. #DevoxxFR #networxx
  13. 13. #DevoxxFR #networxx La mission
  14. 14. #DevoxxFR #networxx
  15. 15. #DevoxxFR #networxx Briefing Situation d’urgence: Notre client « Tapiocorp », spécialisé dans l’agriculture biologique, à des gros problèmes de performance sur son site Web L’hypothèse la plus probable à cette heure est une cyber attaque organisée par un groupe terroriste (probablement financé par un géant de l’agro-alimentaire) Des ramifications politiques sont à envisager…
  16. 16. #DevoxxFR #networxx Les infos disponibles • Un système utilisant les dernières technologies • Conçu et développé par les meilleurs experts • Un frontal web masquant une plate forme back office de pointe
  17. 17. #DevoxxFR #networxx
  18. 18. #DevoxxFR #networxx La réalité
  19. 19. #DevoxxFR #networxx Briefing Situation d’urgence: Notre client « Tapiocorp », spécialisé dans l’agriculture biologique, à des gros problèmes de performance sur son site Web L’hypothèse la plus probable à cette heure est une cyber attaque organisée par un groupe terroriste (probablement financé par un géant de l’agro-alimentaire) Des ramifications politiques sont à envisager… En fait, c’est juste très lent, mais pourquoi…?
  20. 20. #DevoxxFR #networxx Observé par Tapiocorp Temps moyen d’affichage de la page : 23,742 secondes
  21. 21. #DevoxxFR #networxx La doc disponible…
  22. 22. #DevoxxFR #networxx #1 Souci
  23. 23. #DevoxxFR #networxx C’est lent #DevoxxFR #networxx
  24. 24. #DevoxxFR #networxx Propositions A. Réécrire le serveur PHP avec un vrai langage B. Améliorer le hardware C. Mesurer et agir en conséquence D. La réponse D
  25. 25. #DevoxxFR #networxx Proposition A. Réécrire le serveur PHP avec un vrai langage B. Améliorer le hardware C. Mesurer et agir en conséquence D. La réponse D
  26. 26. #DevoxxFR #networxx Ca va être long
  27. 27. #DevoxxFR #networxx Proposition A. Réécrire le serveur PHP avec un vrai langage B. Améliorer le hardware C. Mesurer et agir en conséquence D. La réponse D
  28. 28. #DevoxxFR #networxx c’est beau mais c’est cher
  29. 29. #DevoxxFR #networxx Et surtout, cela n’améliore pas vraiment les choses…
  30. 30. #DevoxxFR #networxx Proposition A. Réécrire le serveur PHP avec un vrai langage B. Améliorer le hardware C. Mesurer et agir en conséquence D. La réponse D
  31. 31. #DevoxxFR #networxx BIEN JOUÉ
  32. 32. #DevoxxFR #networxx DON’T GUESS, MEASURE #1
  33. 33. #DevoxxFR #networxx
  34. 34. #DevoxxFR #networxx
  35. 35. #DevoxxFR #networxx Observé par Tapiocorp Temps moyen d’affichage de la page : 23,742 secondes
  36. 36. #DevoxxFR #networxx MOYENNE PERCENTILES, PERCENTILES, PERCENTILES… #2
  37. 37. #DevoxxFR #networxx Les résultats (vue user) TTFB Page loadMediane
  38. 38. #DevoxxFR #networxx
  39. 39. #DevoxxFR #networxx Question Qu’est ce qu’on fait maintenant ?
  40. 40. #DevoxxFR #networxx Propositions A. Vraiment, je réécris le PHP, mais en SCALA B. Je révise mon TCP C. J’optimise mes requêtes Oracle D. La réponse D
  41. 41. #DevoxxFR #networxx Proposition A. Vraiment, je réécris le PHP, mais en SCALA B. Je révise mon TCP C. J’optimise mes requêtes Oracle D. La réponse D
  42. 42. #DevoxxFR #networxx Temps de faire de la spéléologie…
  43. 43. #DevoxxFR #networxx
  44. 44. #DevoxxFR #networxx HTTP 1.x Basé sur du texte Orienté question réponse Basé sur TCP/IP
  45. 45. #DevoxxFR #networxx TCP TCP = Transmission Control Protocol Orienté connexion et garantie de transmission (dans l’ordre) Bidirectionnel et full duplex ‘Good citizenship’ TCP
  46. 46. #DevoxxFR #networxx IP Internet Protocol Assure le transfert de paquets de données entre deux ordinateurs Garanti que l’en-tête du paquet est valide Et pis c’est tout
  47. 47. #DevoxxFR #networxx Le réseau Ethernet (Cable/Fibre) Wifi (Air) 3G (Air)
  48. 48. #DevoxxFR #networxx TCP: un gros tuyau? TCP
  49. 49. #DevoxxFR #networxx Magique? TCP
  50. 50. #DevoxxFR #networxx Magique! TCP/IP permet de faire de la transmission FIABLE sur un réseau NON FIABLE TCP
  51. 51. #DevoxxFR #networxx Maintenant:
 Redécouvrons TCP/IP Façon Montessori ! TCPUDP
  52. 52. #DevoxxFR #networxx Mise en jambes#1 UDP
  53. 53. #DevoxxFR #networxx Prêts?
  54. 54. #DevoxxFR #networxx Un peu d’aléa ? #2.a UDP
  55. 55. #DevoxxFR #networxx Quel est le message?
  56. 56. #DevoxxFR #networxx ‘A travers les réponses à ces questions, nous verrons ensemble pourquoi la maîtrise de toutes les couches réseaux doit faire partie de la boite à outils de tout bon dev full-stack’
  57. 57. #DevoxxFR #networxx Bilan ?#2.a UDP
  58. 58. #DevoxxFR #networxx Bilan On a perdu des enveloppes Quel désordre ! #2.a UDP
  59. 59. #DevoxxFR #networxx Un peu d’ordre TCP #2.b
  60. 60. #DevoxxFR #networxx Quel est le message?
  61. 61. #DevoxxFR #networxx ‘Pourquoi Google ne respecte t-il pas le protocole TCP ? Qui est Naggle, et pourquoi garde t-il mes données en otage ? UDP est-il un protocole voyou ? Pourquoi les fichiers ne se transmettent-ils jamais à la vitesse attendue ?’
  62. 62. #DevoxxFR #networxx Un travail pour le client TCP #3
  63. 63. #DevoxxFR #networxx Bilan on manque d’efficacité ! TCP #3
  64. 64. #DevoxxFR #networxx On coupe le client?#3
  65. 65. #DevoxxFR #networxx Flow control et donc … négociation TCP #4
  66. 66. #DevoxxFR #networxx
  67. 67. #DevoxxFR #networxx TCP #4
  68. 68. #DevoxxFR #networxx TCP #5 Réseau non trivial
  69. 69. #DevoxxFR #networxx Slow start & Congestion control TCP #5
  70. 70. #DevoxxFR #networxx Méfiez vous des intermédiaires ! TCP
  71. 71. #DevoxxFR #networxx TCP Méfiez vous des intermédiaires
  72. 72. #DevoxxFR #networxx Une connexion TCP peut se couper sans que vous le sachiez Dans les faits
  73. 73. #DevoxxFR #networxx TCP Connection is an abstraction! #3
  74. 74. #DevoxxFR #networxx Wrap up Echanges fiables sur medium non-fiable Grace à : • Numérotation paquet •Acquittements •Flow control •Congestion control TCP
  75. 75. #DevoxxFR #networxx Back to business
  76. 76. #DevoxxFR #networxx
  77. 77. #DevoxxFR #networxx
  78. 78. #DevoxxFR #networxx Propositions A. Je transforme mon monolithe en micro-services B. Je regarde les flux front C. Je regarde les flux backend D. La réponse D
  79. 79. #DevoxxFR #networxx Perdu !
  80. 80. #DevoxxFR #networxx Propositions A. Je transforme mon monolithe en micro-services B. Je regarde les flux front C. Je regarde les flux backend D. La réponse D
  81. 81. #DevoxxFR #networxx Problème #1 (côté backends)
  82. 82. #DevoxxFR #networxx Une idée ?
  83. 83. #DevoxxFR #networxx Zoomons un peu …
  84. 84. #DevoxxFR #networxx Peu de données échangées mais un temps de réponse important 1 requête client 
 => 
 des centaines de petites requêtes sur les services back
  85. 85. #DevoxxFR #networxx Chatty interactions
  86. 86. #DevoxxFR #networxx Problème #1 - Chatty interactions Problème de granularité des APIs Beaucoup trop de petits aller-retours
  87. 87. #DevoxxFR #networxx Pour chaque appel de service Latence totale = latence traitement requête par le service + latence réseau
  88. 88. #DevoxxFR #networxx Pour chaque appel de service Latence totale = latence traitement requête par le service + latence réseau
  89. 89. #DevoxxFR #networxx Des frais de bouches réseaux qui commencent à peser… SVC 1 SVC 3 SVC 2 … Back end web (PHP) latence réseaulatence service
  90. 90. #DevoxxFR #networxx SVC 1 SVC 3 SVC 2 … Back end web (PHP) Surtout pour… Des frais de bouches réseaux qui commencent à peser… latence réseaulatence service
  91. 91. #DevoxxFR #networxx Un ROI parfois discutable… latence traitement requête par le service latence réseau
 (hand shake TCP)
  92. 92. #DevoxxFR #networxx La solution ?
  93. 93. #DevoxxFR #networxx La solution ? Du chunk !
  94. 94. #DevoxxFR #networxx La solution ? Euh… du chunk !
  95. 95. #DevoxxFR #networxx Chatty vs. Chunky Batchons nos requêtes pour éviter de payer des frais de latence réseau systématiques SVC 1 SVC 3 SVC 2 … Back end web (PHP) Chatty SVC 1 SVC 3 SVC 2 … Back end web (PHP) Chunky
  96. 96. #DevoxxFR #networxx C’est une question de design
  97. 97. #DevoxxFR #networxx Comme si l’exécution était locale… La malédiction du remoting…
  98. 98. #DevoxxFR #networxx Comme si l’exécution était locale… La malédiction du remoting… CORBA RMI EJB WCF… C’est ça ! et la marmotte…
  99. 99. #DevoxxFR #networxx A une approche code-first… Le réseau, cet inconnu…
  100. 100. #DevoxxFR #networxx …préférons une approche contract-first Désignons nos APIs en tenant compte des contraintes d’un monde non-localhost
  101. 101. #DevoxxFR #networxx Parfois, un simple geste peut vous sauver Le Data Transfer Object (DTO)
  102. 102. #DevoxxFR #networxx Question Est-ce que le batching rajoute de la latence ?
  103. 103. #DevoxxFR #networxx Propositions A. Je m’en fout, tant qu’il y a des monades… B. Oui, le batching rajoute de la latence C. Non, pas forcément D. La réponse D
  104. 104. #DevoxxFR #networxx Réponse A. Je m’en fout, tant qu’il y a des monades… B. Oui, le batching rajoute de la latence C. Non, pas forcément D. La réponse D
  105. 105. #DevoxxFR #networxx Le paradoxe du smart batching
  106. 106. #DevoxxFR #networxx Budget latence } } } } } Send Kernel 40% Send API: 6% Serialization: 2% Ethernet Switch: 4% Receive Kernel 40% Receive API: 6% Latences relatives sur la route d’un messaging low latency (LAN)
  107. 107. #DevoxxFR #networxx Budget latence User space Kernel I/O User space Kernel I/O LAN
  108. 108. #DevoxxFR #networxx Budget latence User space Kernel I/O User space Kernel I/O LAN
  109. 109. #DevoxxFR #networxx Budget latence User space Kernel I/O User space Kernel I/O LAN
  110. 110. #DevoxxFR #networxx Budget latence User space Kernel I/O User space Kernel I/O LAN
  111. 111. #DevoxxFR #networxx Budget latence User space Kernel I/O User space Kernel I/O LAN
  112. 112. #DevoxxFR #networxx Budget latence User space Kernel I/O User space Kernel I/O LAN
  113. 113. #DevoxxFR #networxx Budget latence User space Kernel I/O User space Kernel I/O LAN
  114. 114. #DevoxxFR #networxx Budget latence User space Kernel I/O User space Kernel I/O LAN
  115. 115. #DevoxxFR #networxx Budget latence User space Kernel I/O User space Kernel I/O LAN
  116. 116. #DevoxxFR #networxx Budget latence Le passage par le kernel est une grosse partie du budget latence sur le LAN 40% 40% 6% Serialization: 2% Ethernet Switch: 4% 6% User space Kernel I/O $ $ $ User space Kernel I/O$ $ $ LAN
  117. 117. #DevoxxFR #networxx Smart batching « … when batching is done correctly, not only does it increase throughput, it can also reduce average latency and keep it consistent. » Martin THOMPSON
  118. 118. #DevoxxFR #networxx Smart batching source: Martin THOMPSON (Mechanical Sympathy blog)
  119. 119. #DevoxxFR #networxx Smart batching Si chaque passage coûte cher en latence, on a intérêt à partager le prix du péage à plusieurs
  120. 120. #DevoxxFR #networxx Ou alors… on peut aussi gruger ;-)
  121. 121. #DevoxxFR #networxx Kernel bypass Comme le passage par le kernel coute cher… Serialization: 2% Ethernet Switch: 4% User space Kernel I/O User space Kernel I/O LAN
  122. 122. #DevoxxFR #networxx Kernel bypass … on évite de passer par le kernel 
 (nécessite des NICs spécifiques) User space Kernel I/O User space Kernel I/O LAN
  123. 123. #DevoxxFR #networxx Problème #2 (côté backends)
  124. 124. #DevoxxFR #networxx « EN FAIT… LA TAILLE, ÇA COMPTE. »
  125. 125. #DevoxxFR #networxx Attention à la taille des messages ! et donc au format de sérialization
  126. 126. #DevoxxFR #networxx Problème #2 - La taille des messages « SOAP XML ? je pense qu’on peut trouver mieux les gars… 
 Allez, on s’active ! » Ethan HUNT
  127. 127. #DevoxxFR #networxx Le poids du savon…
  128. 128. #DevoxxFR #networxx Le poids du savon…
  129. 129. #DevoxxFR #networxx Le poids du savon…
  130. 130. #DevoxxFR #networxx Le poids du savon…
  131. 131. #DevoxxFR #networxx Le bon outil pour le bon usage JSON, Protobuf, FlatBuffers, AVRO, SBE,…
  132. 132. #DevoxxFR #networxx Problème #3 (côté backends)
  133. 133. #DevoxxFR #networxx RPC
 (Remote Procedure Call) BURN THE SYNCHRONOUS WITCH!
  134. 134. #DevoxxFR #networxx Make all things Asynchronous
  135. 135. #DevoxxFR #networxx
  136. 136. #DevoxxFR #networxx Paradigmes RPC paradigm on réduit le couplage
 (binaire->XML) CORBA - RMI - EJB SOAP WS REST paradigm on réduit le couplage
 (URIs->hypermedia) REST HATEOAS
  137. 137. #DevoxxFR #networxx Paradigmes MoM paradigm on réduit le couplage
 (API->protocol) JMS AMQP
  138. 138. #DevoxxFR #networxx Effectivement, on n’est pas obligé de n’utiliser que …
  139. 139. #DevoxxFR #networxx REST/JSON
  140. 140. #DevoxxFR #networxx Meilleur découplage (topic based) Absorbe la charge (de distribution) Load Balancing (des consommateurs) Scenarii de résilience (FT) Gère les connexions Un bon MoM, ça peut toujours servir !
  141. 141. #DevoxxFR #networxx MoM classique (*MQ) Broker based PubSub (fan-out) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 topic A topic A TCP
  142. 142. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP
  143. 143. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP
  144. 144. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP
  145. 145. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP
  146. 146. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP
  147. 147. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A topic A TCP
  148. 148. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP topic A
  149. 149. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP topic A
  150. 150. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP topic A
  151. 151. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A TCP topic A
  152. 152. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP topic A
  153. 153. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP topic A
  154. 154. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP topic A
  155. 155. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A topic A TCP topic A
  156. 156. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A TCP
  157. 157. #DevoxxFR #networxx MoM classique (*MQ) Subscriber 1 Broker Broker Broker (cluster) Publisher Subscriber 2 Subscriber 3 Broker based PubSub (fan-out) topic A topic A TCP
  158. 158. #DevoxxFR #networxx Version plus équitable (UDP Multicast) UDP
  159. 159. #DevoxxFR #networxx MoM classique (*MQ) Broker based PubSub (fan-out) Subscriber 1 Broker (cluster) Publisher Subscriber 2 Subscriber 3 topic A topic A
  160. 160. #DevoxxFR #networxx MoM multicast Pub/Sub sans Broker (fan-out équitable) Subscriber 1 Publisher Subscriber 2 Subscriber 3 topic A topic A Network switch UDP
  161. 161. #DevoxxFR #networxx MoM multicast Subscriber 1 Publisher Subscriber 2 Subscriber 3 topic A topic A Network switch topic A Pub/Sub sans Broker (fan-out équitable) UDP
  162. 162. #DevoxxFR #networxx MoM multicast Subscriber 1 Publisher Subscriber 2 Subscriber 3 topic A topic A Network switch topic A Pub/Sub sans Broker (fan-out équitable) UDP
  163. 163. #DevoxxFR #networxx MoM multicast Subscriber 1 Publisher Subscriber 2 Subscriber 3 topic A topic A Network switch topic A Pub/Sub sans Broker (fan-out équitable) UDP
  164. 164. #DevoxxFR #networxx MoM multicast Subscriber 1 Publisher Subscriber 2 Subscriber 3 topic A topic A Network switch topic A Pub/Sub sans Broker (fan-out équitable) UDP
  165. 165. #DevoxxFR #networxx MoM multicast Subscriber 1 Publisher Subscriber 2 Subscriber 3 topic A topic A Network switch topic Atopic A Pub/Sub sans Broker (fan-out équitable) UDP
  166. 166. #DevoxxFR #networxx MoM multicast Subscriber 1 Publisher Subscriber 2 Subscriber 3 topic A topic A Network switch topic Atopic A Pub/Sub sans Broker (fan-out équitable) UDP
  167. 167. #DevoxxFR #networxx MoM multicast Subscriber 1 Publisher Subscriber 2 Subscriber 3 topic A topic A Network switch topic A topic A Pub/Sub sans Broker (fan-out équitable) UDP
  168. 168. #DevoxxFR #networxx MoM multicast Subscriber 1 Publisher Subscriber 2 Subscriber 3 topic A topic A Network switch topic A topic A Pub/Sub sans Broker (fan-out équitable) UDP
  169. 169. #DevoxxFR #networxx MoM multicast Subscriber 1 Publisher Subscriber 2 Subscriber 3 topic A topic A Network switch Pub/Sub sans Broker (fan-out équitable) UDP
  170. 170. #DevoxxFR #networxx UDP multicast plus performant et plus équitable certes, mais moins poli, moins fiable et beaucoup moins complet que TCP
  171. 171. #DevoxxFR #networxx Une grosse différence TCP: consumer-paced UDP: source-paced
  172. 172. #DevoxxFR #networxx Une grosse différence TCP: consumer-paced limité par le plus lent UDP: source-paced on lâche les ours
  173. 173. #DevoxxFR #networxx
  174. 174. #DevoxxFR #networxx PAUSE TCP
  175. 175. #DevoxxFR #networxx Wrap up
  176. 176. #DevoxxFR #networxx Une culture réseaux rafraîchie • TCP / IP en action • Les types de réseaux • HTTP .*
  177. 177. #DevoxxFR #networxx • MoM • Techniques de mesures • Outils ligne de commande Enrichir votre boite à outils
  178. 178. #DevoxxFR #networxx Un modele mental utile • L’impact latence / bande passante • Connecté mais non…
  179. 179. #DevoxxFR #networxx En parlant de modèle mental…
  180. 180. #DevoxxFR 8 FALLACIES OF DISTRIBUTED SYSTEMS Deutsch & Gosling
  181. 181. #DevoxxFR
  182. 182. #DevoxxFR Peter Deutsch & James Gosling 8 FALLACIES OF DISTRIBUTED SYSTEMS
  183. 183. #DevoxxFR 8 FALLACIES OF DISTRIBUTED SYSTEMS 1. The network is reliable. 2. Latency is zero. 3. Bandwidth is infinite. 4. The network is secure. 5. Topology doesn't change. 6. There is one administrator. 7. Transport cost is zero. 8. The network is homogeneous.
  184. 184. #DevoxxFR 8 FALLACIES OF DISTRIBUTED SYSTEMS 1. The network is reliable. 2. Latency is zero. 3. Bandwidth is infinite. 4. The network is secure. 5. Topology doesn't change. 6. There is one administrator. 7. Transport cost is zero. 8. The network is homogeneous.
  185. 185. #DevoxxFR #networxx Merci !
  186. 186. #DevoxxFR #networxx Q & A

×