Archives pour l'étiquette S3

Site web média et presse : Le stockage et l’espace disque

Question matutinal

Si je reformule les deux interrogations  du matin je poserais la question suivante : Quel est l’impact financier le plus important du stockage (news et archive) pour un site web de presse ou média. Est-ce l’espace disque pour le stockage lui même ou la bande passante pour exploiter ce qui à été stocké ?

Je n’ai pas le temps ni l’envie de faire des statistiques, des benchmarck ou de compiler des données. Je vais donc donner mon humble avis en me basant sur mes souvenirs de Prisma-Presse, sur mon actualité chez Mondadori et plus largement sur mon expérience.

L’espace disque

L’espace disque brut en 2014 n’est plus un problème. Je parle bien d’espace disque brut, c’est à dire le disque lui même et pas forcément les moyens de l’exploiter.

Sur Amazon Web Service, qui de par sa position de leader donne la température, 13To de disque magnétique de performance moyen coût légèrement moins de 800$ HT par mois. Chez OVH, leader en France, un NAS incluant les moyens de partager l’espace disque et de l’administrer (cif / nfs / etc) c’est 1000€ HT par mois

13To c’est à peu moins d’un tiers de l’espace disque total nécessaire à un groupe presse de la taille de Prisma Presse ou Mondadori pour faire fonctionner l’ensemble des services.

On vois que les coûts d’espace disque brut sans être négligeable ne sont pas insurmontable.

La bande passante

La bande passante en 2014 n’est pas un problème sauf ponctuellement et encore.

Si ont rependre comme référence Amazon Web Service , OVH ou d’autre (ikoula, Oxalid, iliad etc..) vous aurez à votre disposition des gros tuyaux capable de compenser le pire des complexes phalliques du plus minable des machistes. Bref de l’énorme.

Sur Amazon Web Service, sans optimisation des coûts, 10Go de transfert vers l’internet par jour vous coûtera  35$ par mois. C’est un peu près le volume de donnée pour trois sites web féminin majeur français (je ne cite personne)

Ponctuellement, un scoop, un buzz, un événement peux engendrer une surcharge à l’entré du tuyau :

  • Si vous êtes encore dans une infrastructure dédier et cantonné dans un data center en général la couche firewall et / ou répartiteur de charge est taillé pour assurer à 120 ou 130% de consommation courante.  Payé 30% de plus de capacité et ne pas l’utiliser 99% temps est, financièrement, une sécurité suffisamment coûteuse pour la plupart des dirigeants.  Donc, 24h ou 48h par ans, un scoop tombe et engendre un pic d’audience. Malgré le cache http et les CDN vous n’avez pas la qualité de service optimum et ça râle à l’édito. Vous rappeler le prix du service up a 100% quel que soit les conditions, tout le monde tousse et on passe à la question suivante.
  • Et encore si êtes dans un vrai cloud type IaaS (et pas juste de la virtualisation) vous avez la capacité d’être élastique, agile et réactif. Vous augmenterez votre capacité le temps de la tempête médiatique. Cela peux coûter un peu, mais cela dure juste le temps de la vague.

Il est ou le vrai coût du stockage ?

Le vrais coût du stockage est dans le stack applicatif utilisant le stockage, c.a.d votre site web.

Si votre développement ne sais que écrire ou lire dans un répertoire sans la moindre intelligence vous ne pourrez jamais tirer parti des systèmes de stockages qu’invente les acteurs de l’hébergement web, du cloud et des évolutions en général.

Une stack applicatif capable de changer de backend de storage pour passer d’un disque, à un NAS, puis à du AWS S3 cela a un coût bien supérieur au volume de disque ou à la BP brute. C’est du travail d’architecte web et de développeur, du jus de cerveaux qui à un coût. Soit ponctuellement par un grand big bang pour changer de paradigme de stockage, soit en continu.

Une stack applicatif applicative qui n’est pas économe des ressources de stockage. Qui ne prend pas en compte son propre auto-nettoyage. Qui ne vide pas automatiquement la poubelle, ne supprime pas les versions obsolètes. Un stack applicative de ce type va entasser. En dernier lieu plus personne ne maîtrise, personne ne veut prendre le risque de supprimer du contenu et c’est l’explosion du stockage.

Un autre partie, très souvent négligé, c’est les opérations d’exploitation et de sysadmin. Plus votre stockage augmentent et reste monolithique (cf: lire et écrire dans un répertoire)  plus sa manipulation  devient problématique. Déplacement, duplication, backup, restaurations, migration, synchronisation prendrons un temps précieux et tuerons toute réactivité.

La également votre  stack applicatif doit être capable d’adresser les objets stocker de façon répartie et modulaire (sharding, hachage, migration continue etc.), un peu sur disque et beaucoup dans le cloud. Et nous en revenons au jus de cerveaux et au code.

