SlideShare une entreprise Scribd logo
1  sur  46
Télécharger pour lire hors ligne
#DevoxxFR
Devoxx France 2018
@David_Caramelo
@CarlesSistare
1
gRPC, ECHANGES A HAUTE FREQUENCE !
#DevoxxFR
Carles Sistaré
Co-Founder - Tribe IT manager
Ogury
2
@CarlesSistare
https://github.com/carlessistare
carles.sistare@gmail.com
#DevoxxFR
David Caramelo
CTO Incubateur
Societe Generale Corporate and Investment Banking
3
@David_Caramelo
https://github.com/dcaramelo
david.caramelo83@gmail.com
#DevoxxFR
Plateforme Data Mobile
50 micro services
> 2 Milliards requêtes par jour
4
#DevoxxFR
API Rest/Json
5
- Gourmand en bande passante
- Pas de contrat d'API formel
- Pas conçu pour faire du streaming
#DevoxxFR
Bande passante
2TB bande passante
6
#DevoxxFR
Alternatives Rest/Json
7
WebSocket
#DevoxxFR 8
Modèle OSI
(Open Systems Interconnection)
Unités
Couches
Couches Hautes Couches Matérielles
Segment Paquet Trame BitDonnéeDonnéeDonnée
7-Application
6-Présentation
5-Session
4-Transport
3-Réseau
2-Liaison
1-Physique
#DevoxxFR 9
Modèle OSI
(Open Systems Interconnection)
Unités
Couches
Couches Hautes Couches Matérielles
Segment Paquet Trame BitDonnéeDonnéeDonnée
7-Application
6-Présentation
5-Session
4-Transport
3-Réseau
2-Liaison
1-Physique
#DevoxxFR 10
Donnée
7- Application
Donnée
6 - Présentation
Donnée
5 - Session
RPC
#DevoxxFR 11
Couche application
#DevoxxFR
HTTP évolution
HTTP 1.0 HTTP 1.1
Retard
12
HTTP 2
#DevoxxFR 13
HTTP 1 HTTP 2
1 TCP conn per HTTP req (hors Keep-Alive)
Head of line blocking
Connections
1 TCP conn -> Multiplexed Requests
Headers
Header Text Plain
Header et Data dans le même frame
Chaque Request renvoie le meme header
Header comprimé codage Huffman
Header et Data frames differents
Première Request envoie tous les headers
#DevoxxFR 14
Couche présentation
#DevoxxFR 15
Principe
Data
Contrat
(*.proto)
Marshal
0101010010
Unmarshal
Contrat
(*.proto)
Data
Les données sont composées d’une en-tête et de la donnée sérialisée.
#DevoxxFR
Exemple de fichier *.proto
syntax = "proto3";
service Example {
rpc Ping (stream MessageRequest) returns (stream MessageReply) {}
}
message MessageRequest {
string name = 1;
}
message MessageReply {
enum EnumStatus {
UNKNOWN = 0;
OK = 1;
KO = 2;
}
EnumStatus status = 1;
string message = 2;
}
16
#DevoxxFR
Data to JSON
17
message MessageRequest {
int32 ma_variable = 1;
}
17 octets
{ma_variable:150}
JSON
7b 6d 61 5f 76 61 72 69 61
62 6c 65 3a 31 35 30 7d
HEXA
#DevoxxFR 18
message MessageRequest {
int32 ma_variable = 1;
}
Data to binary
// position = 1
// type = 0 - Varint
// (position << 3) | type
(1 << 3) | 0 = 0000 1000
Résultat : 0x08
#DevoxxFR 19
VARINT
150 = 1001 0110
// Step 1: Groupe de 7 bits
000 0001 001 0110
// Step 2: Inverse (Least significant group first)
001 0110 000 0001
// Step 3: Add MSB
1001 0110 0000 0001
Résultat : 0x9601
- Least significant group first.
- Un octet =
1 bit MSB (Most Significant Bit)
7 bits pour le stockage
Quand le MSB = 1, c’est qu’il y a un octet
supplémentaire.
#DevoxxFR 20
Protobuf bilan
82 % de gain
// {ma_variable:150}
7b 6d 61 5f 76 61 72 69 61
62 6c 65 3a 31 35 30 7d
// 17 Octets
JSON
08 96 01
// 3 Octets
PROTOBUF
#DevoxxFR 21
Second exemple
61 % de gain
// {ma_variable:150,
mon_string:“Hello world”}
7b 6d 61 5f 76 61 72 69 61 62 6c
65 3a 31 35 30 2c 6d 6f 6e 5f 73
74 72 69 6e 67 3a 93 48 65 6c 6c
6f 20 77 6f 72 6c 64 94 7d
// 42 octets
JSON
08 96 01 12 0B 48 65 6c 6c
6f 20 77 6f 72 6c 64
// 16 octets
PROTOBUF
message PingRequest {
int32 ma_variable = 1;
string mon_string = 2;
}
#DevoxxFR
Démarche
message PingRequest {
int32 ma_variable = 1;
string mon_string = 2;
}
// {ma_variable:150, mon_string:“Hello world”}
>> 08 96 01 12 0B 48 65 6c 6c 6f 20 77 6f 72 6c 64
>> 0x089601 = 150 // (vu précédemment, 08 : header, 9601 : 150)
22
#DevoxxFR
Démarche
message PingRequest {
int32 ma_variable = 1;
string mon_string = 2;
}
// {ma_variable:150, mon_string:“Hello world”}
>> 08 96 01 12 0B 48 65 6c 6c 6f 20 77 6f 72 6c 64
>> 0x089601 = 150 // (vu précédemment, 08 : header, 9601 : 150)
// Step 1: Header (string)
// TYPE : 2 (010) - POSITION : 2 (0010)
// (2 << 3) | 2 = 0001 0010
>> 0x12
23
#DevoxxFR
Démarche
message PingRequest {
int32 ma_variable = 1;
string mon_string = 2;
}
// {ma_variable:150, mon_string:“Hello world”}
>> 08 96 01 12 0B 48 65 6c 6c 6f 20 77 6f 72 6c 64
>> 0x089601 = 150 // (vu précédemment, 08 : header, 9601 : 150)
// Step 1: Header (string)
// TYPE : 2 (010) - POSITION : 2 (0010)
// (2 << 3) | 2 = 0001 0010
>> 0x12
// Step 2: String Length
// 11 = 0000 1101
>> 0x0B

