SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
gRPC, ECHANGES A HAUTE FREQUENCE !
@CarlesSistare
https://github.com/carlessistare
carles@ogury.co
CARLES SISTARÉ
Founding Team - Delivery Lead Tech
@David_Caramelo
https://github.com/dcaramelo
david.caramelo@ogury.co
DAVID CARAMELO
Swat Lead Tech
● Données comportementales de 400
millions de profils uniques (via SDK)
● Des milliers de campagnes
publicitaires internationales
● Publicité ciblée
● Évolution vers le programmatique
PLATEFORME DE DATA MOBILE
C’est quoi ?
PLATEFORME DE DATA MOBILE
DATA
Publicités ciblées
Campagnes
MAGNITUDE DE L’INFRA
AVANT
MAINTENANT
• 400 Millions Profiles
• 1.5 Milliards Req/Jour
• Temps de réponse <35ms
• Calcul du Targeting: 1.5h
• 700 instances
• 14 noeuds Redshift
• 13 BD Postgres
• IT team > 40 devs
• 50k Profiles
• 200k Req/Jour
• Temps de réponse >300ms
• Calcul du Targeting: 10h
• IT team 2 devs
● 40 microservices
● 2TB/mois bande passante
● 500 $/mois bande passante entre
microservices
● HTTP / JSON
IMPACT BANDE PASSANTE
Les inconvénients des API REST/JSON
➔ Le streaming est difficile (presque impossible dans certains langages)
➔ La diffusion bidirectionnelle n'est pas du tout possible
➔ Gourmande (les représentations textuelles ne sont pas optimales pour les réseaux)
➔ Pas de contrat d'API formel (lisible par machine)
◆ Corollaire: la rédaction de libs clients nécessite des humains
◆ Corollaire: les humains sont chers et n'aiment pas écrire des libs clients
gRPC c’est quoi?
➔ SWAGGER:
◆ API REST with JSON format
◆ Génération de code, via des fichiers de conf (mais c’est verbeux)
◆ Génération de la DOC
◆ Beaucoup d’outils open source pour travailler avec Swagger
◆ Ne résout pas le souci de performance, streaming etc...
◆ ....
gRPC: ALTERNATIVES
➔ THRIFT:
◆ Framework RPC
◆ Génération de code
◆ Génération de la DOC
◆ Format d’encodage équivalent à Protobuf avec plus de possibilités
◆ Techno très mature (utilisé par Facebook, Cassandra, ...)
◆ Documentation et Exemples très difficiles à trouver
◆ ....
gRPC: ALTERNATIVES
HTTP2: TCP CONNECTIONS
HTTP1
1 TCP conn -> Multiplexed Requests
HTTP2
1 TCP conn per HTTP req (hors Keep-Alive)
HEAD OF LINE BLOCKING
HTTP2: TCP CONNECTIONS
HTTP1.0 HTTP1.1
RETARD
HTTP2
HTTP2: HEADERS
HTTP1 HTTP2
Header Text Plain
Header et Data dans le même frame
Chaque Request on renvoie le meme header
Header comprimé codage Huffman
Header et Data frames differents
- On peut les envoyer séparément
Première Request envoie tous les headers
N+1 Request envoie juste la difference
PROTOBUF
ProtoBuffer est un protocole de sérialisation et désérialisation via un schéma
créé par Google actuellement en version 3.
Seulement les types, positions et les valeurs transitent sur le réseau. Pas les
noms de des champs.
PROTOBUF
*.PROTO FILE
PROTOBUF: DATA TO BINARY
{ma_variable:150}
JSON (minifié) HEXA (minifié)
7b 6d 61 5f 76 61 72 69 61
62 6c 65 3a 31 35 30 7d
17 octets (sans http)
PROTOBUF HEADER
La formule magique
(POSITION << 3) | TYPE
POSITION : 1
TYPE : 0
Header : 0x08
(1 << 3) | 0 = 0000 1000
PROTOBUF 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
→ Least significant group first.
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.
DATA : 96 01
PROTOBUF BILAN
{ma_variable:150}
7b 6d 61 5f 76 61 72 69 61
62 6c 65 3a 31 35 30 7d
17 Octets
JSON (minifié)
08 96 01
3 Octets
PROTOBUF
82% de gagner
PROTOBUF AUTRE EXEMPLE
{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 (minifié)
08 96 01 12 0B 48 65 6c 6c
6f 20 77 6f 72 6c 64
16 octets
PROTOBUF
61% de gagner
PROTOBUF STRING 08 96 01 : 150 (vu ensemble)
12 0B 48 65 6c 6c 6f 20 77 6f 72 6c 64
→ Step 1: Header
0x12 : 0001 0010
TYPE : 2 (010)
POSITION : 2 (0010)
→ Step 2: Length
0x0B : 0000 1101
11
→ 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
➔ Gain limité s’il y a beaucoup de chaînes de caractère.
◆ Favoriser les Enums (description erreurs, label, etc... ) car seul
l’id transit sur le réseau.
PROTOBUF
➔ Protocole pour appeler des fonctions qui ne s'exécutent pas forcément dans la même machine
gRPC: REMOTE PROCEDURE CALL
➔ Les développeurs peuvent s’abstraire de toute complexité:
◆ Réseau
◆ Format des données
◆ Sécurité
◆ ....
➔ Pouvoir se concentrer sur le code business
gRPC: REMOTE PROCEDURE CALL
➔ Contraintes:
◆ Toutes les questions de format de données et communication sont à définir à l’avance
◆ Chaque évolution du framework custom RPC peut impacter toute la stack
◆ Moins de flexibilité qu’une API REST
◆ ....
gRPC: REMOTE PROCEDURE CALL
gRPC: définition protobuf
gRPC: types de requetes
SIMPLE RPC REQUEST STREAM RESPONSE STREAM FULL DUPLEX
gRPC: Implémentation NodeJS
➔ Utilise PROTOBUF.JS:
◆ Il génère dynamiquement les classes lors de l'instanciation du
serveur ou du client
◆ Approche utilisé surtout pour le web: protobuf depuis le browser
gRPC: Implémentation JAVA
➔ Classes générées avant la compilation
➔ BUILDER PATTERN:
◆ Pouvoir gérer tous les champs optionnels
◆ Classe standard pour chaque message,
avec plein de constructors c’est pas propre
gRPC : SERVEUR JAVA - STACK
➔ Spring Boot Starter Web
➔ Module grpc-spring-boot-starter de LogNet (https://github.com/LogNet/grpc-spring-boot-starter)
gRPC : SERVEUR JAVA - GÉNÉRATION DU CODE
Fichier PROTO
Générateur gRPC
gRPC : SERVEUR JAVA - GÉNÉRATION DU CODE
https://github.com/grpc/grpc-java
MAVEN LIGNE DE COMMANDE
<PATCH_BIN_PROTOC>/protoc
--java_out=src/main/java/
./exemple.proto
UN PEU DE CODE
.proto
gRPC: grpc-promise
gRPC: parlons perf
HTTP HTTP Keep-Alive GRPC Simple GRPC Full Duplex
Messages/Sec 366 655 1040 1448
Bande Passante I/O Input: 5,6 Mo
Output: 5,33 Mo
Input: 2,79 Mo
Output: 2,46 Mo
Input: 1,61 Mo
Output: 1,26 Mo
Input: 1 Mo
Output: 933 Ko
Temps Réponse p95 4 ms 2 ms 1 ms 1 ms
Temps Réponse p99 9,4 ms 8 ms 4 ms 2 ms
➔ Séries de 10000 requetes
➔ 2 * t2.micro (1 Core / 1 Go RAM) pour le client et le serveur
gRPC: Inconvénients
➔ Load Balancing
➔ Déboguer des erreurs c’est difficile
➔ Pas encore des libs pour supporter gRPC depuis un browser
➔ Documentation pauvre pour certains langages
➔ Pas de standard d'implémentation entre langages
NOTRE RETOUR D’EXPERIENCE
- Si votre API est simple, sans beaucoup de charge ou accessible par des clients externes => REST
- Si votre priorité c’est la perf, le QUICK WIN c’est gRPC
- Si le nombre de connections par client n’est pas très élevé => REST
MIGRER SUR gRPC?
TIPS INTEGRATION
- Double Entrypoint REST/gRPC pratique pour déboguer
- Load Balancing via TCP
PROCHAIN RENDEZ-VOUS
REDSHIFT
• Introduction REDSHIFT
• Dig-in fonctionnement interne
• Retour d’expérience sur la mise en place de Data-WareHouse
(pêle-mêle):
○ Bien identifier son besoin pour bien choisir sa techno
○ Designer son schema DB en accord avec Redshift
○ Les ETL à haut volume et leurs problématiques
○ Gérer les limites de Redshift et les évolutions de son
usage
pierre-marie@ogury.co
QUESTIONS ?
carles@ogury.co
david.caramelo@ogury.co
carles@ogury.co
david.caramelo@ogury.co

Contenu connexe

Tendances

RASPBERRY PI - votre infrastructure : ansible, user, iptables, monitoring, re...
RASPBERRY PI - votre infrastructure : ansible, user, iptables, monitoring, re...RASPBERRY PI - votre infrastructure : ansible, user, iptables, monitoring, re...
RASPBERRY PI - votre infrastructure : ansible, user, iptables, monitoring, re...XavierPestel
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...XavierPestel
 
IPv6 cohabitation et migration - Oussama SALIHI
IPv6 cohabitation et migration - Oussama SALIHIIPv6 cohabitation et migration - Oussama SALIHI
IPv6 cohabitation et migration - Oussama SALIHIgrecma
 
Projet IPv6 Matrix / Version française intégrale
Projet IPv6 Matrix / Version française intégraleProjet IPv6 Matrix / Version française intégrale
Projet IPv6 Matrix / Version française intégraleOlivier MJ Crépin-Leblond
 
Multicast en IPv6
Multicast en IPv6Multicast en IPv6
Multicast en IPv6Mounia EL
 

Tendances (8)

RASPBERRY PI - votre infrastructure : ansible, user, iptables, monitoring, re...
RASPBERRY PI - votre infrastructure : ansible, user, iptables, monitoring, re...RASPBERRY PI - votre infrastructure : ansible, user, iptables, monitoring, re...
RASPBERRY PI - votre infrastructure : ansible, user, iptables, monitoring, re...
 
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
Pipeline Devops - Intégration continue : ansible, jenkins, docker, jmeter...
 
Réseau MiNET
Réseau MiNETRéseau MiNET
Réseau MiNET
 
IPv6 cohabitation et migration - Oussama SALIHI
IPv6 cohabitation et migration - Oussama SALIHIIPv6 cohabitation et migration - Oussama SALIHI
IPv6 cohabitation et migration - Oussama SALIHI
 
IPv6
IPv6IPv6
IPv6
 
Projet IPv6 Matrix / Version française intégrale
Projet IPv6 Matrix / Version française intégraleProjet IPv6 Matrix / Version française intégrale
Projet IPv6 Matrix / Version française intégrale
 
Multicast en IPv6
Multicast en IPv6Multicast en IPv6
Multicast en IPv6
 
Presentation 6lowpan
Presentation 6lowpanPresentation 6lowpan
Presentation 6lowpan
 

Similaire à 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 !David Caramelo
 
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018Carles Sistare
 
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
 
Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017AFUP_Limoges
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) univalence
 
Sizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsSizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsPhilippeBrogi
 
Comment passer d'un POC en prod @ plusieurs milliards de rêquetes
Comment passer d'un POC en prod @ plusieurs milliards de rêquetesComment passer d'un POC en prod @ plusieurs milliards de rêquetes
Comment passer d'un POC en prod @ plusieurs milliards de rêquetesCarles Sistare
 
Optimisations et Performances d'un POC en prod @ plusieurs milliards de requê...
Optimisations et Performances d'un POC en prod @ plusieurs milliards de requê...Optimisations et Performances d'un POC en prod @ plusieurs milliards de requê...
Optimisations et Performances d'un POC en prod @ plusieurs milliards de requê...David Caramelo
 
Intellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server InternalsIntellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server InternalsNeil Armstrong
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Kenny Dits
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Olivier Le Goaër
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantALTIC Altic
 
Perfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramePerfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramebleporini
 
DevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @CriteoDevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @CriteoPierre Souchay
 
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
 
Retour d'expérience : gérer des flux vidéos multiples de manière optimisée
Retour d'expérience :  gérer des flux vidéos multiples de manière optimiséeRetour d'expérience :  gérer des flux vidéos multiples de manière optimisée
Retour d'expérience : gérer des flux vidéos multiples de manière optimiséeSilicon Comté
 
Diapo zig bee_amin_jan11_final
Diapo zig bee_amin_jan11_finalDiapo zig bee_amin_jan11_final
Diapo zig bee_amin_jan11_finalAmin Ferjani
 

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

gRPC, échange à haute fréquence !
gRPC, échange à haute fréquence !gRPC, échange à haute fréquence !
gRPC, échange à haute fréquence !
 
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
gRPC, ECHANGES A HAUTE FREQUENCE ! DEVOXX 2018
 
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
 
Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
 
Sizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloadsSizing PoC LSF & PowerAI for Engineers schools workloads
Sizing PoC LSF & PowerAI for Engineers schools workloads
 
Comment passer d'un POC en prod @ plusieurs milliards de rêquetes
Comment passer d'un POC en prod @ plusieurs milliards de rêquetesComment passer d'un POC en prod @ plusieurs milliards de rêquetes
Comment passer d'un POC en prod @ plusieurs milliards de rêquetes
 
Optimisations et Performances d'un POC en prod @ plusieurs milliards de requê...
Optimisations et Performances d'un POC en prod @ plusieurs milliards de requê...Optimisations et Performances d'un POC en prod @ plusieurs milliards de requê...
Optimisations et Performances d'un POC en prod @ plusieurs milliards de requê...
 
Intellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server InternalsIntellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server Internals
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
Apache kafka big data track
Apache kafka   big data trackApache kafka   big data track
Apache kafka big data track
 
Apache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performantApache Kafka, Un système distribué de messagerie hautement performant
Apache Kafka, Un système distribué de messagerie hautement performant
 
Perfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui ramePerfug Guide de survie du développeur dans une application Java qui rame
Perfug Guide de survie du développeur dans une application Java qui rame
 
DevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @CriteoDevoxxFR 2019: Consul @Criteo
DevoxxFR 2019: Consul @Criteo
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec Go
 
Retour d'expérience : gérer des flux vidéos multiples de manière optimisée
Retour d'expérience :  gérer des flux vidéos multiples de manière optimiséeRetour d'expérience :  gérer des flux vidéos multiples de manière optimisée
Retour d'expérience : gérer des flux vidéos multiples de manière optimisée
 
Diapo zig bee_amin_jan11_final
Diapo zig bee_amin_jan11_finalDiapo zig bee_amin_jan11_final
Diapo zig bee_amin_jan11_final
 
Hackerspace jan-2013
Hackerspace jan-2013Hackerspace jan-2013
Hackerspace jan-2013
 

gRPC, ECHANGES A HAUTE FREQUENCE !

  • 1.
  • 2. gRPC, ECHANGES A HAUTE FREQUENCE !
  • 5. ● Données comportementales de 400 millions de profils uniques (via SDK) ● Des milliers de campagnes publicitaires internationales ● Publicité ciblée ● Évolution vers le programmatique PLATEFORME DE DATA MOBILE C’est quoi ?
  • 6. PLATEFORME DE DATA MOBILE DATA Publicités ciblées Campagnes
  • 7. MAGNITUDE DE L’INFRA AVANT MAINTENANT • 400 Millions Profiles • 1.5 Milliards Req/Jour • Temps de réponse <35ms • Calcul du Targeting: 1.5h • 700 instances • 14 noeuds Redshift • 13 BD Postgres • IT team > 40 devs • 50k Profiles • 200k Req/Jour • Temps de réponse >300ms • Calcul du Targeting: 10h • IT team 2 devs
  • 8. ● 40 microservices ● 2TB/mois bande passante ● 500 $/mois bande passante entre microservices ● HTTP / JSON IMPACT BANDE PASSANTE
  • 9. Les inconvénients des API REST/JSON ➔ Le streaming est difficile (presque impossible dans certains langages) ➔ La diffusion bidirectionnelle n'est pas du tout possible ➔ Gourmande (les représentations textuelles ne sont pas optimales pour les réseaux) ➔ Pas de contrat d'API formel (lisible par machine) ◆ Corollaire: la rédaction de libs clients nécessite des humains ◆ Corollaire: les humains sont chers et n'aiment pas écrire des libs clients
  • 11. ➔ SWAGGER: ◆ API REST with JSON format ◆ Génération de code, via des fichiers de conf (mais c’est verbeux) ◆ Génération de la DOC ◆ Beaucoup d’outils open source pour travailler avec Swagger ◆ Ne résout pas le souci de performance, streaming etc... ◆ .... gRPC: ALTERNATIVES
  • 12. ➔ THRIFT: ◆ Framework RPC ◆ Génération de code ◆ Génération de la DOC ◆ Format d’encodage équivalent à Protobuf avec plus de possibilités ◆ Techno très mature (utilisé par Facebook, Cassandra, ...) ◆ Documentation et Exemples très difficiles à trouver ◆ .... gRPC: ALTERNATIVES
  • 13. HTTP2: TCP CONNECTIONS HTTP1 1 TCP conn -> Multiplexed Requests HTTP2 1 TCP conn per HTTP req (hors Keep-Alive) HEAD OF LINE BLOCKING
  • 14. HTTP2: TCP CONNECTIONS HTTP1.0 HTTP1.1 RETARD HTTP2
  • 15. HTTP2: HEADERS HTTP1 HTTP2 Header Text Plain Header et Data dans le même frame Chaque Request on renvoie le meme header Header comprimé codage Huffman Header et Data frames differents - On peut les envoyer séparément Première Request envoie tous les headers N+1 Request envoie juste la difference
  • 16. PROTOBUF ProtoBuffer est un protocole de sérialisation et désérialisation via un schéma créé par Google actuellement en version 3. Seulement les types, positions et les valeurs transitent sur le réseau. Pas les noms de des champs.
  • 19. PROTOBUF: DATA TO BINARY {ma_variable:150} JSON (minifié) HEXA (minifié) 7b 6d 61 5f 76 61 72 69 61 62 6c 65 3a 31 35 30 7d 17 octets (sans http)
  • 20. PROTOBUF HEADER La formule magique (POSITION << 3) | TYPE POSITION : 1 TYPE : 0 Header : 0x08 (1 << 3) | 0 = 0000 1000
  • 21. PROTOBUF 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 → Least significant group first. 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. DATA : 96 01
  • 22. PROTOBUF BILAN {ma_variable:150} 7b 6d 61 5f 76 61 72 69 61 62 6c 65 3a 31 35 30 7d 17 Octets JSON (minifié) 08 96 01 3 Octets PROTOBUF 82% de gagner
  • 23. PROTOBUF AUTRE EXEMPLE {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 (minifié) 08 96 01 12 0B 48 65 6c 6c 6f 20 77 6f 72 6c 64 16 octets PROTOBUF 61% de gagner
  • 24. PROTOBUF STRING 08 96 01 : 150 (vu ensemble) 12 0B 48 65 6c 6c 6f 20 77 6f 72 6c 64 → Step 1: Header 0x12 : 0001 0010 TYPE : 2 (010) POSITION : 2 (0010) → Step 2: Length 0x0B : 0000 1101 11 → 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. ➔ Gain limité s’il y a beaucoup de chaînes de caractère. ◆ Favoriser les Enums (description erreurs, label, etc... ) car seul l’id transit sur le réseau. PROTOBUF
  • 26. ➔ Protocole pour appeler des fonctions qui ne s'exécutent pas forcément dans la même machine gRPC: REMOTE PROCEDURE CALL
  • 27. ➔ Les développeurs peuvent s’abstraire de toute complexité: ◆ Réseau ◆ Format des données ◆ Sécurité ◆ .... ➔ Pouvoir se concentrer sur le code business gRPC: REMOTE PROCEDURE CALL
  • 28. ➔ Contraintes: ◆ Toutes les questions de format de données et communication sont à définir à l’avance ◆ Chaque évolution du framework custom RPC peut impacter toute la stack ◆ Moins de flexibilité qu’une API REST ◆ .... gRPC: REMOTE PROCEDURE CALL
  • 30. gRPC: types de requetes SIMPLE RPC REQUEST STREAM RESPONSE STREAM FULL DUPLEX
  • 31. gRPC: Implémentation NodeJS ➔ Utilise PROTOBUF.JS: ◆ Il génère dynamiquement les classes lors de l'instanciation du serveur ou du client ◆ Approche utilisé surtout pour le web: protobuf depuis le browser
  • 32. gRPC: Implémentation JAVA ➔ Classes générées avant la compilation ➔ BUILDER PATTERN: ◆ Pouvoir gérer tous les champs optionnels ◆ Classe standard pour chaque message, avec plein de constructors c’est pas propre
  • 33. gRPC : SERVEUR JAVA - STACK ➔ Spring Boot Starter Web ➔ Module grpc-spring-boot-starter de LogNet (https://github.com/LogNet/grpc-spring-boot-starter)
  • 34. gRPC : SERVEUR JAVA - GÉNÉRATION DU CODE Fichier PROTO Générateur gRPC
  • 35. gRPC : SERVEUR JAVA - GÉNÉRATION DU CODE https://github.com/grpc/grpc-java MAVEN LIGNE DE COMMANDE <PATCH_BIN_PROTOC>/protoc --java_out=src/main/java/ ./exemple.proto
  • 36. UN PEU DE CODE .proto
  • 38. gRPC: parlons perf HTTP HTTP Keep-Alive GRPC Simple GRPC Full Duplex Messages/Sec 366 655 1040 1448 Bande Passante I/O Input: 5,6 Mo Output: 5,33 Mo Input: 2,79 Mo Output: 2,46 Mo Input: 1,61 Mo Output: 1,26 Mo Input: 1 Mo Output: 933 Ko Temps Réponse p95 4 ms 2 ms 1 ms 1 ms Temps Réponse p99 9,4 ms 8 ms 4 ms 2 ms ➔ Séries de 10000 requetes ➔ 2 * t2.micro (1 Core / 1 Go RAM) pour le client et le serveur
  • 39. gRPC: Inconvénients ➔ Load Balancing ➔ Déboguer des erreurs c’est difficile ➔ Pas encore des libs pour supporter gRPC depuis un browser ➔ Documentation pauvre pour certains langages ➔ Pas de standard d'implémentation entre langages
  • 40. NOTRE RETOUR D’EXPERIENCE - Si votre API est simple, sans beaucoup de charge ou accessible par des clients externes => REST - Si votre priorité c’est la perf, le QUICK WIN c’est gRPC - Si le nombre de connections par client n’est pas très élevé => REST MIGRER SUR gRPC? TIPS INTEGRATION - Double Entrypoint REST/gRPC pratique pour déboguer - Load Balancing via TCP
  • 41. PROCHAIN RENDEZ-VOUS REDSHIFT • Introduction REDSHIFT • Dig-in fonctionnement interne • Retour d’expérience sur la mise en place de Data-WareHouse (pêle-mêle): ○ Bien identifier son besoin pour bien choisir sa techno ○ Designer son schema DB en accord avec Redshift ○ Les ETL à haut volume et leurs problématiques ○ Gérer les limites de Redshift et les évolutions de son usage pierre-marie@ogury.co