my Geek::Story;

15/09/2005

cdn.geekstory.net

Filed under: — guedou @ 23:21

[ CDN == Content Delivery Network ]

Ce site est sans aucun doute ultra lent en dehors de ma tres chere archipelle. Apres l’etude d’un echantillon de 585 IPs qui se sont connectees ici, il s’avere que la plupart des visiteurs ne sont pas japonais. Un mirroir francais est donc prevu tres prochainement afin d’ameliorer sensiblement les choses. Voici en details ce qui va bientot vous arriver :*)

L’approche la plus simple consiste a dupliquer le site du japon vers la france en utilisant rsync. C’est bien beau mais le nom de domaine pose probleme.
J’aurai pu pour faire simple separer les deux versions en jp.geekstory.net et fr.geekstory.net mais:

  1. je trouve ca tres laid
  2. wordpress m’aurait pris la tete
  3. c’est tellement facile que c’est pas du jeu

Je me suis donc mis en tete qu’il fallait adapter la reponse renvoyee par le serveur DNS lorsqu’on lui demande l’adresse IPv4 de my.geekstory.net. J’ai imagine tout un tas de facons farfelues pour le faire au niveau du serveur DNS:

  • RTT: c’est chiant faut envoyer un paquet et attendre l’eventuelle reponse
  • TTL IP recu: c’est a peine fiable pour identifier les machines japonaise qui sont en general a 17 sauts (?!?) de mon serveur alors pour les autres …
  • whois: c’est penible a parser surtout les entrees en japonais
  • AS/BGP/IRR: c’est bien mais c’est beaucoup de boulot :*)

J’ai quelques stats et autres graphes sous la main pour les plus valeureux mais il n’y a pas grand chose a en tirer.

J’ai finalement opte pour geoip, ca a l’avantage de marcher en 2 lignes de python. Une delegation de zone et 2 virtual hosts dans apache et l’affaire a ete pliee.

J’ai bricole un faux serveur DNS a l’aide de scapy. Il adapte les reponses en fonction du pays determine par geoip. Si c’est une IP japonaise, je renvoye l’IP du serveur actuel sinon, je renvoye l’IP du mirroir francais. L’operation est totalement transparente pour l’utilisateur mais au final l’acces au site se fait plus rapidement :*)
Code disponible sur demande.

Merci de le stresser intensivement en lui balancant n’importe quoi dans la tronche. J’aimerai voir si ca tient la route avant de m’en servir pour autre chose que pour de rire. Merci de me dire si vous voyez la difference.

Afin de tester tout ca, j’ai mis en place http://cdn.geekstory.net a comparer avec http://my.geekstory.net/moblog/thumbs/ pour la rapidite d’acces. Apparement, http://cdn.geekstory.net blaste sa grand mere :*)

En allant sur http://cdn.geekstory.net, les japonais voient ca:

cdn JP

Les francais voient ca:

cdn FR

Si vous n’avez rien compris, les commentaires sont la pour ca :*)


Note: pour acceder a la version japonaise, les plus valeureux peuvent modifier leur /etc/hosts de la facon suivante:
203.178.135.36 cdn.geekstory.net

Note bis: apparement, j’ai encore fait ma cosmo porcasse et d’apres Bozze, j’aurai pu jouer avec mod+perl, geoip et des redirections au niveau d’apache … mais c’est bien moins rigolo :)