24
#DevoxxFR
Démarche
message PingRequest {
int32 ma_variable = 1;
string mon_string = 2;
}
// {ma_variable:150, mon_string:“Hello world”}
>> 08 96 01 12 0B 48 65 6c 6c 6f 20 77 6f 72 6c 64
>> 0x089601 = 150 // (vu précédemment, 08 : header, 9601 : 150)
// Step 1: Header (string)
// TYPE : 2 (010) - POSITION : 2 (0010)
// (2 << 3) | 2 = 0001 0010
>> 0x12
// Step 2: String Length
// 11 = 0000 1101
>> 0x0B

// Step 3: Text
// 48 65 6c 6c 6f 20 77 6f 72 6c 64
// H e l l o w o r l d
>> 08 96 01 12 0B 48 65 6c 6c 6f 20 77 6f 72 6c 64
25
#DevoxxFR
Démarche
message PingRequest {
int32 ma_variable = 1;
string mon_string = 2;
}
// {ma_variable:150, mon_string:“Hello world”}
>> 08 96 01 12 0B 48 65 6c 6c 6f 20 77 6f 72 6c 64
>> 0x089601 = 150 // (vu précédemment, 08 : header, 9601 : 150)
// Step 1: Header (string)
// TYPE : 2 (010) - POSITION : 2 (0010)
// (2 << 3) | 2 = 0001 0010
>> 0x12
// Step 2: String Length
// 11 = 0000 1101
>> 0x0B

