Upload
cyrille-dupuydauby
View
250
Download
0
Embed Size (px)
Citation preview
#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
#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) sous le capot
• Poste (trop) peu sur son blog
• Aime (trop) le multithread
• Contributeur OSS (NFluent, Michonne, Rafting)
#DevoxxFR #networxx
@raphaelluta
• Adepte de Pareto
• Disciple de Little et Gunther
• Praticien de Murphy
• Défenseur de Tufte
• Pourfendeur de Metcalfe
#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 ;-)
#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
BriefingSituation 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…
#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
#DevoxxFR #networxx
#DevoxxFR #networxx
La réalité
#DevoxxFR #networxx
BriefingSituation 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…?
#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 agir en conséquence
D. La réponse D
#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
#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 agir en conséquence
D. La réponse D
#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 agir en conséquence
D. La réponse D
#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êtes Oracle
D. La réponse D
#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
#DevoxxFR #networxx
Temps de faire de la spéléologie…
#DevoxxFR #networxx
#DevoxxFR #networxx
HTTP 1.xBasé sur du texte
Orienté question réponse
Basé sur TCP/IP
#DevoxxFR #networxx
TCPTCP = Transmission Control Protocol
Orienté connexion et garantie de transmission (dans l’ordre)
Bidirectionnel et full duplex
‘Good citizenship’
TCP
#DevoxxFR #networxx
IPInternet 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
#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 couches réseaux doit faire partie de la boite à outils de
tout bon dev full-stack’
#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 données en otage ? UDP est-il un protocole voyou ? Pourquoi les fichiers ne se
transmettent-ils jamais à la vitesse attendue ?’
#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
TCPMé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 upEchanges fiables sur medium non-fiable
Grace à :
• Numérotation paquet
•Acquittements
•Flow control
•Congestion control
TCP
#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 regarde les flux backend
D. La réponse D
#DevoxxFR #networxx
Perdu !
#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
#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 petites requêtes sur
les services back
#DevoxxFR #networxx
Chatty interactions
#DevoxxFR #networxx
Problème #1 - Chatty interactions
Problème de granularité des APIs
Beaucoup trop de petits aller-retours
#DevoxxFR #networxx
Pour chaque appel de service
Latence totale = latence traitement requête par le service + latence réseau
#DevoxxFR #networxx
Pour chaque appel de service
Latence totale = latence traitement requête par le service + latence réseau
#DevoxxFR #networxx
Des frais de bouches réseaux qui commencent à peser…
SVC1
SVC3
SVC 2
…
Back end web (PHP)
latence réseaulatence service
#DevoxxFR #networxx
SVC1
SVC3
SVC 2
…
Back end web (PHP)
Surtout pour…
Des frais de bouches réseaux qui commencent à peser…
latence réseaulatence service
#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. ChunkyBatchons nos requêtes pour éviter de payer des frais de latence réseau systématiques
SVC1
SVC3
SVC 2
…
Back end web (PHP)
Chatty
SVC1
SVC3
SVC 2
…
Back end web (PHP)
Chunky
#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 marmotte…
#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 non-localhost
#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. Non, pas forcément
D. La réponse D
#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
#DevoxxFR #networxx
Le paradoxe du smart batching
#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)
#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%
Serialization: 2% Ethernet Switch: 4%
6%
User space
Kernel I/O $ $ $
User space
Kernel I/O$ $ $
LAN
#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
#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 à plusieurs
#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 space
Kernel I/O
User space
Kernel I/O
LAN
#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
#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, on s’active ! »
Ethan HUNT
#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
on réduit le couplage(URIs->hypermedia)
REST HATEOAS
#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 consommateurs)
Scenarii de résilience (FT)
Gère les connexions
Un bon MoM, ça peut toujours servir !
#DevoxxFR #networxx
MoM classique (*MQ)
Broker based PubSub (fan-out)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
topic A topic A
TCP
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A
topic A topic A
TCP
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
topic A
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
topic A
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
topic A
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A topic A
TCP
topic A
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
topic A
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
topic A
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
topic A
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A
topic A topic A
TCP
topic A
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A topic A
TCP
#DevoxxFR #networxx
MoM classique (*MQ)
Subscriber1
BrokerBroker
Broker (cluster)
PublisherSubscriber
2Subscriber
3
Broker based PubSub (fan-out)
topic A topic A
TCP
#DevoxxFR #networxx
Version plus équitable (UDP Multicast)
UDP
#DevoxxFR #networxx
MoM classique (*MQ)
Broker based PubSub (fan-out)
Subscriber1
Broker (cluster)
PublisherSubscriber
2Subscriber
3
topic A topic A
#DevoxxFR #networxx
MoM multicast
Pub/Sub sans Broker (fan-out équitable)
Subscriber1Publisher
Subscriber2
Subscriber3
topic A topic A
Network switch
UDP
#DevoxxFR #networxx
MoM multicast
Subscriber1Publisher
Subscriber2
Subscriber3
topic A topic A
Network switch
topic A
Pub/Sub sans Broker (fan-out équitable)
UDP
#DevoxxFR #networxx
MoM multicast
Subscriber1Publisher
Subscriber2
Subscriber3
topic A topic A
Network switch
topic A
Pub/Sub sans Broker (fan-out équitable)
UDP
#DevoxxFR #networxx
MoM multicast
Subscriber1Publisher
Subscriber2
Subscriber3
topic A topic A
Network switch
topic A
Pub/Sub sans Broker (fan-out équitable)
UDP
#DevoxxFR #networxx
MoM multicast
Subscriber1Publisher
Subscriber2
Subscriber3
topic A topic A
Network switch
topic A
Pub/Sub sans Broker (fan-out équitable)
UDP
#DevoxxFR #networxx
MoM multicast
Subscriber1Publisher
Subscriber2
Subscriber3
topic A topic A
Network switch
topic Atopic A
Pub/Sub sans Broker (fan-out équitable)
UDP
#DevoxxFR #networxx
MoM multicast
Subscriber1Publisher
Subscriber2
Subscriber3
topic A topic A
Network switch
topic Atopic A
Pub/Sub sans Broker (fan-out équitable)
UDP
#DevoxxFR #networxx
MoM multicast
Subscriber1Publisher
Subscriber2
Subscriber3
topic A topic A
Network switch
topic A topic A
Pub/Sub sans Broker (fan-out équitable)
UDP
#DevoxxFR #networxx
MoM multicast
Subscriber1Publisher
Subscriber2
Subscriber3
topic A topic A
Network switch
topic A topic A
Pub/Sub sans Broker (fan-out équitable)
UDP
#DevoxxFR #networxx
MoM multicast
Subscriber1Publisher
Subscriber2
Subscriber3
topic A topic A
Network switch
Pub/Sub sans Broker (fan-out équitable)
UDP
#DevoxxFR #networxx
UDP multicast plus performant et plus équitable certes, mais moins poli, moins fiable et beaucoup moins complet que TCP
#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. The network is secure.
5. Topology doesn't change.
6. There is one administrator.
7. Transport cost is zero.
8. The network is homogeneous.
#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.
#DevoxxFR #networxx
Merci !
#DevoxxFR #networxx
Q & A