Le stockage ne coûte plus grand chose. Le tuyau de bande passante, moyen d’origine pour utiliser le stockage ne coûte pas non plus beaucoup. Mais le moyen d’utiliser les différents stockages, voir plusieurs en même temps; de passer de l’un l’autre, de façon répartie et modulaire repose sur le code de votre application. Et ça c’est du jus de cerveau qui à un prix.

Autant du stockage brut doit être considéré comme un coût. Un peu comme de l’essence pour une voiture. Autant la création d’une voiture capable d’utiliser indifféremment carburant est un investissement. Même chose pour vos applications.

Script de création d’une Amazone Machine Image (ami) instance root

Script de création d’un Amazone Machine Image (ami) instance root[1] depuis l’instance de référence utilisé comme modèle pour construire l’image en question.

Dans mon cas j’utilise un type hardware m1.large avec comme départ une image de Ubuntu Karmic 9.10 créé par alestic.com.. Une fois cette instance démarrée je l’ai modifier et updaté en fonction des mes besoins. Souhaitant garder comme master de départ cette instance et la dupliquer à volonté j’ai créé décidé et créé une AMI.

Pour ce faire il faut installer les paquets suivant :

apt-get <span style="color: #c20cb9; font-weight: bold;">install</span> ec2-ami-tools apt-get <span style="color: #c20cb9; font-weight: bold;">install</span> ec2-api-tools

Il est nécéssaire en outre de disposer d’un stockage Amazon Simple Stockage Service dit bucket S3.

Je considère que disposer déjà d’un compte AWS et des éléments d’identification et authentification lier à ce compte : access key, secret key, certificat x509 etc..

Le script en question de fait que reprendre les commandes ec2 expliqué dans les documentations officielles AWS.

<span style="color: #808080; font-style: italic;">#!/bin/sh</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">bucket=</span>ami-stockage
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">prefix=</span>k9-karmic-OsBase
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">AWS_USER_ID=</span><span style="color: #000000;">9452</span><span style="color: #000000;">-1810</span><span style="color: #000000;">-7536</span>
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">AWS_ACCESS_KEY_ID=</span>TV542X3ONAAKITV54YCTN
<span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">AWS_SECRET_ACCESS_KEY=</span>dwYjHg2msv8rQEjmSBDPFP4m1f4R31f3rCJ9bI
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">[</span> $<span style="color: #7a0874; font-weight: bold;">(</span><span style="color: #c20cb9; font-weight: bold;">uname</span> -m<span style="color: #7a0874; font-weight: bold;">)</span> = <span style="color: #ff0000;">'x86_64'</span> <span style="color: #7a0874; font-weight: bold;">]</span>;
<span style="color: #000000; font-weight: bold;">then</span>   <span style="color: #007800;">arch=</span>x86_64
<span style="color: #000000; font-weight: bold;">else</span>   <span style="color: #007800;">arch=</span>i386
<span style="color: #000000; font-weight: bold;">fi</span>   <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>ec2-bundle-vol -r <span style="color: #007800;">$arch</span> -d <span style="color: #000000; font-weight: bold;">/</span>mnt -p <span style="color: #007800;">$prefix</span> -u <span style="color: #007800;">$AWS_USER_ID</span> -k <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>pk-<span style="color: #000000; font-weight: bold;">*</span>.pem \     -c <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>cert-<span style="color: #000000; font-weight: bold;">*</span>.pem -s <span style="color: #000000;">10240</span>  -e <span style="color: #000000; font-weight: bold;">/</span>mnt,<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>ubuntu<span style="color: #000000; font-weight: bold;">/</span>.<span style="color: #c20cb9; font-weight: bold;">ssh</span>    <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>ec2-upload-bundle -b <span style="color: #007800;">$bucket</span> -m <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$prefix</span>.manifest.xml \     -a <span style="color: #007800;">$AWS_ACCESS_KEY_ID</span> -s <span style="color: #007800;">$AWS_SECRET_ACCESS_KEY</span>   <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>ec2-register -K <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>pk-<span style="color: #000000; font-weight: bold;">*</span>.pem -C <span style="color: #000000; font-weight: bold;">/</span>mnt<span style="color: #000000; font-weight: bold;">/</span>cert-<span style="color: #000000; font-weight: bold;">*</span>.pem <span style="color: #007800;">$bucket</span><span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$prefix</span>.manifest.xml

ec2-bundle-vol construit les paquets de l’image AMI tout en excluant ce celle ci le contenue du répertoire /mnt (avec l’option -e ) ou justement sont stocker provisoirement les paquets en question. J’exclue également /home/ubuntu/.ssh préférent utilisé le compte root.

ec2-upload-bundle upload les paquets sur le bucket S3

ec2-register déclare dans votre compte l’ami, qui reste privée, afin qu’elle soit disponible pour créé de nouvelle instance.

Notes

[1] c’est à dire avec / sur le disque local éphémère