Tous les éditeurs de services internet rencontre un jour le cas d’usage suivant :
Mes clients sont répartis partout sur le globe mais mes services ne sont hébergés qu’en France. Comment puis-je délivrer de manière optimale mon contenu ?
Pour une partie de ce contenu, la réponse se nomme CDN ou Content Delivery Network.
Un CDN est un réseau de serveur réparti en bordure des dorsales Internet (infrastructures principales des Internet) et qui permet de fournir du contenu aux utilisateurs en leur offrant la latence la plus faible.
Pour parvenir à cet objectif, le CDN stocke ou cache le contenu d’origine dans ces propres serveurs et sélectionne automatiquement le serveur qui est géographiquement le plus proche de l’utilisateur.
Le contenu est réparti sur l’ensemble des points de présence géographiques du CDN permettant d’offrir une qualité de service identique quelque soit l’origine géographique de la requête.
L’illustration suivante, issue du site Akamai détaille l’architecture d’un CDN.
Il existe de nombreux service CDN disponibles parmi lesquels :
- Akamai
- Riverbed
- EdgeCast
- OVH
- CloudFare
- Arkena
- SFR Business Team
Il y a de nombreuses raisons à utiliser un CDN dans le cadre d’un service internet. Les principales sont :
- Réduction significatives du nombre de connections à votre infrastructure quelle soit on-premise ou cloud
- Certains de vos fichiers sont déjà dans le CDN. Par exemple, les librairies jQuery ont certainement déjà été demandées par un autre utilisateur pour un autre service
- Les CDN offrent de capacités d’infrastructure scalable, résilientes et avec une latence très faible
- Les CDN multiplient vos points de présence sur les Internet
- Les CDN offrent des capacités natives de versionning des fichiers cachés
- Les CDN fournissent des statistiques détaillées sur votre contenu
- Les CDN boostent les performances de vos services internet
Les CDN permettent des économies significatives en évitant de déployer vos services internet dans des datacenters géographiquement répartis.
Dans ce billet, je vais me concentrer sur le déploiement de CloudFront, un service de Amazon Web Services (AWS) car il est simple d’utilisation et permet facilement de mettre en œuvre une infrastructure CDN pour tous les types de site internet.
CloudFront offre des services de CDN pour du contenu HTTP ou video via le protocole RTMP. Ce sont là ces deux cas d’usage.
Déployer CloudFront pour son contenu statique
Pour ce cas d’usage, nous avons la possibilité de distribuer le contenu stocker soit sur un bucket AWS S3, un service de stockage HTTP de Amazon Web Services, soit sur un server de votre infrastructure onpremise ou cloud.
Pour déployer CloudFront, il est nécessaire de disposer d’un compte AWS.
A partir de la console, il faut sélectionner le service CloudFront.
Sur la page de garde du service CloudFront, cliquer sur « Create Distribution ».
Le service vous offre de créer une distribution « WEB » ou « RTMP ». Nous choisirons « WEB ».
Même si CloudFront est un service simple d’usage, plusieurs paramètres sont à fournir pour déployer un CDN de contenu Web.
Les paramètres d’un service CloudFront son répartis en catégories :
- Origin Settings
- Default Cache Behaviour Settings
- Distribution Settings
Nous passerons ici en revue uniquement les plus importants et les plus courants.
Premier paramètre, le « Origin Domain Name » qui peut prendre la forme de 2 type de valeurs :
- L’adresse d’un bucket S3 (ex : monbucketS3.s3.amazonaws.com)
- L’URL de votre serveur (ex : www.macompagnie.com)
Ce paramètre détermine donc la source d’origine du contenu à distribuer.
Le second paramètre est celui du « Origin Path ». Ce paramètre détermine le chemin du contenu à distribuer dans le domaine d’origine. Par exemple, pour un site internet, ce paramètre pourrait être « /static/images ».
Enfin, il faut saisir le « Origin ID » qui est une description libre du contenu d’origine.
La seconde catégorie de paramètres permet de définir le comportement du CDN par rapport aux requêtes.
Le paramètre « Default pattern » n’est modifiable qu’après déploiement et permet par l’ajout de comportements « Behaviour » supplémentaires de discriminer certains fichiers ou chemins d’accès du serveur d’origine.
Le paramètre « Viewer Protocol Policy » permet définir le comportement du service par rapport à l’usage du HTTPS. 3 choix sont possibles :
- HTTP et HTTPS : le CDN sert indifféremment les requêtes chiffrées (HTTPS) ou non (HTTP)
- Redirect HTTP to HTTPS : CloudFront redirige une requête HTTP sur une ressource cachée vers une requête chiffrée HTTPS sur la même requête. Ex : la requête http://1234.cloudfront.net/images/toto.jpg est redirigée vers https://1234.cloudfront.net/images/toto.jpg puis servie
- HTTPS only : CloudFront n’accepte que les requêtes chiffrées.
Le paramètre « Allowed HTTP method » permet de définir les verbes du protocole HTTP qui sont autorisé par CloudFront dans les requêtes.
Le paramètre « Object Caching » est utilisé pour réduire le temps de vie (TTL) des objets stockés dans le cache.
La catégorie « Distribution Settings » nous offre de nombreuses options pour définir le type d’utilisateurs que nous souhaitons servir.
Le paramètre « Price Class » permet de limiter la distribution qu’à un certain nombre de zone géographique.
Le paramètre « Alternate Domain name » nous autorise à utiliser des noms de domaine supplémentaire comme par exemple www.mafilliale.com ou cdn.macompagnie.com pour servir le même contenu. Ce paramètre est utile pour servir le contenu d’un bucket S3 sous un nom de sous-domaine simple comme static.monentreprise.com
Le paramètre « SSL Certificate » permet d’utiliser soit le certificat générique du service CloudFront soit un certificat en propre.
L’usage d’un certificat en propre est indispensable lorsque l’on choisi de servir en HTTPS le contenu autre que celui d’un bucket S3 ou encore d’utiliser une redirection CNAME pour le contenu d’un bucket S3. Dans le cas où un certificat dédié est utilisé, celui-ci doit être stocké dans le service IAM de AWS.
Le paramètre « Logging » nous permet de bénéficier des logs d’accès aux ressources cachées par le CDN.
Ces logs sont stockées sur un bucket S3.
La mise en œuvre d’une distribution RTMP pour des videos flash suit les mêmes besoins.
Statistiques offertes par CloudFront
CloudFront offre de nombreuses statistiques permettant de suivre et monitorer l’usage des ressources distribuées.
Le service propose des statistiques sur le nombre total de requêtes servies ou encore le volume de données transféré aux clients.
CloudFront fourni également des statistiques intéressantes sur les codes erreurs retournés (HTTP200 ou HTTP404) ou encore le nombre de requêtes n’ayant pas été servies correctement. Cela nous permet de détecter facilement des erreurs dans le code des services internet.
Bien sûr ces statistiques sont déclinables au niveau de l’objet caché et de type de requêteur tel que le navigateur, son origine géographique ou le type de device.
Modèle de facturation de CloudFront
CloudFront est un service payant de AWS qui s’appuie sur plusieurs points de facturation pour déterminer son coût :
- Volume sortant
- Taille moyenne des objets cachés
- Type de requête à servir (HTTP ou HTTPS)
- Nombre de requêtes d’invalidation (suppression manuelle d’un objet du cache)
- Répartition de la provenance géographique des requêtes
- Usage d’un certificat SSL dédié (600 US$ par mois).
Besoin d'être accompagné dans votre projet Cloud ?