VT2021 CDN fiche

= Content Delivery Network =

ADNRIEUX Liam (liam.adnrieux@etu.univ-grenoble-alpes.fr) - REGOUIN Roman (roman.regouin@etu.univ-grenoble-alpes.fr)

Résumé
Un "réseau de distribution de contenu" ou "Content Delivery Network" (CDN) est un réseau géographiquement distribué de serveurs proxy et de centre de données avec pour objectif de rendre hautement disponible la distribution de service relativement à l'utilisateur. Il est constitué d’un serveur d'origine (généralement l'application) qui va injecter son contenu dans le réseau. Il est aussi constitué de serveurs périphériques (appelé PoP pour Point of Presence) déployés à plusieurs endroits géographiquement distincts, où les contenus sont répliqués et mis en cache au plus proche de l’utilisateur. Il comprend un mécanisme de routage qui permet de servir l’utilisateur avec le serveur périphérique le plus proche.

L'impact direct d'un CDN est l'amélioration de l'expérience utilisateur en réduisant la latence entre l'utilisateur et le contenu. Il permet aussi une meilleure mise à l'échelle ainsi qu'une meilleure résistance aux attaques DDoS (attaque par dénis de service distribué) notamment grâce à des filtres sur des protocoles en périphérie du réseau. Il est à noter qu’un CDN peut représenter un certain nombre d'inconvénients, entre autres les coûts supplémentaires qu’il peut engendrer ou la fuite de données potentiellement critique vers d’autres entreprises.

Mots clefs : PoP, Serveur, DDoS, Réseau, Performance, Latence, Cache, Disponibilité, Mise à l’echelle.

Abstract
A Content Delivery Network (CDN) is a geographic distributed network of proxy servers and data centers whose main goal is to make the service distribution highly available relative to the end user. It is composed of an origin server (generally the application server) which will dispatch his resources in the network. It is also composed of peripheral servers (called PoP) deployed at multiple distincts geographical places. It includes a routing mechanism allowing the system to serve the end user with the closest peripheral server.

The direct impact of using a CDN is the improvement of user experience by reducing the latency between the user and the content. It also allows scalability and a better resistance to DDos attacks (Distributed denial of service attack) mainly with filters on protocole at the edge of the network. It should be noted that a CDN can represent a number of cons, notably the additional costs it can produce or the loss of critical data to other companies

Vue d'ensemble
Un "réseau de distribution de contenu" ou "Content Delivery Network" (CDN) est un réseau géographiquement distribué de serveurs proxy et de centre de données avec pour objectif de rendre hautement disponible la distribution de service relativement à l'utilisateur. Il est constitué de serveurs périphériques (PoP pour Point of Presence) déployés à plusieurs endroits géographiquement distincts, où les contenus sont répliqués et mis en cache au plus proche de l’utilisateur. Il est constitué d’un serveur d'origine (généralement l'application) qui va injecter son contenu dans le réseau. En cas d’une requête reçue par l’un de ses PoPs, s’il dispose du contenu demandé, alors on a un “Cache Hit” et le PoP délivre directement le contenu demandé. Dans le cas où il ne dispose pas du contenu demandé, dans le cas d’un contenu dynamique ou juste pas encore mis en cache, alors on a un “Cache Miss”. Il transfère la requête au serveur origine puis si possible il met en cache la réponse avant de l’envoyer à l’utilisateur. Dans certains cas, les Pops sont indépendants les uns des autres et seul le pop ayant fait la requête a mis en cache la réponse. Dans d’autres cas, la réponse est distribuée entre plusieurs PoPs, soit par groupe de PoPs localisé dans une même zone géographique, soit sur tous les PoPs d’un CDN.

Les serveurs PoPs doivent respecter les réglementations du pays où ils sont installés et cela peut parfois devenir très contraignant quand on essaye de mettre en place son propre CDN. C’est pourquoi des services de CDN existent et qui s'occupent de placer leur serveurs PoP sur tous les continents tout en respectant les réglementations en vigueur. Il comprend aussi un mécanisme de routage qui permet de servir l’utilisateur avec le serveur périphérique le plus proche pour optimiser les performances du CDN.

Routage CDN
Pour mettre en place un CDN, il faut mettre en place un ou plusieurs record Cname auprès de son fournisseur DNS (Domain Name System) pour que le routage vers le nom de domaine de notre serveur passe par le CDN. Un fichier Cname est un fichier permettant d’indiquer un sous-domaine. Cela permet de rediriger les requêtes vers le nom de domaine du fournisseur CDN. Puis auprès du fournisseur CDN, il faut indiquer via un record A pour indiquer l’adresse de notre serveur quand il y’a un cache Miss

Type de CDN

 * Push CDN

Dans un CDN de type push, c’est l’application qui va charger de son propre chef du contenu sur les CDN. Par exemple pour le déploiement d’une nouvelle mise à jour d’un logiciel, le(s) serveur(s) d'origine va charger la mise à jour dans les PoP.




 * Pull CDN

Dans un CDN de type pull, c’est le CDN qui va demander (du à une requête d’un client) au serveur de l’application du contenu pour ensuite le mettre en cache.

Rapidité de Distribution
On a beau optimiser les performances de notre serveur au maximum pour minimiser le temps de traitement pour une requête utilisateur, quoi qu’il arrive on est limité par les contraintes que nous impose le monde physique. Nos informations ne pourront jamais atteindre nos utilisateurs plus vite que la vitesse de la lumière (299 792 458 m/s). C’est l’un des problèmes que le CDN permet de contourner en fournissant le contenu au plus proche des utilisateurs et permet de réduire drastiquement la latence entre les utilisateurs et le contenu désiré.

Réduction de la Charge Serveur et Haute Disponibilité
De manière indirecte, le CDN permet par son fonctionnement de réduire la charge du serveur. En mettant en cache le contenu dans les serveurs périphériques, cela permet de filtrer une grande partie des requêtes qui sont directement délivrées par le CDN.

De la même manière, cela permet d’augmenter la disponibilité du serveur d’origine. Celui-ci n’étant que très rarement chargé, il n’y a que peu de risques de saturation du serveur d’origine et garantit de ce fait une meilleure disponibilité. Un point qui peut être souligné, il arrive parfois que grâce à un CDN, un site puisse toujours être accessible malgré le fait que le serveur soit tombé en panne. Cela peut s’expliquer par le fait que la majorité du contenu du serveur d’origine soit encore stocké dans le CDN ce qui permet de livrer le contenu aux utilisateurs. Ceux-ci ne sont donc même pas au courant que le serveur est en panne.

Enfin, en cas d’un pic d’affluence de visiteurs, qui peut parfois ressembler à une attaque DDos, le CDN permet d’encaisser cette affluence avec la répartition géographique des visiteurs sur les différents serveurs périphériques.

Sécurité
De manière générale, les services de CDN garantissent l’usage des certificats SSL utilisés pour les requêtes HTTPs. Cependant, la majorité des services de CDN propose davantage de sécurité notamment contre les attaques DDos (attaque par dénis de service distribué). De par son architecture qui met en cache le contenu et ne permet pas de liaison directe avec le serveur d’origine, un CDN permet naturellement une première protection contre les attaques de type DDos en répartissant la charge de l’attaque sur l’ensemble des serveurs périphériques. Leur cache permet de livrer rapidement les requêtes et de contenir la haute fréquence de requête des attaques. Cependant, dans le cas de très grosse attaque DDos, cela ne peut pas suffire. C’est pourquoi les services de CDN appliquent des filtres sur les couches 3/4 (UDP,ICMP,SYN) et la couche 7 en inspectant le contenu HTTP pour limiter l’impact des attaques DDos.

Limitations
La mise en place d’un CDN ajoute une complexité non négligeable.

Coût
Suivant le fournisseur, les prix peuvent varier. Des fournisseurs comme CloudFlare donnent accès aux fonctionnalités de base gratuitement. Pour des fonctionnalités supplémentaires c’est un paiement fixe par mois (20~200 USD/mois). Nous avons aussi Azure CDN qui lui opte pour une facturation “pay as you go” (0,081 USD/Go).

Perte de Contrôle
Les CDN sont proposés par des tiers, de ce fait, on accorde sa confiance. Les données stockées sur les CDN peuvent ne plus être entièrement privées. De plus, les infrastructures sont aussi gérées par ces tiers, nous n'avons donc aucun contrôle dessus, les CDN peuvent tomber en panne et nous devons faire confiance au tiers pour qu’ils soient restaurés. Suivant les plan de tarifications, le contrôle des données peut varier, par exemple sur “CloudFlare”, le plan gratuit permet seulement de vider le cache du CDN et non de visualiser ce qui en cache.

Localisation des Services
La plupart des CDNs route les utilisateurs vers le PoP le proche. Cependant dans le cas où notre application d’origine est sur un serveur en France et que le fournisseur de CDN n’a pas de PoP en France mais seulement en Chine, un utilisateur en france sera redirigé vers le Pop de Chine ce qui entraînera de la latence. Si nous avions pas de CDN en place, l’utilisateur aurait été dirigé directement vers le serveur de l’application qui est en france.

Mettre en place
Voir la documentation du fournisseur ;)