// Step 3: Text
// 48 65 6c 6c 6f 20 77 6f 72 6c 64
// H e l l o w o r l d
>> 08 96 01 12 0B 48 65 6c 6c 6f 20 77 6f 72 6c 64
26
_______________________
#DevoxxFR 27
Protobuf
Gain limité s’il y a beaucoup de chaînes de caractère.
message MessageReply {
enum EnumStatus {
UNKNOWN = 0;
OK = 1;
KO = 2;
}
enum EnumErrorMessage {
UNKNOWN = 0;
USER_NOT_FOUND = 1;
ASSET_NOT_FOUND = 2;
}
EnumStatus status = 1;
EnumErrorMessage message = 2;
}
Favoriser les Enums
#DevoxxFR 28
Couche Session
#DevoxxFR 29
RPC / IDL
public class HelloWorldClient {
public HelloWorld() {
return HelloWorldServer.sayHello();
}
}
public class HelloWorldServeur {
public static String HelloWorld() {
return "Hello World";
}
}
(Remote Procedure Call / Interface Description Language)
RPC permet de faire des appels de procédures sur un ordinateur distant.
Client Serveur
#DevoxxFR
Types de requêtes
SIMPLE RPC REQ STREAM
30
RESP STREAM FULL DUPLEX
#DevoxxFR
gRPC : Définition des services
31
syntax = "proto3";
service Example {
rpc MessageSimple (MessageRequest) returns (MessageReply) {}
rpc MessageStreamReq (stream MessageRequest) returns (MessageReply) {}
rpc MessageStreamRes (MessageRequest) returns (stream MessageReply) {}
rpc MessageFullDuplex (stream MessageRequest) returns (stream MessageReply) {}
}
message MessageRequest {
string name = 1;
}
message MessageReply {
enum EnumStatus {
UNKNOWN = 0;
OK = 1;
KO = 2;
}
EnumStatus status = 1;
string message = 2;
}
#DevoxxFR 32
Les performances
#DevoxxFR 33
Protocole de test
Temps Response
#message/sec
I/O bytes
#DevoxxFR
Résultats
34
Message HTTP (keep-alive) gRPC (Simple Connection)
Simple
2200 msg/s
15 ms/95p
33 Mo I/O
3700 msg/s
7 ms/95p
28 Mo I/O +32% msg/s
-50% response time
Complexe
2200 msg/s
15 ms/95p
138 Mo I/O
3700 msg/s
7 ms/95p
80 Mo I/O
+318% octets +185% octets
#DevoxxFR
Load Balancing
• Client Load Balancing (external load balancing)
• ENVOY
• LINKERD
• NGINX (très recent)
35
#DevoxxFR 36
Mise en oeuvre
#DevoxxFR
Screen capture
37
https://github.com/LogNet/grpc-spring-boot-starter
Java
#DevoxxFR 38
Java
>> protoc —-java_out=src/main/java/
./exemple.proto
Les classes sont générés.
Maven Ligne de commande
#DevoxxFR 39
https://www.npmjs.com/package/grpc
Javascript
#DevoxxFR 40
https://www.npmjs.com/package/grpc-promise
Javascript
#DevoxxFR
Code !
41
https://github.com/dcaramelo/grpc-demo
#DevoxxFR 42
#DevoxxFR 43
SERVER
#DevoxxFR 44
CLIENT
#DevoxxFR
TAKE AWAY
45
- Optimisation du traffic réseau inter machine.
- Diminution des temps de latence
- Travailler votre monitoring
- Debug plus compliqué (curl, proxy http-grpc, double entrée http-grpc, ...)
#DevoxxFR
Merci à vous !
Merci à la team #DevoxxFR !
46
@David_Caramelo
@CarlesSistare

Contenu connexe

Tendances

Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceOCTO Technology
 
Rapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEKRapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEKBelkacem KAID
 
VTP(Virtual Trunking Protocol)
VTP(Virtual Trunking Protocol)VTP(Virtual Trunking Protocol)
VTP(Virtual Trunking Protocol)Sirine Ibrahim
 
Corrigé cisco wissamben
Corrigé cisco wissambenCorrigé cisco wissamben
Corrigé cisco wissambenWissam Bencold
 
TP switch pod4
TP switch pod4TP switch pod4
TP switch pod4mickaelday
 
Corrige tp3 m3102_dut2
Corrige tp3 m3102_dut2Corrige tp3 m3102_dut2
Corrige tp3 m3102_dut2Youssef Rvd
 
Gestion et surveillance du reseau syslogng
Gestion et surveillance du reseau  syslogngGestion et surveillance du reseau  syslogng
Gestion et surveillance du reseau syslogngKiemde Franck
 
