web-dev-qa-db-fra.com

Comment fonctionne CDN (Content Distribution Networks)?

Prenant Akamai en CDN. D'après ce que j'ai compris, lorsqu'un client demande une page, la demande est envoyée au serveur central Akamai qui, selon son emplacement, sélectionne un serveur Akamai Edge et les demandes ultérieures des clients sont directement adressées à ce serveur Edge. Ma question est la suivante:

Lorsqu'un client demande un site Web (par son nom), une fois que le DNS a résolu le nom en adresse IP du serveur central Akamai et l'a transmis au client, le client conserve cette adresse IP. accéder directement à l'adresse IP des serveurs Akamai Edge?

Ou bien est-il nécessaire que lorsque le CDN est utilisé, la résolution DNS elle-même soit effectuée par le serveur CDN?

Les grandes sociétés telles que Google, Amazon et Facebook ont-elles leur propre serveur CDN ou font-elles appel à des fournisseurs CDN tiers comme Akamai? Dites Google et Yahoo! les deux utilisent les CDN Akamai, puis le contenu de Yahoo! et Google réside sur le même serveur? Cela ne pose-t-il pas un problème de sécurité potentiel?

37
p2pnode

Vous n'hébergez pas simplement l'ensemble du site avec le CDN, mais simplement votre contenu .

Je viens de me rendre compte que je répondais à une question similaire il y a un moment: Que fait akamaihd.net?

Data request flowImage de WikiMedia

Donc, votre site référence http://akamai/myfile.ext. Ceci demandera myfile.ext à partir de akamai. akamai peut ensuite envoyer une redirection HTTP au serveur de contenu actuel.

Désormais, lorsque cette dernière étape sera mise en cache, tant mieux, toutes les futures demandes iront au serveur de contenu le plus proche.

Comment ça marche?

Supposons ce site:

<html>
  <body>
    <img src="http://cdn/oliver.png" />
  </body>
</html>

Je demande ce site Web à partir de mon propre serveur Web. Le fichier .html est non hébergé avec cdn. Le DNS de mon serveur Web non plus.

Demande initiale

Donc, mon navigateur a obtenu ce fichier HTML et l’analyse maintenant. Il trouve l'image référencée et note qu'elle se trouve à http://cdn/oliver.png. Il demande ce fichier.

Pour ce faire, il doit trouver l'adresse IP cdn. Dans notre exemple, cette adresse IP est 10.10.10.10.

Avec cette adresse IP, il peut se connecter au serveur cdn et demander /oliver.png.

Emplacement géographique

Maintenant, cdn réalise que " ce gars vient d’Allemagne! ". Donc au lieu de m'envoyer la superbe photo que je voulais, il m'envoie une redirection HTTP en disant:

/oliver.png n'est pas ici. C'est à 10.10.33.33/oliver.png

Donc, mon navigateur va demander à 10.10.33.33 (ce qui est plus proche de moi, espérons-le) pour la photo.

Sérieusement?

Je ne dis pas que c'est comme cela que TOUTES LES CDN fonctionnent, mais ce serait une approche.

Vous pouvez également implémenter un démon DNS qui renvoie des résultats différents pour une recherche de nom en fonction de l'emplacement de l'auteur de la requête.
Mais je doute que cela se fasse dans la pratique. Mais peut-être que je ne peux tout simplement pas imaginer comment régler cela correctement. Voir la réponse de de fluffy pour savoir comment cela pourrait fonctionner.

Qui gère les CDN?

La plupart des acteurs mondiaux ont leur propre réseau de diffusion de contenu (ou du moins, je suppose). Certains fournisseurs délèguent simplement certains services à des CDN plus volumineux (comme Microsoft le fait avec les téléchargements MSDN). Et cela pourrait en quelque sorte toucher votre deuxième sujet.

Considérez cela, dans le MSDN, Microsoft propose des téléchargements de produits. Ces téléchargements sont ensuite fournis par Akamai. Si vous pouvez déterminer l'URL de ce téléchargement, vous pouvez simplement télécharger le produit sans jamais contacter Microsoft.

Est-ce un problème de sécurité? Pas vraiment, car ce qui est téléchargé est toujours protégé (par une clé de produit).

Mais qu'en est-il des autres données?

