SlideShare a Scribd company logo
1 of 53
Download to read offline
Les requêtes HTTP de l'extrêmeLes requêtes HTTP de l'extrême
Vincent Cassé - @vcasseVincent Cassé - @vcasse
Les requêtes HTTP de l'extrêmeLes requêtes HTTP de l'extrême
Etape 1 :
Présenter la problématique
Etape 1 :
Présenter la problématique
Problématique de l'épisodeProblématique de l'épisode
● Gérer des fichiers dans le cloud
● Application web
● Utilisation d'un object storage
https://www.ovh.com/fr/cloud/storage/object-storage.xml
● Gérer des fichiers dans le cloud
● Application web
● Utilisation d'un object storage
https://www.ovh.com/fr/cloud/storage/object-storage.xml
Architecture de l'applicationArchitecture de l'application
Navigateur
web
Serveur
applicatif
Object
storage
Etape 2 :
Étudier chaque problème,
de manière temporelle
Etape 2 :
Étudier chaque problème,
de manière temporelle
Télécharger des fichiersTélécharger des fichiers
D'habitudeD'habitude
● Stockage en local temporaire
● Risque 1 : disque pleins
● Risque 2 : timeouts
● Stockage en local temporaire
● Risque 1 : disque pleins
● Risque 2 : timeouts
Timeout ?Timeout ?
Navigateur
web
Serveur
applicatif
Object
storage
Timeout ?Timeout ?
● Connexion HTTP en attente sans traffic
● Passage par des load balancers
● Ressemble à une attaque SYN
● Connexion HTTP en attente sans traffic
● Passage par des load balancers
● Ressemble à une attaque SYN
Le callback de curl est un amiLe callback de curl est un ami
● Exécution à chaque paquet reçu
● Temps curl non décompté
● Permet d'éviter stockage local
● Permet d'envoyer du contenu : pas de
timeout
● Exécution à chaque paquet reçu
● Temps curl non décompté
● Permet d'éviter stockage local
● Permet d'envoyer du contenu : pas de
timeout
Le callback de curl est un amiLe callback de curl est un ami
curl_setopt($curl, CURLOPT_WRITEFUNCTION, function($a,$b) {
echo $b;
flush();
return strlen($b);
);
curl_setopt($curl, CURLOPT_WRITEFUNCTION, function($a,$b) {
echo $b;
flush();
return strlen($b);
);
Et plusieurs fichiers ?Et plusieurs fichiers ?
Enregistrer le fichier sous...Enregistrer le fichier sous...
// Frontend
Iframe  + formulaire à valider pour charger le fichier sans recharge la 
page
// Backend
header('Cache­Control: no­cache, no­store, max­age=0, must­revalidate');
header("Content­Type: application/jpeg”);
header('Content­Length: 1337”);
header("Content­Transfer­Encoding: binary");
header('Content­Disposition: attachment;filename="picture.jpg"');
// Frontend
Iframe  + formulaire à valider pour charger le fichier sans recharge la 
page
// Backend
header('Cache­Control: no­cache, no­store, max­age=0, must­revalidate');
header("Content­Type: application/jpeg”);
header('Content­Length: 1337”);
header("Content­Transfer­Encoding: binary");
header('Content­Disposition: attachment;filename="picture.jpg"');
Zip obligatoireZip obligatoire
● Un seul fichier par download
● Le format zip permet de faire un seul
fichier (même sans compression)
● Stockage local avant de zipper ?
● Un seul fichier par download
● Le format zip permet de faire un seul
fichier (même sans compression)
● Stockage local avant de zipper ?
Les streams sont vos amisLes streams sont vos amis
● Stream permet la lecture / écriture d'une
ressource
● Stream se comporte comme les fichiers
● Plus d'infos sur les streams
http://php.net/manual/en/intro.stream.php
https://blog.pascal-martin.fr/post/slides-presentation-flux-forum-php-2015.html
● Stream permet la lecture / écriture d'une
ressource
● Stream se comporte comme les fichiers
● Plus d'infos sur les streams
http://php.net/manual/en/intro.stream.php
https://blog.pascal-martin.fr/post/slides-presentation-flux-forum-php-2015.html
Les streams sont vos amisLes streams sont vos amis
// Register stream zip
stream_wrapper_register("zip", "ZipClassName");
// Use stream zip with curl return
$fp = fopen("zip://uniqNameByDownload”, "r+");
curl_setopt($curl, CURLOPT_FILE, $fp);
fclose( $fp );
// Register stream zip
stream_wrapper_register("zip", "ZipClassName");
// Use stream zip with curl return
$fp = fopen("zip://uniqNameByDownload”, "r+");
curl_setopt($curl, CURLOPT_FILE, $fp);
fclose( $fp );
Et les miniatures ?Et les miniatures ?
Imagick ?Imagick ?
● Limité à l'application web
● Prend des ressources CPU
● Comment distribuer le cache ?
● Limité à l'application web
● Prend des ressources CPU
● Comment distribuer le cache ?
Réducteur d'image à la voléeRéducteur d'image à la volée
Navigateur
web
Serveur
applicatif
Object
storage
Miniatures
Houston : on reçoit des erreurs 0Houston : on reçoit des erreurs 0
Des erreurs 0 ?Des erreurs 0 ?
● Pas d'erreur 0 dans les logs
● Sur IE, l'erreur n'appelle même pas le
callback d'erreur …
● Mais des 499
● What ?
● Pas d'erreur 0 dans les logs
● Sur IE, l'erreur n'appelle même pas le
callback d'erreur …
● Mais des 499
● What ?
Suppression d'un fichierSuppression d'un fichier
● L'erreur arrive sur les suppressions de
gros fichiers
● L'action est longue coté Object Storage
● Timeout php ?
● L'erreur arrive sur les suppressions de
gros fichiers
● L'action est longue coté Object Storage
● Timeout php ?
Code HTTP 0 ?Code HTTP 0 ?
● Soucis réseau : ça a tranché sur la route
● Timeout du load balancer !
● Solution : faire de l'async ?
● Soucis réseau : ça a tranché sur la route
● Timeout du load balancer !
● Solution : faire de l'async ?
Suppression programméeSuppression programmée
● Object storage permet de programmer
une suppression
● Pas d'attente ! C'est juste programmé !
● Et si on programmait dans une
seconde ?
● Object storage permet de programmer
une suppression
● Pas d'attente ! C'est juste programmé !
● Et si on programmait dans une
seconde ?
Heu… y'a encore des erreurs 0 !Heu… y'a encore des erreurs 0 !
Encore des erreurs 0 ?Encore des erreurs 0 ?
● Sur un upload : y'a du traffic -_-
● Seulement sur les gros fichiers
● Sur un upload : y'a du traffic -_-
● Seulement sur les gros fichiers
Firebug ...Firebug ...
● Analyseur de code dans Firefox /
Chrome
● Coupe le traffic sur les requêtes > 100
Mo.
● Paf timeout ...
● Analyseur de code dans Firefox /
Chrome
● Coupe le traffic sur les requêtes > 100
Mo.
● Paf timeout ...
Et si on parlait d'upload ?Et si on parlait d'upload ?
Comment on upload ?Comment on upload ?
<form enctype="multipart/form­data" action="upload.php” method="POST">
<input type="hidden" name="META1" value="file" />
<input name="content" type="file" /><br />
<input type="submit" value="Upload File" />
</form>
● Recharge la page
● Ne permet pas d'afficher la progression
● AJAX ?
<form enctype="multipart/form­data" action="upload.php” method="POST">
<input type="hidden" name="META1" value="file" />
<input name="content" type="file" /><br />
<input type="submit" value="Upload File" />
</form>
● Recharge la page
● Ne permet pas d'afficher la progression
● AJAX ?
AJAX ?AJAX ?
● Permet de suivre la progression
● Format binaire
xhr = new XMLHttpRequest();
xhr.addEventListener("load", successCallback, false);
xhr.addEventListener("error", errorCallback, false);
xhr.addEventListener("abort", abortCallback, false);
xhr.upload.addEventListener("progress", progressCallback, false);
xhr.open('POST', url, true);
xhr.send(data);
● Permet de suivre la progression
● Format binaire
xhr = new XMLHttpRequest();
xhr.addEventListener("load", successCallback, false);
xhr.addEventListener("error", errorCallback, false);
xhr.addEventListener("abort", abortCallback, false);
xhr.upload.addEventListener("progress", progressCallback, false);
xhr.open('POST', url, true);
xhr.send(data);
Et mon formulaire ?Et mon formulaire ?
● L'object storage attend un formulaire
● On crée le formulaire en javascript
● http://caniuse.com/#search=formdata
http://caniuse.com/#search=file
formData = new FormData();
formData.append('meta1', “file”);
formData.append('content', fp);
…
xhr.send(formData);
● L'object storage attend un formulaire
● On crée le formulaire en javascript
● http://caniuse.com/#search=formdata
http://caniuse.com/#search=file
formData = new FormData();
formData.append('meta1', “file”);
formData.append('content', fp);
…
xhr.send(formData);
Contraintes des uploadsContraintes des uploads
● Adsl répandu
● Upload de l'adsl : max 128 Ko/s (1Mbps)
● Les uploads durent des heures
● Adsl répandu
● Upload de l'adsl : max 128 Ko/s (1Mbps)
● Les uploads durent des heures
Fiabiliser les uploadsFiabiliser les uploads
Navigateur
web
Serveur
applicatif Object
storage
Upload
Chef ça a cassé !Chef ça a cassé !
● Same origin policy !
● Aucun appel Ajax sur un autre domaine
● C'était trop beau…
● Same origin policy !
● Aucun appel Ajax sur un autre domaine
● C'était trop beau…
CORSCORS
● Permet de définir les serveurs autorisés
● Configuration sur les serveurs
● http://caniuse.com/#search=cors
// Requête de firefox
GET /fileList/ HTTP/1.1
Origin: http://mywebapp.ovh
// Réponse du serveur cluster.objectstorage.ovh
Access­Control­Allow­Origin: http://mywebapp.ovh
● Permet de définir les serveurs autorisés
● Configuration sur les serveurs
● http://caniuse.com/#search=cors
// Requête de firefox
GET /fileList/ HTTP/1.1
Origin: http://mywebapp.ovh
// Réponse du serveur cluster.objectstorage.ovh
Access­Control­Allow­Origin: http://mywebapp.ovh
Au fait, tu dois gérer IE8 !Au fait, tu dois gérer IE8 !
● Dernier IE de Windows XP...
● Gére pas formData (IE10)
● Gére pas CORS (IE10) ...
● Dernier IE de Windows XP...
● Gére pas formData (IE10)
● Gére pas CORS (IE10) ...
Au fait, tu dois gérer IE8 !Au fait, tu dois gérer IE8 !
● On crée une iframe sur cluster.objectstorage.ovh
● Contenant un formulaire
● On simule le clic sur le bouton
● On crée une iframe sur cluster.objectstorage.ovh
● Contenant un formulaire
● On simule le clic sur le bouton
Les autres blagues de IE < 10Les autres blagues de IE < 10
● Upload de .jpeg ?
● Sélection multiple ?
● Windows phone 8 ?
● Upload de .jpeg ?
● Sélection multiple ?
● Windows phone 8 ?
On peut uploader un dossier ?On peut uploader un dossier ?
● Chrome le peut. C'est deprecated
● Firefox bute sur l'ergonomie
● WebAPI ?
● Chrome le peut. C'est deprecated
● Firefox bute sur l'ergonomie
● WebAPI ?
Etape 3 :
La réalisation et ses aléas
Etape 3 :
La réalisation et ses aléas
Les bugs poilusLes bugs poilus
Remontées des utilisateursRemontées des utilisateurs
● Mon download a crashé au bout de 27h
● Mon zip est corrompu
● Mon download a crashé au bout de 27h
● Mon zip est corrompu
Ce qu'en pense les sysadminsCe qu'en pense les sysadmins
● Non pas de reboot de serveur
● Aucune alerte du monito
● Au fait, pendant que tu es là, tu as vu
mon mail sur la conso de RAM ?
● Non pas de reboot de serveur
● Aucune alerte du monito
● Au fait, pendant que tu es là, tu as vu
mon mail sur la conso de RAM ?
Conso de RAM ?Conso de RAM ?
● Pas possible : je stream
● Je reproduis pas en dev : c'est le serveur
qui est mal configuré
● Monito des process PHP : non c'est pas
eux qui mangent la RAM !
● Pas possible : je stream
● Je reproduis pas en dev : c'est le serveur
qui est mal configuré
● Monito des process PHP : non c'est pas
eux qui mangent la RAM !
Nginx ?Nginx ?
location /webapp $ {
proxy_pass       http://localhost:81;
proxy_set_header Host      $host;
}
…
server {
listen 81;
location ~ .php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5­fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
location /webapp $ {
proxy_pass       http://localhost:81;
proxy_set_header Host      $host;
}
…
server {
listen 81;
location ~ .php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5­fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
Nginx ?Nginx ?
Syntax:  proxy_buffering on | off;
Default:  proxy_buffering on;
Context:  http, server, location
http://nginx.org/en/docs/http/ngx_http_proxy_module.html
Syntax:  proxy_buffering on | off;
Default:  proxy_buffering on;
Context:  http, server, location
http://nginx.org/en/docs/http/ngx_http_proxy_module.html
proxy_bufferingproxy_buffering
Listen 80
Internet
Object
Storage
Listen 81
PHP-fpm
Proxy
Fastcgi
Tout est bien qui finit bienTout est bien qui finit bien
En fait, le dev web c'estEn fait, le dev web c'est
● Multi – navigateur
● Ça doit gérer le réseau
● C'est comme les oignons, ça a des
couches
● Multi – navigateur
● Ça doit gérer le réseau
● C'est comme les oignons, ça a des
couches
Merci !
Des questions ?
Merci !
Des questions ?
Les requêtes HTTP de l'extrêmeLes requêtes HTTP de l'extrême
Vincent Cassé - @vcasseVincent Cassé - @vcasse

More Related Content

What's hot

Optimiser WordPress
Optimiser WordPressOptimiser WordPress
Optimiser WordPressChi Nacim
 
Alphorm.com Formation Scripting Bash avancé pour GNU/Linux
Alphorm.com   Formation Scripting Bash avancé pour GNU/LinuxAlphorm.com   Formation Scripting Bash avancé pour GNU/Linux
Alphorm.com Formation Scripting Bash avancé pour GNU/LinuxAlphorm
 
08 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 208 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 2Noël
 
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur webConférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur webNormandie Web Xperts
 
MSCS : Hyperconvergence avec Windows Server 2016
MSCS : Hyperconvergence avec Windows Server 2016MSCS : Hyperconvergence avec Windows Server 2016
MSCS : Hyperconvergence avec Windows Server 2016MickaelLOPES91
 
Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshop
Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshopTout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshop
Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshopNuxeo
 
Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013Alain Ganuchaud
 
Nouveautés de zabbix 3.0 par Alain Ganuchaud
Nouveautés de zabbix 3.0 par Alain GanuchaudNouveautés de zabbix 3.0 par Alain Ganuchaud
Nouveautés de zabbix 3.0 par Alain GanuchaudAlain Ganuchaud
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptKhalid Jebbari
 
MSCS : Windows Server 2016 Quoi de neuf pour votre datacenter
MSCS : Windows Server 2016 Quoi de neuf pour votre datacenterMSCS : Windows Server 2016 Quoi de neuf pour votre datacenter
MSCS : Windows Server 2016 Quoi de neuf pour votre datacenterMickaelLOPES91
 
Installation d'openerp 6.1 rc1
Installation d'openerp 6.1 rc1Installation d'openerp 6.1 rc1
Installation d'openerp 6.1 rc1easyopenerp
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012FastConnect
 
Retour d'expérience Varnish Cache chez Eurosport
Retour d'expérience Varnish Cache chez EurosportRetour d'expérience Varnish Cache chez Eurosport
Retour d'expérience Varnish Cache chez EurosportBenjamin Baumann
 
Moussasambe projet de securite zabbix
Moussasambe projet de securite zabbixMoussasambe projet de securite zabbix
Moussasambe projet de securite zabbixmoussa sambe
 

What's hot (20)

Optimiser wordpress
Optimiser wordpressOptimiser wordpress
Optimiser wordpress
 
Optimiser WordPress
Optimiser WordPressOptimiser WordPress
Optimiser WordPress
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
Squid squid guard
Squid squid guardSquid squid guard
Squid squid guard
 
Alphorm.com Formation Scripting Bash avancé pour GNU/Linux
Alphorm.com   Formation Scripting Bash avancé pour GNU/LinuxAlphorm.com   Formation Scripting Bash avancé pour GNU/Linux
Alphorm.com Formation Scripting Bash avancé pour GNU/Linux
 
08 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 208 02 mise en place de serveurs virtuels apache 2
08 02 mise en place de serveurs virtuels apache 2
 
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur webConférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
Conférence #nwx2014 - Thibaud Juin - Varnish, accélérateur web
 
MSCS : Hyperconvergence avec Windows Server 2016
MSCS : Hyperconvergence avec Windows Server 2016MSCS : Hyperconvergence avec Windows Server 2016
MSCS : Hyperconvergence avec Windows Server 2016
 
Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshop
Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshopTout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshop
Tout comprendre de Nuxeo Drive - Nuxeo Tour 2014 - workshop
 
Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013Presentation Zabbix en Français du 6 Juin 2013
Presentation Zabbix en Français du 6 Juin 2013
 
Nouveautés de zabbix 3.0 par Alain Ganuchaud
Nouveautés de zabbix 3.0 par Alain GanuchaudNouveautés de zabbix 3.0 par Alain Ganuchaud
Nouveautés de zabbix 3.0 par Alain Ganuchaud
 
Node.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascriptNode.js et les nouvelles technologies javascript
Node.js et les nouvelles technologies javascript
 
MSCS : Windows Server 2016 Quoi de neuf pour votre datacenter
MSCS : Windows Server 2016 Quoi de neuf pour votre datacenterMSCS : Windows Server 2016 Quoi de neuf pour votre datacenter
MSCS : Windows Server 2016 Quoi de neuf pour votre datacenter
 
Chiffrer et sécuriser MariaDB
Chiffrer et sécuriser MariaDBChiffrer et sécuriser MariaDB
Chiffrer et sécuriser MariaDB
 
Ocs
OcsOcs
Ocs
 
Installation d'openerp 6.1 rc1
Installation d'openerp 6.1 rc1Installation d'openerp 6.1 rc1
Installation d'openerp 6.1 rc1
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012
 
Windows server2016 presentation
Windows server2016 presentation Windows server2016 presentation
Windows server2016 presentation
 
Retour d'expérience Varnish Cache chez Eurosport
Retour d'expérience Varnish Cache chez EurosportRetour d'expérience Varnish Cache chez Eurosport
Retour d'expérience Varnish Cache chez Eurosport
 
Moussasambe projet de securite zabbix
Moussasambe projet de securite zabbixMoussasambe projet de securite zabbix
Moussasambe projet de securite zabbix
 

Viewers also liked

HTTPS: All you need to know
HTTPS: All you need to knowHTTPS: All you need to know
HTTPS: All you need to knowOVHcloud
 
Webinar - Minimise your security risk with Hybrid Cloud and OVH vRack
Webinar - Minimise your security risk with Hybrid Cloud and OVH vRackWebinar - Minimise your security risk with Hybrid Cloud and OVH vRack
Webinar - Minimise your security risk with Hybrid Cloud and OVH vRackOVHcloud
 
Advanced Web Hosting
Advanced Web HostingAdvanced Web Hosting
Advanced Web HostingOVHcloud
 
[FR] OVH Webinar : 10 questions à poser à votre Cloud Service Provider
[FR] OVH Webinar : 10 questions à poser à votre Cloud Service Provider[FR] OVH Webinar : 10 questions à poser à votre Cloud Service Provider
[FR] OVH Webinar : 10 questions à poser à votre Cloud Service ProviderOVHcloud
 
Introduction to OverTheBox
Introduction to OverTheBoxIntroduction to OverTheBox
Introduction to OverTheBoxOVHcloud
 
[FR] Timeseries appliqué aux couches de bébé
[FR] Timeseries appliqué aux couches de bébé[FR] Timeseries appliqué aux couches de bébé
[FR] Timeseries appliqué aux couches de bébéOVHcloud
 
Discover the OVH Dedicated Cloud Webinar
Discover the OVH Dedicated Cloud WebinarDiscover the OVH Dedicated Cloud Webinar
Discover the OVH Dedicated Cloud WebinarOVHcloud
 
Getting Started With My Next-Gen IP Load Balancing
Getting Started With My Next-Gen IP Load BalancingGetting Started With My Next-Gen IP Load Balancing
Getting Started With My Next-Gen IP Load BalancingOVHcloud
 
OVH Webinar: 10 questions you should ask your Cloud Service Provider
OVH Webinar: 10 questions you should ask your Cloud Service ProviderOVH Webinar: 10 questions you should ask your Cloud Service Provider
OVH Webinar: 10 questions you should ask your Cloud Service ProviderOVHcloud
 
[FR] Les connexions SDSL chez OVH Télécom
[FR] Les connexions SDSL chez OVH Télécom[FR] Les connexions SDSL chez OVH Télécom
[FR] Les connexions SDSL chez OVH TélécomOVHcloud
 
Le protocole HTTP
Le protocole HTTPLe protocole HTTP
Le protocole HTTPSouhaib El
 
Asynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingSteve Rhoades
 
VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...
VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...
VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...VMworld
 
Tutoriel sur le streaming vidéo sur HTTP et sur MPEG-DASH
Tutoriel sur le streaming vidéo sur HTTP et sur MPEG-DASHTutoriel sur le streaming vidéo sur HTTP et sur MPEG-DASH
Tutoriel sur le streaming vidéo sur HTTP et sur MPEG-DASHCyril Concolato
 
ZeroMQ Is The Answer
ZeroMQ Is The AnswerZeroMQ Is The Answer
ZeroMQ Is The AnswerIan Barber
 
HTTP/2 Changes Everything
HTTP/2 Changes EverythingHTTP/2 Changes Everything
HTTP/2 Changes EverythingLori MacVittie
 
Introduction to HTTP protocol
Introduction to HTTP protocolIntroduction to HTTP protocol
Introduction to HTTP protocolAviran Mordo
 
HyperText Transfer Protocol (HTTP)
HyperText Transfer Protocol (HTTP)HyperText Transfer Protocol (HTTP)
HyperText Transfer Protocol (HTTP)Gurjot Singh
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Ippon
 

Viewers also liked (19)

HTTPS: All you need to know
HTTPS: All you need to knowHTTPS: All you need to know
HTTPS: All you need to know
 
Webinar - Minimise your security risk with Hybrid Cloud and OVH vRack
Webinar - Minimise your security risk with Hybrid Cloud and OVH vRackWebinar - Minimise your security risk with Hybrid Cloud and OVH vRack
Webinar - Minimise your security risk with Hybrid Cloud and OVH vRack
 
Advanced Web Hosting
Advanced Web HostingAdvanced Web Hosting
Advanced Web Hosting
 
[FR] OVH Webinar : 10 questions à poser à votre Cloud Service Provider
[FR] OVH Webinar : 10 questions à poser à votre Cloud Service Provider[FR] OVH Webinar : 10 questions à poser à votre Cloud Service Provider
[FR] OVH Webinar : 10 questions à poser à votre Cloud Service Provider
 
Introduction to OverTheBox
Introduction to OverTheBoxIntroduction to OverTheBox
Introduction to OverTheBox
 
[FR] Timeseries appliqué aux couches de bébé
[FR] Timeseries appliqué aux couches de bébé[FR] Timeseries appliqué aux couches de bébé
[FR] Timeseries appliqué aux couches de bébé
 
Discover the OVH Dedicated Cloud Webinar
Discover the OVH Dedicated Cloud WebinarDiscover the OVH Dedicated Cloud Webinar
Discover the OVH Dedicated Cloud Webinar
 
Getting Started With My Next-Gen IP Load Balancing
Getting Started With My Next-Gen IP Load BalancingGetting Started With My Next-Gen IP Load Balancing
Getting Started With My Next-Gen IP Load Balancing
 
OVH Webinar: 10 questions you should ask your Cloud Service Provider
OVH Webinar: 10 questions you should ask your Cloud Service ProviderOVH Webinar: 10 questions you should ask your Cloud Service Provider
OVH Webinar: 10 questions you should ask your Cloud Service Provider
 
[FR] Les connexions SDSL chez OVH Télécom
[FR] Les connexions SDSL chez OVH Télécom[FR] Les connexions SDSL chez OVH Télécom
[FR] Les connexions SDSL chez OVH Télécom
 
Le protocole HTTP
Le protocole HTTPLe protocole HTTP
Le protocole HTTP
 
Asynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time MessagingAsynchronous PHP and Real-time Messaging
Asynchronous PHP and Real-time Messaging
 
VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...
VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...
VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...
 
Tutoriel sur le streaming vidéo sur HTTP et sur MPEG-DASH
Tutoriel sur le streaming vidéo sur HTTP et sur MPEG-DASHTutoriel sur le streaming vidéo sur HTTP et sur MPEG-DASH
Tutoriel sur le streaming vidéo sur HTTP et sur MPEG-DASH
 
ZeroMQ Is The Answer
ZeroMQ Is The AnswerZeroMQ Is The Answer
ZeroMQ Is The Answer
 
HTTP/2 Changes Everything
HTTP/2 Changes EverythingHTTP/2 Changes Everything
HTTP/2 Changes Everything
 
Introduction to HTTP protocol
Introduction to HTTP protocolIntroduction to HTTP protocol
Introduction to HTTP protocol
 
HyperText Transfer Protocol (HTTP)
HyperText Transfer Protocol (HTTP)HyperText Transfer Protocol (HTTP)
HyperText Transfer Protocol (HTTP)
 
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
Web API & Cache, the HTTP way - Ippevent 10 Juin 2014
 

Similar to [FR] Les requêtes HTTP de l'extrême

La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secretsAymeric Bouillat
 
Des solutions de synchronisation de données
Des solutions de synchronisation de donnéesDes solutions de synchronisation de données
Des solutions de synchronisation de donnéespprem
 
Apache server configuration & sécurisation -
Apache server configuration & sécurisation  -Apache server configuration & sécurisation  -
Apache server configuration & sécurisation -achraf_ing
 
Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenableLeTesteur
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur webNoël
 
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Benoît de CHATEAUVIEUX
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.jsTelecomValley
 
Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Luc Juggery
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages webJean-Pierre Vincent
 
Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009Olivier Grisel
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesChristophe Furmaniak
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017AFUP_Limoges
 
Techniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyTechniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyJean-Pierre Vincent
 
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...Pierre-jean Texier
 
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
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ? haricot
 

Similar to [FR] Les requêtes HTTP de l'extrême (20)

La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secrets
 
Des solutions de synchronisation de données
Des solutions de synchronisation de donnéesDes solutions de synchronisation de données
Des solutions de synchronisation de données
 
Apache server configuration & sécurisation -
Apache server configuration & sécurisation  -Apache server configuration & sécurisation  -
Apache server configuration & sécurisation -
 
Installation open erp
Installation open erpInstallation open erp
Installation open erp
 
Développer et déployer une application php maintenable
Développer et déployer une application php maintenableDévelopper et déployer une application php maintenable
Développer et déployer une application php maintenable
 
Le web en http 2
Le web en http 2Le web en http 2
Le web en http 2
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web
 
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
Démo Gatling au Performance User Group de Casablanca - 25 sept 2014
 
2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js2014.12.11 - TECH CONF #3 - Présentation Node.js
2014.12.11 - TECH CONF #3 - Présentation Node.js
 
Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3Autour de Node.js - TechConf#3
Autour de Node.js - TechConf#3
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages web
 
Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009
 
Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017Retour AFUP du forumphp 2017
Retour AFUP du forumphp 2017
 
Techniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyTechniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwiparty
 
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
Mises à jour logicielles en environnement Linux Embarqué, petit guide et tour...
 
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...
 
Un site web rapide ?
Un site web rapide ? Un site web rapide ?
Un site web rapide ?
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
 

More from OVHcloud

OVHcloud Startup Program : Découvrir l'écosystème au service des startups
OVHcloud Startup Program : Découvrir l'écosystème au service des startups OVHcloud Startup Program : Découvrir l'écosystème au service des startups
OVHcloud Startup Program : Découvrir l'écosystème au service des startups OVHcloud
 
Fine tune and deploy Hugging Face NLP models
Fine tune and deploy Hugging Face NLP modelsFine tune and deploy Hugging Face NLP models
Fine tune and deploy Hugging Face NLP modelsOVHcloud
 
How can you successfully migrate to hosted private cloud 2020
How can you successfully migrate to hosted private cloud 2020How can you successfully migrate to hosted private cloud 2020
How can you successfully migrate to hosted private cloud 2020OVHcloud
 
OVHcloud Partner Webinar - Data Processing
OVHcloud Partner Webinar - Data ProcessingOVHcloud Partner Webinar - Data Processing
OVHcloud Partner Webinar - Data ProcessingOVHcloud
 
OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...
OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...
OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...OVHcloud
 
Webinar - VPS New Range
Webinar - VPS New RangeWebinar - VPS New Range
Webinar - VPS New RangeOVHcloud
 
OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...
OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...
OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...OVHcloud
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesOVHcloud
 
OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...
OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...
OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...OVHcloud
 
OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...
OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...
OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...OVHcloud
 
OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...
OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...
OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...OVHcloud
 
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilitéOVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilitéOVHcloud
 
OVHcloud TechTalks - ML serving
OVHcloud TechTalks - ML servingOVHcloud TechTalks - ML serving
OVHcloud TechTalks - ML servingOVHcloud
 
Logs @ OVHcloud
Logs @ OVHcloudLogs @ OVHcloud
Logs @ OVHcloudOVHcloud
 
Les APIs OpenStack
Les APIs OpenStackLes APIs OpenStack
Les APIs OpenStackOVHcloud
 
1 sysadmin vs 250 clusters de stockage
1 sysadmin vs 250 clusters de stockage1 sysadmin vs 250 clusters de stockage
1 sysadmin vs 250 clusters de stockageOVHcloud
 
Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...
Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...
Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...OVHcloud
 
Industrialize Machine Learning
Industrialize Machine Learning Industrialize Machine Learning
Industrialize Machine Learning OVHcloud
 
OVHcloud – Enterprise Cloud Databases
OVHcloud – Enterprise Cloud DatabasesOVHcloud – Enterprise Cloud Databases
OVHcloud – Enterprise Cloud DatabasesOVHcloud
 
OVHcloud Hosted Private Cloud Platform Network use cases with VMware NSX
OVHcloud Hosted Private Cloud Platform Network use cases with VMware NSXOVHcloud Hosted Private Cloud Platform Network use cases with VMware NSX
OVHcloud Hosted Private Cloud Platform Network use cases with VMware NSXOVHcloud
 

More from OVHcloud (20)

OVHcloud Startup Program : Découvrir l'écosystème au service des startups
OVHcloud Startup Program : Découvrir l'écosystème au service des startups OVHcloud Startup Program : Découvrir l'écosystème au service des startups
OVHcloud Startup Program : Découvrir l'écosystème au service des startups
 
Fine tune and deploy Hugging Face NLP models
Fine tune and deploy Hugging Face NLP modelsFine tune and deploy Hugging Face NLP models
Fine tune and deploy Hugging Face NLP models
 
How can you successfully migrate to hosted private cloud 2020
How can you successfully migrate to hosted private cloud 2020How can you successfully migrate to hosted private cloud 2020
How can you successfully migrate to hosted private cloud 2020
 
OVHcloud Partner Webinar - Data Processing
OVHcloud Partner Webinar - Data ProcessingOVHcloud Partner Webinar - Data Processing
OVHcloud Partner Webinar - Data Processing
 
OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...
OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...
OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...
 
Webinar - VPS New Range
Webinar - VPS New RangeWebinar - VPS New Range
Webinar - VPS New Range
 
OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...
OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...
OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud Databases
 
OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...
OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...
OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...
 
OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...
OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...
OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...
 
OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...
OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...
OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...
 
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilitéOVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
 
OVHcloud TechTalks - ML serving
OVHcloud TechTalks - ML servingOVHcloud TechTalks - ML serving
OVHcloud TechTalks - ML serving
 
Logs @ OVHcloud
Logs @ OVHcloudLogs @ OVHcloud
Logs @ OVHcloud
 
Les APIs OpenStack
Les APIs OpenStackLes APIs OpenStack
Les APIs OpenStack
 
1 sysadmin vs 250 clusters de stockage
1 sysadmin vs 250 clusters de stockage1 sysadmin vs 250 clusters de stockage
1 sysadmin vs 250 clusters de stockage
 
Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...
Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...
Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...
 
Industrialize Machine Learning
Industrialize Machine Learning Industrialize Machine Learning
Industrialize Machine Learning
 
OVHcloud – Enterprise Cloud Databases
OVHcloud – Enterprise Cloud DatabasesOVHcloud – Enterprise Cloud Databases
OVHcloud – Enterprise Cloud Databases
 
OVHcloud Hosted Private Cloud Platform Network use cases with VMware NSX
OVHcloud Hosted Private Cloud Platform Network use cases with VMware NSXOVHcloud Hosted Private Cloud Platform Network use cases with VMware NSX
OVHcloud Hosted Private Cloud Platform Network use cases with VMware NSX
 

[FR] Les requêtes HTTP de l'extrême

  • 1. Les requêtes HTTP de l'extrêmeLes requêtes HTTP de l'extrême Vincent Cassé - @vcasseVincent Cassé - @vcasse
  • 2. Les requêtes HTTP de l'extrêmeLes requêtes HTTP de l'extrême
  • 3. Etape 1 : Présenter la problématique Etape 1 : Présenter la problématique
  • 4.
  • 5. Problématique de l'épisodeProblématique de l'épisode ● Gérer des fichiers dans le cloud ● Application web ● Utilisation d'un object storage https://www.ovh.com/fr/cloud/storage/object-storage.xml ● Gérer des fichiers dans le cloud ● Application web ● Utilisation d'un object storage https://www.ovh.com/fr/cloud/storage/object-storage.xml
  • 6. Architecture de l'applicationArchitecture de l'application Navigateur web Serveur applicatif Object storage
  • 7. Etape 2 : Étudier chaque problème, de manière temporelle Etape 2 : Étudier chaque problème, de manière temporelle
  • 9. D'habitudeD'habitude ● Stockage en local temporaire ● Risque 1 : disque pleins ● Risque 2 : timeouts ● Stockage en local temporaire ● Risque 1 : disque pleins ● Risque 2 : timeouts
  • 11. Timeout ?Timeout ? ● Connexion HTTP en attente sans traffic ● Passage par des load balancers ● Ressemble à une attaque SYN ● Connexion HTTP en attente sans traffic ● Passage par des load balancers ● Ressemble à une attaque SYN
  • 12. Le callback de curl est un amiLe callback de curl est un ami ● Exécution à chaque paquet reçu ● Temps curl non décompté ● Permet d'éviter stockage local ● Permet d'envoyer du contenu : pas de timeout ● Exécution à chaque paquet reçu ● Temps curl non décompté ● Permet d'éviter stockage local ● Permet d'envoyer du contenu : pas de timeout
  • 13. Le callback de curl est un amiLe callback de curl est un ami curl_setopt($curl, CURLOPT_WRITEFUNCTION, function($a,$b) { echo $b; flush(); return strlen($b); ); curl_setopt($curl, CURLOPT_WRITEFUNCTION, function($a,$b) { echo $b; flush(); return strlen($b); );
  • 14. Et plusieurs fichiers ?Et plusieurs fichiers ?
  • 15. Enregistrer le fichier sous...Enregistrer le fichier sous... // Frontend Iframe  + formulaire à valider pour charger le fichier sans recharge la  page // Backend header('Cache­Control: no­cache, no­store, max­age=0, must­revalidate'); header("Content­Type: application/jpeg”); header('Content­Length: 1337”); header("Content­Transfer­Encoding: binary"); header('Content­Disposition: attachment;filename="picture.jpg"'); // Frontend Iframe  + formulaire à valider pour charger le fichier sans recharge la  page // Backend header('Cache­Control: no­cache, no­store, max­age=0, must­revalidate'); header("Content­Type: application/jpeg”); header('Content­Length: 1337”); header("Content­Transfer­Encoding: binary"); header('Content­Disposition: attachment;filename="picture.jpg"');
  • 16. Zip obligatoireZip obligatoire ● Un seul fichier par download ● Le format zip permet de faire un seul fichier (même sans compression) ● Stockage local avant de zipper ? ● Un seul fichier par download ● Le format zip permet de faire un seul fichier (même sans compression) ● Stockage local avant de zipper ?
  • 17. Les streams sont vos amisLes streams sont vos amis ● Stream permet la lecture / écriture d'une ressource ● Stream se comporte comme les fichiers ● Plus d'infos sur les streams http://php.net/manual/en/intro.stream.php https://blog.pascal-martin.fr/post/slides-presentation-flux-forum-php-2015.html ● Stream permet la lecture / écriture d'une ressource ● Stream se comporte comme les fichiers ● Plus d'infos sur les streams http://php.net/manual/en/intro.stream.php https://blog.pascal-martin.fr/post/slides-presentation-flux-forum-php-2015.html
  • 18. Les streams sont vos amisLes streams sont vos amis // Register stream zip stream_wrapper_register("zip", "ZipClassName"); // Use stream zip with curl return $fp = fopen("zip://uniqNameByDownload”, "r+"); curl_setopt($curl, CURLOPT_FILE, $fp); fclose( $fp ); // Register stream zip stream_wrapper_register("zip", "ZipClassName"); // Use stream zip with curl return $fp = fopen("zip://uniqNameByDownload”, "r+"); curl_setopt($curl, CURLOPT_FILE, $fp); fclose( $fp );
  • 19. Et les miniatures ?Et les miniatures ?
  • 20. Imagick ?Imagick ? ● Limité à l'application web ● Prend des ressources CPU ● Comment distribuer le cache ? ● Limité à l'application web ● Prend des ressources CPU ● Comment distribuer le cache ?
  • 21. Réducteur d'image à la voléeRéducteur d'image à la volée Navigateur web Serveur applicatif Object storage Miniatures
  • 22. Houston : on reçoit des erreurs 0Houston : on reçoit des erreurs 0
  • 23. Des erreurs 0 ?Des erreurs 0 ? ● Pas d'erreur 0 dans les logs ● Sur IE, l'erreur n'appelle même pas le callback d'erreur … ● Mais des 499 ● What ? ● Pas d'erreur 0 dans les logs ● Sur IE, l'erreur n'appelle même pas le callback d'erreur … ● Mais des 499 ● What ?
  • 24. Suppression d'un fichierSuppression d'un fichier ● L'erreur arrive sur les suppressions de gros fichiers ● L'action est longue coté Object Storage ● Timeout php ? ● L'erreur arrive sur les suppressions de gros fichiers ● L'action est longue coté Object Storage ● Timeout php ?
  • 25. Code HTTP 0 ?Code HTTP 0 ? ● Soucis réseau : ça a tranché sur la route ● Timeout du load balancer ! ● Solution : faire de l'async ? ● Soucis réseau : ça a tranché sur la route ● Timeout du load balancer ! ● Solution : faire de l'async ?
  • 26. Suppression programméeSuppression programmée ● Object storage permet de programmer une suppression ● Pas d'attente ! C'est juste programmé ! ● Et si on programmait dans une seconde ? ● Object storage permet de programmer une suppression ● Pas d'attente ! C'est juste programmé ! ● Et si on programmait dans une seconde ?
  • 27. Heu… y'a encore des erreurs 0 !Heu… y'a encore des erreurs 0 !
  • 28. Encore des erreurs 0 ?Encore des erreurs 0 ? ● Sur un upload : y'a du traffic -_- ● Seulement sur les gros fichiers ● Sur un upload : y'a du traffic -_- ● Seulement sur les gros fichiers
  • 29. Firebug ...Firebug ... ● Analyseur de code dans Firefox / Chrome ● Coupe le traffic sur les requêtes > 100 Mo. ● Paf timeout ... ● Analyseur de code dans Firefox / Chrome ● Coupe le traffic sur les requêtes > 100 Mo. ● Paf timeout ...
  • 30. Et si on parlait d'upload ?Et si on parlait d'upload ?
  • 31. Comment on upload ?Comment on upload ? <form enctype="multipart/form­data" action="upload.php” method="POST"> <input type="hidden" name="META1" value="file" /> <input name="content" type="file" /><br /> <input type="submit" value="Upload File" /> </form> ● Recharge la page ● Ne permet pas d'afficher la progression ● AJAX ? <form enctype="multipart/form­data" action="upload.php” method="POST"> <input type="hidden" name="META1" value="file" /> <input name="content" type="file" /><br /> <input type="submit" value="Upload File" /> </form> ● Recharge la page ● Ne permet pas d'afficher la progression ● AJAX ?
  • 32. AJAX ?AJAX ? ● Permet de suivre la progression ● Format binaire xhr = new XMLHttpRequest(); xhr.addEventListener("load", successCallback, false); xhr.addEventListener("error", errorCallback, false); xhr.addEventListener("abort", abortCallback, false); xhr.upload.addEventListener("progress", progressCallback, false); xhr.open('POST', url, true); xhr.send(data); ● Permet de suivre la progression ● Format binaire xhr = new XMLHttpRequest(); xhr.addEventListener("load", successCallback, false); xhr.addEventListener("error", errorCallback, false); xhr.addEventListener("abort", abortCallback, false); xhr.upload.addEventListener("progress", progressCallback, false); xhr.open('POST', url, true); xhr.send(data);
  • 33. Et mon formulaire ?Et mon formulaire ? ● L'object storage attend un formulaire ● On crée le formulaire en javascript ● http://caniuse.com/#search=formdata http://caniuse.com/#search=file formData = new FormData(); formData.append('meta1', “file”); formData.append('content', fp); … xhr.send(formData); ● L'object storage attend un formulaire ● On crée le formulaire en javascript ● http://caniuse.com/#search=formdata http://caniuse.com/#search=file formData = new FormData(); formData.append('meta1', “file”); formData.append('content', fp); … xhr.send(formData);
  • 34. Contraintes des uploadsContraintes des uploads ● Adsl répandu ● Upload de l'adsl : max 128 Ko/s (1Mbps) ● Les uploads durent des heures ● Adsl répandu ● Upload de l'adsl : max 128 Ko/s (1Mbps) ● Les uploads durent des heures
  • 35. Fiabiliser les uploadsFiabiliser les uploads Navigateur web Serveur applicatif Object storage Upload
  • 36. Chef ça a cassé !Chef ça a cassé ! ● Same origin policy ! ● Aucun appel Ajax sur un autre domaine ● C'était trop beau… ● Same origin policy ! ● Aucun appel Ajax sur un autre domaine ● C'était trop beau…
  • 37. CORSCORS ● Permet de définir les serveurs autorisés ● Configuration sur les serveurs ● http://caniuse.com/#search=cors // Requête de firefox GET /fileList/ HTTP/1.1 Origin: http://mywebapp.ovh // Réponse du serveur cluster.objectstorage.ovh Access­Control­Allow­Origin: http://mywebapp.ovh ● Permet de définir les serveurs autorisés ● Configuration sur les serveurs ● http://caniuse.com/#search=cors // Requête de firefox GET /fileList/ HTTP/1.1 Origin: http://mywebapp.ovh // Réponse du serveur cluster.objectstorage.ovh Access­Control­Allow­Origin: http://mywebapp.ovh
  • 38. Au fait, tu dois gérer IE8 !Au fait, tu dois gérer IE8 ! ● Dernier IE de Windows XP... ● Gére pas formData (IE10) ● Gére pas CORS (IE10) ... ● Dernier IE de Windows XP... ● Gére pas formData (IE10) ● Gére pas CORS (IE10) ...
  • 39. Au fait, tu dois gérer IE8 !Au fait, tu dois gérer IE8 ! ● On crée une iframe sur cluster.objectstorage.ovh ● Contenant un formulaire ● On simule le clic sur le bouton ● On crée une iframe sur cluster.objectstorage.ovh ● Contenant un formulaire ● On simule le clic sur le bouton
  • 40. Les autres blagues de IE < 10Les autres blagues de IE < 10 ● Upload de .jpeg ? ● Sélection multiple ? ● Windows phone 8 ? ● Upload de .jpeg ? ● Sélection multiple ? ● Windows phone 8 ?
  • 41. On peut uploader un dossier ?On peut uploader un dossier ? ● Chrome le peut. C'est deprecated ● Firefox bute sur l'ergonomie ● WebAPI ? ● Chrome le peut. C'est deprecated ● Firefox bute sur l'ergonomie ● WebAPI ?
  • 42. Etape 3 : La réalisation et ses aléas Etape 3 : La réalisation et ses aléas
  • 43. Les bugs poilusLes bugs poilus
  • 44. Remontées des utilisateursRemontées des utilisateurs ● Mon download a crashé au bout de 27h ● Mon zip est corrompu ● Mon download a crashé au bout de 27h ● Mon zip est corrompu
  • 45. Ce qu'en pense les sysadminsCe qu'en pense les sysadmins ● Non pas de reboot de serveur ● Aucune alerte du monito ● Au fait, pendant que tu es là, tu as vu mon mail sur la conso de RAM ? ● Non pas de reboot de serveur ● Aucune alerte du monito ● Au fait, pendant que tu es là, tu as vu mon mail sur la conso de RAM ?
  • 46. Conso de RAM ?Conso de RAM ? ● Pas possible : je stream ● Je reproduis pas en dev : c'est le serveur qui est mal configuré ● Monito des process PHP : non c'est pas eux qui mangent la RAM ! ● Pas possible : je stream ● Je reproduis pas en dev : c'est le serveur qui est mal configuré ● Monito des process PHP : non c'est pas eux qui mangent la RAM !
  • 48. Nginx ?Nginx ? Syntax:  proxy_buffering on | off; Default:  proxy_buffering on; Context:  http, server, location http://nginx.org/en/docs/http/ngx_http_proxy_module.html Syntax:  proxy_buffering on | off; Default:  proxy_buffering on; Context:  http, server, location http://nginx.org/en/docs/http/ngx_http_proxy_module.html
  • 50. Tout est bien qui finit bienTout est bien qui finit bien
  • 51. En fait, le dev web c'estEn fait, le dev web c'est ● Multi – navigateur ● Ça doit gérer le réseau ● C'est comme les oignons, ça a des couches ● Multi – navigateur ● Ça doit gérer le réseau ● C'est comme les oignons, ça a des couches
  • 52. Merci ! Des questions ? Merci ! Des questions ?
  • 53. Les requêtes HTTP de l'extrêmeLes requêtes HTTP de l'extrême Vincent Cassé - @vcasseVincent Cassé - @vcasse