QCM informatique de base
QCM informatique de baseQCM informatique de base
QCM informatique de baseFrust Rados
 
DNS sous linux
DNS sous linuxDNS sous linux
DNS sous linuxSouhaib El
 
Installation de la clé orange sur ubuntu
Installation de la clé orange sur ubuntuInstallation de la clé orange sur ubuntu
Installation de la clé orange sur ubuntuRahma Ben Hammouda
 
Lire les tables de routage
Lire les tables de routageLire les tables de routage
Lire les tables de routagebelhadj_rached
 
ssh, bien plus qu'un telnet sécurisé
ssh, bien plus qu'un telnet sécuriséssh, bien plus qu'un telnet sécurisé
ssh, bien plus qu'un telnet sécuriséTryphon
 
Authentification des protocoles de routage
Authentification des protocoles de routageAuthentification des protocoles de routage
Authentification des protocoles de routageThomas Moegli
 
Acces distant VPN (mode client) pour la domotique
Acces distant VPN (mode client) pour la domotiqueAcces distant VPN (mode client) pour la domotique
Acces distant VPN (mode client) pour la domotiqueBenoît VAN DEN BULCKE
 

Tendances (20)

Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquence
 
kaid_nhek
kaid_nhekkaid_nhek
kaid_nhek
 
Rapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEKRapport TME_semaine_7_KAID_NHEK
Rapport TME_semaine_7_KAID_NHEK
 
SEMAINE_6 LI350
SEMAINE_6 LI350SEMAINE_6 LI350
SEMAINE_6 LI350
 
SNMP
SNMPSNMP
SNMP
 
Protocoles SSL/TLS
Protocoles SSL/TLSProtocoles SSL/TLS
Protocoles SSL/TLS
 
VTP(Virtual Trunking Protocol)
VTP(Virtual Trunking Protocol)VTP(Virtual Trunking Protocol)
VTP(Virtual Trunking Protocol)
 
Corrigé cisco wissamben
Corrigé cisco wissambenCorrigé cisco wissamben
Corrigé cisco wissamben
 
TP switch pod4
TP switch pod4TP switch pod4
TP switch pod4
 
Corrige tp3 m3102_dut2
Corrige tp3 m3102_dut2Corrige tp3 m3102_dut2
Corrige tp3 m3102_dut2
 
Gestion et surveillance du reseau syslogng
Gestion et surveillance du reseau  syslogngGestion et surveillance du reseau  syslogng
Gestion et surveillance du reseau syslogng
 
Réseau MiNET
Réseau MiNETRéseau MiNET
Réseau MiNET
 
QCM informatique de base
QCM informatique de baseQCM informatique de base
QCM informatique de base
 
DNS sous linux
DNS sous linuxDNS sous linux
DNS sous linux
 
Installation de la clé orange sur ubuntu
Installation de la clé orange sur ubuntuInstallation de la clé orange sur ubuntu
Installation de la clé orange sur ubuntu
 
Lire les tables de routage
Lire les tables de routageLire les tables de routage
Lire les tables de routage
 
ssh, bien plus qu'un telnet sécurisé
ssh, bien plus qu'un telnet sécuriséssh, bien plus qu'un telnet sécurisé
ssh, bien plus qu'un telnet sécurisé
 
Implémentation d'openvpn
Implémentation d'openvpnImplémentation d'openvpn
Implémentation d'openvpn
 
Authentification des protocoles de routage
Authentification des protocoles de routageAuthentification des protocoles de routage
Authentification des protocoles de routage
 
Acces distant VPN (mode client) pour la domotique
Acces distant VPN (mode client) pour la domotiqueAcces distant VPN (mode client) pour la domotique
Acces distant VPN (mode client) pour la domotique
 

Similaire à gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018

gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !Carles Sistare
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!David Caramelo
 
DevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @CriteoDevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @CriteoPierre Souchay
 
Réseaux et protocoles - Cours + exercices
Réseaux et protocoles - Cours + exercices Réseaux et protocoles - Cours + exercices
Réseaux et protocoles - Cours + exercices sarah Benmerzouk
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec GoMickaël Rémond
 
Travaux dirigés Réseau Ethernet
Travaux dirigés Réseau EthernetTravaux dirigés Réseau Ethernet
Travaux dirigés Réseau EthernetInes Kechiche
 
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cashSthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cashStHack
 