Si vos données sont pertinentes pour la sécurité, il ne s'agit pas d'un contenu CDN. Si vous ne voulez pas que quelque chose soit disponible aussi largement que possible, ne le mettez pas dans un CDN.

27
Der Hochstapler

Une approche assez commune à CDN consiste à utiliser ce que l'on appelle "anycast ". La façon dont cela fonctionne est que vos serveurs distribués sont co-localisés avec des DNS qui répondent avec ce serveur comme destination; Par exemple, vous pouvez avoir trois serveurs dans différentes installations d'hébergement et leurs DNS respectifs affirment tous que leur adresse IP est l'adresse canonique de votre serveur (appelez-la, par exemple, content.example.com). Les DNS sont chacun configurés pour avoir la même adresse IP globale, puis chacune des installations du serveur utilise les mises à jour BGP pour faire en sorte que la route vers le serveur le plus proche l'emporte. Ainsi, lorsque vous effectuez une recherche de nom sur content.example.com, la plus rapide/le DNS le plus proche/le plus disponible répond à la demande avec son serveur HTTP.

De cette manière, aucune astuce GeoIP n'est nécessaire, et le contenu le plus rapide vous sert toujours, quel que soit le serveur choisi - ce qui peut avoir un lien ou non avec son emplacement physique, en raison de la nature hétérogène d'Internet.

Je crois comprendre qu'Akamai fonctionne au moins partiellement de cette manière.

11
fluffy

Des CDN de type Origin Pull sont également disponibles.

Amazon Cloudfront est capable d'utiliser cette technique.

Vous configurez un fichier CNAME tel que media.example.com qui pointe vers le nom du serveur qui lui est attribué et laisse tout votre contenu sur votre serveur. Pour les images et le contenu que vous souhaitez diffuser sur le CDN, utilisez media.example.com dans l'URL. La demande est envoyée sur le réseau de leur serveur et si le contenu n'est pas disponible, leurs serveurs extraient le contenu de votre serveur. Une fois dans le système, le contenu est distribué aux batteries de serveurs les plus proches de l'endroit où la demande existe et y reste pour la durée de vie attribuée. Votre serveur ne voit plus aucun trafic sur le contenu mis en cache jusqu'à ce que le TTL expire et que Cloudfront soit obligé de l'actualiser.

5
Fiasco Labs

Akamai ne fonctionne pas de cette façon. Différents CDN fonctionnent différemment, mais Akamai n'effectue pas de anycast spécifiquement pour leurs serveurs Web.

Lorsqu'un utilisateur à New York veut www.acme.com, le serveur de noms de acme.com redirige ("délégués") vers un serveur de noms Akamai. Le serveur de noms Akamai voit où se trouve la machine qui pose la question (en fonction de son adresse IP) et renvoie l'adresse IP du meilleur serveur Akamai à desservir www.acme.com.

1
igorlord

Un bon résumé du fonctionnement du CDN d’Akamai est disponible ici

En bref:

  • Les serveurs CDN ont un enregistrement CNAME qui pointe vers les serveurs DNS Akamai.
  • Ainsi, lors de la première demande adressée par un navigateur client à un serveur CDN, son DNS est interrogé sur le serveur DNS d'Akamai, qui répond avec l'adresse IP d'un serveur Akamai proche de l'utilisateur (appelée "serveurs Edge").
  • Ces serveurs Edge peuvent servir des éléments statiques à partir d'un cache local, si cela a été demandé récemment par un autre utilisateur, et il n'est même pas nécessaire de revenir sur votre serveur pour obtenir une copie de l'actif.
  • Les éléments manquants ou les pages non cachables sont routés via le réseau Akamai vers un autre serveur Edge situé à proximité de l'hôte. Ce serveur Edge adresse les demandes réelles au site hôte et les renvoie au serveur Edge d'origine via le réseau. De là, elles sont renvoyées à l'utilisateur final.
  • Etant donné que les serveurs Edge communiquent en interne à l'aide des protocoles exclusifs d'Akamai et acheminent des goulots d'étranglement, le trafic peut circuler beaucoup plus rapidement que sur Internet.

et comme mentionné dans l'article de blog mentionné ci-dessus, certaines grandes entreprises résolvent le DNS en utilisant leurs propres serveurs, ce qui peut annuler certains des avantages de l'utilisation d'un CDN.

0
Brad Parks