Démons en PHP, de inetd à ZeroMQ
Démons en PHP, de inetd à ZeroMQDémons en PHP, de inetd à ZeroMQ
Démons en PHP, de inetd à ZeroMQAmaury Bouchard
 
Couche1 couche2 s4_v05
Couche1 couche2 s4_v05Couche1 couche2 s4_v05
Couche1 couche2 s4_v05LeslyOctave
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?Ruau Mickael
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesXavier MARIN
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!Ruau Mickael
 
Composants routeur cisco et différent mode de Configuration
Composants routeur cisco et différent mode de ConfigurationComposants routeur cisco et différent mode de Configuration
Composants routeur cisco et différent mode de ConfigurationZakariaBouzzitMadrid
 
laboratoire formation ccna cisco materiel .ppt
laboratoire formation ccna cisco materiel .pptlaboratoire formation ccna cisco materiel .ppt
laboratoire formation ccna cisco materiel .pptprofsn
 
Chapter2_ScalingNetworks.pdf
Chapter2_ScalingNetworks.pdfChapter2_ScalingNetworks.pdf
Chapter2_ScalingNetworks.pdfBARKAAMINEAHAMAT
 
Nt207 a fr 1 protocole jbus minisonic600
Nt207 a fr 1 protocole jbus minisonic600Nt207 a fr 1 protocole jbus minisonic600
Nt207 a fr 1 protocole jbus minisonic600arkad4848
 

Similaire à gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018 (20)

gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !gRPC, ECHANGES A HAUTE FREQUENCE !
gRPC, ECHANGES A HAUTE FREQUENCE !
 
gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!gRPC, échange à haute fréquence!
gRPC, échange à haute fréquence!
 
DevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @CriteoDevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @Criteo
 
Implementing a key/value store
Implementing a key/value storeImplementing a key/value store
Implementing a key/value store
 
Formation python
Formation pythonFormation python
Formation python
 
Réseaux et protocoles - Cours + exercices
Réseaux et protocoles - Cours + exercices Réseaux et protocoles - Cours + exercices
Réseaux et protocoles - Cours + exercices
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec Go
 
Travaux dirigés Réseau Ethernet
Travaux dirigés Réseau EthernetTravaux dirigés Réseau Ethernet
Travaux dirigés Réseau Ethernet
 
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cashSthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash
Sthack 2015 - David Berard & Vincent Fargues - Attack the cache to get some cash
 
Démons en PHP, de inetd à ZeroMQ
Démons en PHP, de inetd à ZeroMQDémons en PHP, de inetd à ZeroMQ
Démons en PHP, de inetd à ZeroMQ
 
OWF12/PHP de inetd à ZeroMQ
OWF12/PHP de inetd à ZeroMQOWF12/PHP de inetd à ZeroMQ
OWF12/PHP de inetd à ZeroMQ
 
Couche1 couche2 s4_v05
Couche1 couche2 s4_v05Couche1 couche2 s4_v05
Couche1 couche2 s4_v05
 
Astuces cisco
Astuces ciscoAstuces cisco
Astuces cisco
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux?
 
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseriesBreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
BreizhCamp 2019 - IoT et open source hardware pour la collecte de timeseries
 
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
Barbie explique IEEE754 : pourquoi les calculs informatiques sont faux!
 
Composants routeur cisco et différent mode de Configuration
Composants routeur cisco et différent mode de ConfigurationComposants routeur cisco et différent mode de Configuration
Composants routeur cisco et différent mode de Configuration
 
laboratoire formation ccna cisco materiel .ppt
laboratoire formation ccna cisco materiel .pptlaboratoire formation ccna cisco materiel .ppt
laboratoire formation ccna cisco materiel .ppt
 
Chapter2_ScalingNetworks.pdf
Chapter2_ScalingNetworks.pdfChapter2_ScalingNetworks.pdf
Chapter2_ScalingNetworks.pdf
 
Nt207 a fr 1 protocole jbus minisonic600
Nt207 a fr 1 protocole jbus minisonic600Nt207 a fr 1 protocole jbus minisonic600
Nt207 a fr 1 protocole jbus minisonic600
 

gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018