<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Decrypt</title>
	<atom:link href="http://decrypt.ysance.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://decrypt.ysance.com</link>
	<description>Le site de decryptage des technologies de l&#039;informatique</description>
	<lastBuildDate>Mon, 20 Feb 2012 08:31:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Un retour d&#8217;expérience gagnant : portage d&#8217;applications Web sur Windows Azure</title>
		<link>http://decrypt.ysance.com/2012/02/un-retour-dexperience-gagnant-portage-dapplications-web-sur-windows-azure/</link>
		<comments>http://decrypt.ysance.com/2012/02/un-retour-dexperience-gagnant-portage-dapplications-web-sur-windows-azure/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 08:29:35 +0000</pubDate>
		<dc:creator>Olivier Léal</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Haute Disponibilité]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Load Balancing]]></category>
		<category><![CDATA[Organisation]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Azure BLOB]]></category>
		<category><![CDATA[DataSync]]></category>
		<category><![CDATA[Experience Utilisateur]]></category>
		<category><![CDATA[Migration Applicative]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Web Role]]></category>
		<category><![CDATA[Windows Azure]]></category>
		<category><![CDATA[Worker Role]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=3087</guid>
		<description><![CDATA[Nous vous proposons dans cet article un témoignage vidéo d'un de nos clients <a title="Site de Specialchem" href="http://www.specialchem.com/" target="_blank">Specialchem</a> sur le portage de le leurs applications Web dans <a title="Site de Windows Azure" href="http://www.microsoft.com/france/windows-azure/" target="_blank">Windows Azure</a>.

Une expérience très riche avec la mise en oeuvre d'<a title="Site de Windows Azure, Compute" href="https://www.windowsazure.com/fr-fr/home/tour/compute/" target="_blank">instances Windows Azure</a>, <a title="Site de Windows Azure, SQL Azure" href="https://www.windowsazure.com/fr-fr/home/tour/database-management/" target="_blank">SQL Azure</a>, DataSync, <a title="Site de Windows Azure, Storage" href="https://www.windowsazure.com/fr-fr/home/tour/storage/" target="_blank">Azure Blob</a> et l'intégration de <a title="Site de Java" href="http://www.java.com/fr/" target="_blank">Java</a>, d'<a title="Site de Solr" href="http://lucene.apache.org/solr/" target="_blank">Apache Solr</a> et de <a title="Site de Tomcat" href="http://tomcat.apache.org/" target="_blank">Tomcat</a> sur des instances Azure sous forme de Web Roles et de Worker Roles.

Pour en savoir plus, regardez cette vidéo !

[...]
]]></description>
			<content:encoded><![CDATA[<p>Nous vous proposons dans cet article un témoignage vidéo d&#8217;un de nos clients <a title="Site de Specialchem" href="http://www.specialchem.com/" target="_blank">Specialchem</a> sur le portage de leurs applications Web dans <a title="Site de Windows Azure" href="http://www.microsoft.com/france/windows-azure/" target="_blank">Windows Azure</a>.</p>
<p>Une expérience très riche avec la mise en oeuvre d&#8217;<a title="Site de Windows Azure, Compute" href="https://www.windowsazure.com/fr-fr/home/tour/compute/" target="_blank">instances Windows Azure</a>, de <a title="Site de Windows Azure, SQL Azure" href="https://www.windowsazure.com/fr-fr/home/tour/database-management/" target="_blank">SQL Azure</a>, de DataSync, du service <a title="Site de Windows Azure, Storage" href="https://www.windowsazure.com/fr-fr/home/tour/storage/" target="_blank">Azure Blob</a> et l&#8217;intégration de <a title="Site de Java" href="http://www.java.com/fr/" target="_blank">Java</a>, d&#8217;<a title="Site de Solr" href="http://lucene.apache.org/solr/" target="_blank">Apache Solr</a> et de <a title="Site de Tomcat" href="http://tomcat.apache.org/" target="_blank">Tomcat</a> sur des instances Azure sous forme de Web Roles et de Worker Roles.</p>
<p>Pour en savoir plus, regardez cette vidéo !</p>
<p><object style="height: 390px; width: 640px;" width="640" height="360"><param name="movie" value="http://www.youtube.com/v/e-ftyvSoXb8?version=3&amp;feature=player_detailpage" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed type="application/x-shockwave-flash" width="640" height="360" src="http://www.youtube.com/v/e-ftyvSoXb8?version=3&amp;feature=player_detailpage" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p>Si vous souhaitez en savoir plus, n&#8217;hésitez pas à <strong><a style="color: #ff6600;" href="mailto:olivier.leal@ysance.com?cc=frederic.faure@ysance.com&amp;subject=Decrypt-ExpertYse-Azure">nous contacter</a></strong> afin d&#8217;échanger sur vos projets.</p>
<p><strong><em>Olivier LEAL</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2012/02/un-retour-dexperience-gagnant-portage-dapplications-web-sur-windows-azure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Système de stockage orienté objet en anneaux</title>
		<link>http://decrypt.ysance.com/2012/02/systeme-de-stockage-oriente-objet-en-anneaux/</link>
		<comments>http://decrypt.ysance.com/2012/02/systeme-de-stockage-oriente-objet-en-anneaux/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 17:17:49 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Sharding / Partitionnement]]></category>
		<category><![CDATA[Systèmes Distribués]]></category>
		<category><![CDATA[Cloud Hybride]]></category>
		<category><![CDATA[Cloud Privé]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[Organic Ring Storage]]></category>
		<category><![CDATA[Scality]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=3016</guid>
		<description><![CDATA[<img class="size-full wp-image-3105 alignleft" style="margin-left: 20px; margin-right: 20px;" title="Logo Scality" src="http://decrypt.ysance.com/wp-content/uploads/2012/02/LogoScality.jpg" alt="Logo Scality" width="160" height="95" />

Des solutions de stockage suivant les même idées directrices que celles que l'on peut trouver dans les grands Cloud publics sont apparues depuis déjà quelques temps maintenant, et je me suis intéressé particulièrement à une solution de stockage orienté objet basée sur un système en anneaux. Cette solution de <a title="Site de Scality" href="http://www.scality.com/" target="_blank">Scality</a> nommée <a title="Site de Scality, Ring Organic Storage" href="http://www.scality.com/ring-organic-storage/" target="_blank">Ring Organic Storage</a>, propose un système de stockage peu coûteux avec des fonctionnalités similaires à celles que l'on peut trouver sur <a title="Site de AWS, S3" href="http://aws.amazon.com/s3/" target="_blank">S3</a>. Il permet d'associer à une URL un objet stocké sous forme de binaire. On note que ce principe d'anneau est le même que l'on trouve sur des bases comme <a title="Site de Cassandra" href="http://cassandra.apache.org/" target="_blank">Cassandra</a>, sauf que dans notre cas il s'agit de stockage orienté objet. Je me suis donc intéressé au fonctionnement de cette solution déjà déployée dans des productions chez des hébergeurs et des fournisseurs de service.

<em><strong>Cible</strong></em>
Il est indispensable, dans un premier temps, de prendre conscience que cette solution permettant de mettre en place un des composants d'un Cloud privé est réservée à des sociétés ayant un volume de données suffisamment important (à partir de 100To) ou rencontrant des problématiques de performances (quelques dizaines de To avec d'importants IOs). Il faut dans tous les cas atteindre une masse critique dans son infrastructure pour utiliser ce genre de produit, comme n'importe quel composant de Cloud Computing que l'on souhaite déployer en privé.

[...]
]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-3105 alignleft" style="margin-left: 20px; margin-right: 20px;" title="Logo Scality" src="http://decrypt.ysance.com/wp-content/uploads/2012/02/LogoScality.jpg" alt="Logo Scality" width="160" height="95" /></p>
<p>Des solutions de stockage suivant les même idées directrices que celles que l&#8217;on peut trouver dans les grands Cloud publics sont apparues depuis déjà quelques temps maintenant, et je me suis intéressé particulièrement à une solution de stockage orienté objet basée sur un système en anneaux. Cette solution de <a title="Site de Scality" href="http://www.scality.com/" target="_blank">Scality</a> nommée <a title="Site de Scality, Ring Organic Storage" href="http://www.scality.com/ring-organic-storage/" target="_blank">Ring Organic Storage</a>, propose un système de stockage peu coûteux avec des fonctionnalités similaires à celles que l&#8217;on peut trouver sur <a title="Site de AWS, S3" href="http://aws.amazon.com/s3/" target="_blank">S3</a>. Il permet d&#8217;associer à une URL un objet stocké sous forme de binaire. On note que ce principe d&#8217;anneau est le même que l&#8217;on trouve sur des bases comme <a title="Site de Cassandra" href="http://cassandra.apache.org/" target="_blank">Cassandra</a>, sauf que dans notre cas il s&#8217;agit de stockage orienté objet. Je me suis donc intéressé au fonctionnement de cette solution déjà déployée dans des productions chez des hébergeurs et des fournisseurs de service.</p>
<p><em><strong>Cible</strong></em><br />
Il est indispensable, dans un premier temps, de prendre conscience que cette solution permettant de mettre en place un des composants d&#8217;un Cloud privé est réservée à des sociétés ayant un volume de données suffisamment important (à partir de 100To) ou rencontrant des problématiques de performances (quelques dizaines de To avec d&#8217;importants IOs). Il faut dans tous les cas atteindre une masse critique dans son infrastructure pour utiliser ce genre de produit, comme n&#8217;importe quel composant de Cloud Computing que l&#8217;on souhaite déployer en privé.</p>
<p><em><strong>Architecture</strong></em><br />
L&#8217;architecture du système de stockage en anneaux est constituée d&#8217;un anneau primaire permettant de servir les requêtes vers les objets définis comme accédés les plus fréquemment (performance privilégiée) et d&#8217;un ou plusieurs autres anneaux servant de stockage sur le long terme servant pour la reprise d&#8217;activité en cas de problèmes (disaster recovery). Cette réplication peut s&#8217;effectuer en off-site sur un autre data center ou bien même sur des services de stockage sur des Cloud publics type&#8230; Mmmh&#8230; Disons S3 ! :o)</p>
<p style="text-align: center;"><a href="http://decrypt.ysance.com/wp-content/uploads/2012/02/Scality-OrganicRingStorage-Architecture.png"><img class="size-full wp-image-3022 aligncenter" title="Scality - Organic Ring Storage - Architecture" src="http://decrypt.ysance.com/wp-content/uploads/2012/02/Scality-OrganicRingStorage-Architecture.png" alt="Scality - Organic Ring Storage - Architecture" width="636" height="466" /></a></p>
<p>Cette architecture privilégie la disponibilité et la durabilité des données via un surcoût en disques durs puisque le principe est de redonder la donnée entre plusieurs noeuds de stockage écrivant sur des sets de disques différents. Ce choix est basé sur le fait que le disque dur n&#8217;est pas un composant très coûteux dans la mise en place d&#8217;une infrastructure.</p>
<p>Les noeuds fonctionnent sur un système de peer-to-peer, il n&#8217;y a donc pas de SPOF (Single Point Of Failure) ou d&#8217;engorgement et un load-balancing naturel s&#8217;effectue.</p>
<p>A noter que la cohérence de ce système est configurable de manière à ce que l&#8217;on puisse atteindre une cohérence forte ou une <a title="Finalement Cohérent – Revisité" href="http://decrypt.ysance.com/2011/04/finalement-coherent-revisite/">cohérence à terme</a> : à vous de définir votre niveau de cohérence ou quorum. Par exemple, si W+R &gt; N, alors le jeu d’écritures et le jeu de lectures se recouvrent toujours et l’on peut garantir une cohérence forte, avec :</p>
<ul>
<li>N = le nombre de nœuds qui stockent les répliques des données</li>
<li>W = le nombre de répliques qui doivent accuser réception de la mise à jour avant que celle-ci ne soit complétée</li>
<li>R = le nombre de répliques qui sont contactées quand un objet de données est consulté via une opération de lecture</li>
</ul>
<p><a href="http://decrypt.ysance.com/wp-content/uploads/2012/02/Scality-OrganicRingStorage-Keys.png"><img class="size-medium wp-image-3027 alignright" title="Scality - Organic Ring Storage - Keys" src="http://decrypt.ysance.com/wp-content/uploads/2012/02/Scality-OrganicRingStorage-Keys-300x291.png" alt="Scality - Organic Ring Storage - Keys" width="240" height="233" /></a></p>
<p><em><strong>La gestion des clés</strong></em><br />
La répartition des données s&#8217;effectue sur l&#8217;anneau via une clé unique (20 octets) définie soit par vos applications elles-même, soit par le système qui se base sur un ensemble d&#8217;éléments. Chaque noeud s&#8217;occupant d&#8217;un range de clés bien défini, la donnée est donc inscrite sur le noeud correspondant, puis répliquée sur d&#8217;autres noeuds définis par algorithme : par exemple dans le cas où on choisit de répliquer 2 fois la donnée (donc de la stocker en 3 exemplaires), une donnée stockée sur un noeud x le sera également sur les noeuds x + Pi/3 et x + 2Pi/3.</p>
<p>En plus, les voisins directs d&#8217;un noeud dans l&#8217;anneau peuvent reprendre la responsabilité des données de leur voisin si il &laquo;&nbsp;venait à disparaître&nbsp;&raquo; de l&#8217;anneau afin de proxyfier les requêtes vers les données redondées (via l&#8217;algorithme).</p>
<p>Le but est de pouvoir accéder aux données que l&#8217;on cherche à partir de n&#8217;importe quel point d&#8217;entrée (c&#8217;est-à-dire à partir de n&#8217;importe quel noeud de l&#8217;anneau) en un minimum de sauts. Par exemple pour ce système, le nombre de sauts annoncé est de :</p>
<ul>
<li>3 pour 100 noeuds,</li>
<li>5 pour 1000 noeuds,</li>
<li>7 pour 10000 noeuds,</li>
<li>&#8230;</li>
</ul>
<p>Pour accéder au noeud contenant la donnée cherchée, on y arrivera donc en moins de log(n) sauts (avec n le nombre de noeuds). A noter que pour de meilleurs temps d&#8217;accès (diminution du nombre de sauts), la topologie de l&#8217;anneau est cachée au niveau des connecteurs (cf. <em>accès aux données</em>) au fur et à mesure de sa découverte.</p>
<p>A noter que la répartition des clés s&#8217;effectue via un &laquo;&nbsp;Consistent Hash&nbsp;&raquo; : cela permet lors de l&#8217;ajout ou de la suppression d&#8217;un noeud de n&#8217;affecter que &laquo;&nbsp;(1/n) x nb total clés&nbsp;&raquo; clés (avec n&#8230; toujours le nombre de noeuds ;ob).</p>
<p>On peut aussi utiliser les clés pour identifier le type de données stockées (via un des éléments composant la clé) et les affecter vers des disques (harware) sous-jacents particuliers (SATA, SAS, SSD, &#8230;) en fonction des ressources que l&#8217;on souhaite affecter à ce type de données. Cela offre des possibilités intéressantes.</p>
<p>A noter également qu&#8217;en fonction de la taille des fichiers stockés, il est prévu des optimisations autant pour la manipulation de plein de petits fichiers (écriture en série dans des fichiers/blocs plus importants) que pour la manipulation de fichiers de grande taille (découpage en blocs et parallélisation des lectures/écritures). Il faut penser que pour ce genre d&#8217;utilisation, il faudra réfléchir également au niveau des composants hardware : par exemple pour des gros fichiers, il faudra envisager une bande passante suffisante pour permettre un bon débit, de même que pour beaucoup de petits fichiers, il faudra optimiser les IOs et prévoir un ratio disques/serveurs convenable et utiliser des disques adaptés (SAS ou SSD).</p>
<p><em><strong>L&#8217;accès aux données</strong></em><br />
Les données peuvent être accédées via différentes interfaces (connecteurs) permettant d&#8217;émuler des fonctionnalités particulières (cf. <em>schéma d&#8217;architecture</em>) :</p>
<ul>
<li>connecteurs <strong>mails </strong>(pour des produits comme Zimbra, Dovecot, Cyrus, &#8230;) permettant d&#8217;aller chercher le contenu (corps, pièces jointes, &#8230;) des messages stockés dans l&#8217;anneau correspondant aux meta-data (identifiants, objets, &#8230;) contenus dans une base de données,</li>
<li>connecteur <strong>REST </strong>(S3-like) pour accéder aux objets via le protocole HTTP en REST,</li>
<li>connecteur <strong>FUSE </strong>(<a title="Site de FUSE" href="http://fuse.sourceforge.net/" target="_blank">Filesystem in Userspace</a>) permettant d&#8217;émuler un système de fichiers et d&#8217;accéder dans ce mode aux objets stockés pour des programmes nécessitant une telle visibilité (c&#8217;est à dire ne permettant pas d&#8217;accéder aux objets via des requêtes HTTP),</li>
<li>connecteur de type <strong>Gateway </strong>(pour des produits comme TwinStrata, CTERA, &#8230;) permettant d&#8217;accéder à ce que l&#8217;on pourrait appeler un Cloud Attached Storage via des protocoles type iSCSI, NFS/CIFS, &#8230; (à voir la liste des protocoles actuellement pris en charge par le connecteur de Scality). Cela permet de conserver une partie de ses données dans l&#8217;infrastructure locale de son datacenter et de stocker la totalité sur un système distant. On bénéficie alors d&#8217;un système de cache sur les données les plus actives et d&#8217;une durabilité sur l&#8217;ensemble (il est aussi possible de conserver l&#8217;ensemble de ses données en local et de ne bénéficier que du backup distant). D&#8217;ailleurs, AWS vient de sortir il y a peu le service <a title="Site de AWS, AWS Storage Gateway" href="http://aws.amazon.com/storagegateway/" target="_blank">AWS Storage Gateway</a>, sur le même principe.</li>
</ul>
<p>En plus du type de connecteur, il est intéressant de voir les fonctionnalités d&#8217;authentification qui sont implémentées (pouvant interroger un système local en XML/RPC), les systèmes d&#8217;ACLs et les mécanismes de facturation. Tout à fait le genre d&#8217;éléments que l&#8217;on retrouve dans les Cloud IaaS type AWS.</p>
<p style="text-align: center;"><a href="http://decrypt.ysance.com/wp-content/uploads/2012/02/Scality-OrganicRingStorage-Access.png"><img class="size-full wp-image-3023 aligncenter" title="Scality - Organic Ring Storage - Access" src="http://decrypt.ysance.com/wp-content/uploads/2012/02/Scality-OrganicRingStorage-Access.png" alt="Scality - Organic Ring Storage - Access" width="744" height="335" /></a></p>
<p><em><strong>Conclusion</strong></em><br />
Il est intéressant de regarder des solutions qui s&#8217;offrent à nous pour répondre à des problématiques de stockage en mettant en place des composants de Cloud, mais en privé. La distribution de l&#8217;Organic Ring Storage proposé par Scality permet à la solution de présenter un modèle décentralisé peu sensible à la panne, notamment grâce à l&#8217;utilisation de ses algorithmes de répartition et de recherche de données. La diversité des connecteurs en font une solution polyvalente, même si réservée à un stockage de données qui se compte en dizaines de To au minimum.</p>
<p>Il est possible de sélectionner le hardware sous-jacent qui servira à stocker un type d&#8217;objets en fonction d&#8217;éléments composant sa clé de stockage pour optimiser l&#8217;accès à ces données. De plus, en fonction de ce que l&#8217;on recherche avec ce système (bande passante, IOs ou stockage pur), il faut penser à privilégier les éléments hardware nécessaires.</p>
<p>J&#8217;espère que ce sujet vous aura intéressé et n&#8217;hésitez pas à <strong><a style="color: #ff6600;" href="mailto:frederic.faure@ysance.com?cc=olivier.leal@ysance.com&amp;subject=Decrypt-ExpertYse-Scality">nous contacter</a></strong> pour plus d&#8217;informations sur ce produit.</p>
<p><em><strong>Frédéric FAURE</strong></em> <a title="Frédéric FAURE @Twitter" href="http://twitter.com/fredericfaure">@Twitter</a> <a title="Ysance, Simplifions les projets informatiques" href="http://www.ysance.com/">@Ysance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2012/02/systeme-de-stockage-oriente-objet-en-anneaux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DynamoDB : le décryptage de la nouvelle solution NoSQL de AWS</title>
		<link>http://decrypt.ysance.com/2012/02/dynamodb-le-decryptage-de-la-nouvelle-solution-nosql-de-aws/</link>
		<comments>http://decrypt.ysance.com/2012/02/dynamodb-le-decryptage-de-la-nouvelle-solution-nosql-de-aws/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 17:31:12 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Systèmes Distribués]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[DynamoDB]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[SimpleDB]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=2880</guid>
		<description><![CDATA[<img class="size-full wp-image-3001 alignright" style="margin-left: 20px; margin-right: 20px;" title="Logo DynamoDB" src="http://decrypt.ysance.com/wp-content/uploads/2012/02/AWS-DynamoDB-Logo.png" alt="Logo DynamoDB" width="180" height="145" />
<a title="Site de AWS, Amazon DynamoDB" href="http://aws.amazon.com/dynamodb/" target="_blank">DynamoDB</a>, beaucoup de bruit autour de ce nouvel outil AWS... Mais au delà de ce qui est annoncé en termes de performances, de scalabilité sans limite, quels sont les éléments auxquels il faut prendre garde, les non-dits, ceux qu'il faut prendre en compte pour savoir si cet outil correspond à votre besoin ? Je me base sur ce que j'ai lu : articles techniques sur le sujet, documentation du site AWS (FAQ, documentation référence de l'API, ...) qui est complète mais qu'il faut prendre le temps de lire, ... Je me base aussi sur des essais que j'ai effectués et qui permettent de relever d'autres éléments importants. Je présenterai donc rapidement le concept de l'outil avant de rentrer plus précisément dans les points à prendre en considération, en termes d'utilisation et de facturation. Je présenterai également les différences avec son prédécesseur : <a title="Site de AWS, Amazon SimpleDB" href="http://aws.amazon.com/simpledb/" target="_blank">SimpleDB</a>. Finalement, j'ai réalisé un mini bench de l'outil dont je vous ferai partager le code et les résultats.

[...]
]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-3001 alignright" style="margin-left: 20px; margin-right: 20px;" title="Logo DynamoDB" src="http://decrypt.ysance.com/wp-content/uploads/2012/02/AWS-DynamoDB-Logo.png" alt="Logo DynamoDB" width="180" height="145" /><br />
<a title="Site de AWS, Amazon DynamoDB" href="http://aws.amazon.com/dynamodb/" target="_blank">DynamoDB</a>, beaucoup de bruit autour de ce nouvel outil AWS&#8230; Mais au delà de ce qui est annoncé en termes de performances, de scalabilité sans limite, quels sont les éléments auxquels il faut prendre garde, les non-dits, ceux qu&#8217;il faut prendre en compte pour savoir si cet outil correspond à votre besoin ? Je me base sur ce que j&#8217;ai lu : articles techniques sur le sujet, documentation du site AWS (FAQ, documentation référence de l&#8217;API, &#8230;) qui est complète mais qu&#8217;il faut prendre le temps de lire, &#8230; Je me base aussi sur des essais que j&#8217;ai effectués et qui permettent de relever d&#8217;autres éléments importants. Je présenterai donc rapidement le concept de l&#8217;outil avant de rentrer plus précisément dans les points à prendre en considération, en termes d&#8217;utilisation et de facturation. Je présenterai également les différences avec son prédécesseur : <a title="Site de AWS, Amazon SimpleDB" href="http://aws.amazon.com/simpledb/" target="_blank">SimpleDB</a>. Finalement, j&#8217;ai réalisé un mini bench de l&#8217;outil dont je vous ferai partager le code et les résultats.</p>
<p><em><strong>Modèle de données</strong></em></p>
<p>C&#8217;est une base de données non relationnelle structurée ou NoSQL ou clé/valeur. Elle est basée sur le même modèle que SimpleDB (AWS) à savoir une table dans laquelle on insère des items. Chaque item est constitué d&#8217;une clé primaire obligatoire et d&#8217;un ensemble d&#8217;attributs facultatifs. Sous une représentation graphique, les items sont des lignes et les attributs des colonnes. Cependant, aucun attribut (sauf la clé primaire) n&#8217;est obligatoire. On peut donc avoir une table &laquo;&nbsp;CatalogueProduits&nbsp;&raquo; pour un site de e-commerce qui contient des livres, des aquariums, des voitures, &#8230; Chaque produit aura un &laquo;&nbsp;IdProduit&nbsp;&raquo; (clé primaire), pour le reste certains attributs seront communs comme &laquo;&nbsp;Prix&nbsp;&raquo;, &laquo;&nbsp;CategorieProduit&nbsp;&raquo;, &laquo;&nbsp;Disponibilite&nbsp;&raquo;, &#8230; D&#8217;autres seront spécifiques à chaque type d&#8217;items (types définis par la &laquo;&nbsp;CategorieProduit&nbsp;&raquo; &#8211; livre, &#8230; &#8211; dans notre cas).</p>
<p>A noter que chaque attribut peut avoir comme valeur :</p>
<ul>
<li><span style="text-decoration: underline;">String</span></li>
<li><span style="text-decoration: underline;">Number</span></li>
<li><span style="text-decoration: underline;">Tableau de String ou de Number</span> (appelé aussi attribut <em>multi-valué</em>) =&gt; par exemple à l&#8217;attribut <em>Couleur</em> peut correspondre la valeur <em>["bleu", "rouge", "vert"]</em></li>
</ul>
<p>A noter que la clé primaire peut être de 2 types :</p>
<ul>
<li><span style="text-decoration: underline;">Hash :</span> la clé primaire est constituée d&#8217;un attribut et un index non ordonné sur l&#8217;attribut est construit.</li>
<li><span style="text-decoration: underline;">Hash &amp; Range :</span> la clé primaire est constituée de 2 attributs (le hash et le range) et 2 index sont construits : le <em>hash index</em> non ordonné sur l&#8217;attribut défini comme hash et le <em>sorted range index</em> sur l&#8217;attribut défini comme range.</li>
</ul>
<p>Ci-dessous un exemple illustratif tiré de la <a title="Site de AWS, Documentation DynamoDB" href="http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/Introduction.html" target="_blank">documentation de référence de l&#8217;API</a> :</p>
<p><img class="size-full wp-image-2900" title="DynamoDB - Keys" src="http://decrypt.ysance.com/wp-content/uploads/2012/02/DynamoDBKeys.png" alt="DynamoDB - Keys" width="756" height="106" /></p>
<p>Et pour vous donner une idée des requêtes possibles sur le <em>sorted range index</em>, voici les options disponibles (tirées du <a title="AWS SDK for Ruby" href="http://aws.amazon.com/sdkforruby/" target="_blank">SDK Ruby</a> proposé par AWS) :</p>
<blockquote>
<pre>RANGE_KEY_OPTIONS =
{
:range_less_than =&gt; "LT",
:range_greater_than =&gt; "GT",
:range_lte =&gt; "LE",
:range_gte =&gt; "GE",
:range_begins_with =&gt; "BEGINS_WITH"
}</pre>
</blockquote>
<p><em><strong>Accès aux données</strong></em></p>
<p>L&#8217;accès s&#8217;effectue via des <span style="text-decoration: underline;">requêtes HTTP(S)</span> qui peuvent être envoyées depuis le réseau AWS (à partir d&#8217;une instance EC2) ou bien de l&#8217;extérieur (attention au temps réseau HTTP(S)). Le service est donc accessible de partout sans limitation, pour peu que vous ayez un couple de clés <em>access key / secret key</em> associées aux bonnes credentials pour vous authentifier et que vous puissiez sortir sur le Net en 80 et/ou 443.</p>
<p>Le format des échanges au dessus du protocole HTTP(S) est en <span style="text-decoration: underline;">JSON</span>, autant au niveau de la requête que de la réponse. Voici un exemple de réponse :</p>
<blockquote>
<pre>{"Items":
[{"date":{"S":1989},
"fans":{"SS":["Keneau","Alexis","John"]},
"name":{"S":"Bill &amp; Ted's Excellent Adventure"},
"rating":{"S":"****"}}]
}</pre>
</blockquote>
<p>Cependant, les SDKs (fournis par Amazon ou par d&#8217;autres) intègrent déjà une interface plus fonctionnelle de communication avec les APIs AWS afin que vous n&#8217;ayez pas à vous occuper de la création des requêtes et du parsing des réponses. Les SDKs s&#8217;occupent donc de la couche transport basée sur le format JSON.</p>
<p><em><strong>Différences avec SimpleDB</strong></em></p>
<p>Tout est histoire de <span style="text-decoration: underline;">compromis</span> : entre l&#8217;implémentation de SimpleDB et de DynamoDB, il a fallu <span style="text-decoration: underline;">choisir entre fonctionnalités et performances</span>. SimpleDB privilégie plus les fonctionnalités, d&#8217;ailleurs certaines d&#8217;entre elles impliquent que toutes les données d&#8217;une table (appelée &laquo;&nbsp;domaine&nbsp;&raquo; dans SimpleDB) soient sur un même serveur&#8230; Donc pas de sharding possible et pas de forte scalabilité envisageable. De plus les APIs de SimpleDB partent du principe que tous les attributs des items soient automatiquement indexés (donc moins bonnes performances). DynamoDB fait le choix inverse en limitant les fonctionnalités de ses APIs et en ne conservant que un ou deux index (fonction du type de clé primaire) pour optimiser les performances.</p>
<p>Les différences principales sont les suivantes :</p>
<ul>
<li>Plus de <span style="text-decoration: underline;">limitation à 10GB par table</span>.</li>
<li>Pas d&#8217;<span style="text-decoration: underline;">indexation</span> sur tous les attributs (colonnes) et <span style="text-decoration: underline;">moins de possibilités</span> (fonctionnalités) en termes de requêtage via les APIs.</li>
<li>Une <span style="text-decoration: underline;">garantie des performances</span> : on choisit le nombre de requêtes/secondes dont on a besoin en écriture et en lecture sur chaque table.</li>
<li>Le <span style="text-decoration: underline;">protocole de transport</span> : JSON over HTTP(S) pour DynamoDB, REST style pour SimpleDB avec une réponse au format XML.</li>
<li>Le <span style="text-decoration: underline;">pricing</span> : les 2 ont une composante lié à la quantité de données stockées, plus éventuellement la quantité de données qui transitent hors du réseau AWS si on fait des appels depuis l&#8217;extérieur. La différence se fait entre :
<ul>
<li>La <em>Machine Utilization </em>de SimpleDB qui se base sur la consommation en ressources machine de chaque requête (SELECT, GET, PUT, &#8230;).</li>
<li>La <em>Throughput Capacity</em> de DynamoDB qui se base sur une capacité de requêtes par seconde que vous allez définir. Contrairement à SimpleDB, on est dans ce cas sur <span style="text-decoration: underline;">de l&#8217;alloué plutôt que du consommé</span> (la même différence que l&#8217;on a entre le volume alloué que l&#8217;on paie sur les EBS et le volume utilisé que l&#8217;on paie sur S3).</li>
</ul>
</li>
</ul>
<p><strong><em>Les éléments à prendre en compte</em></strong></p>
<p>Il faut faire attention à un certain nombre d&#8217;éléments plus ou moins mis en valeur afin de faire une bonne utilisation du produit :</p>
<ul>
<li>Il s&#8217;agit de la première release et il faut suivre la roadmap du produit qui va permettre au service de s&#8217;étendre en termes de <span style="text-decoration: underline;">couverture géographique</span> (le service est actuellement disponible sur une seule région : US East (N. Virginia)) et en termes de <span style="text-decoration: underline;">fonctionnalités</span> (par exemple <a title="All Things Distributed, Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications" href="http://www.allthingsdistributed.com/2012/01/amazon-dynamodb.html#comment-415516296" target="_blank">celle de backup/restauration, actuellement absente, est dans les priorités</a>).</li>
<li>La <span style="text-decoration: underline;">disponibilité</span> et la <span style="text-decoration: underline;">durabilité</span> des données sont assurées sur le même scope que les services de type S3 ou SimpleDB (entre autres) : il y a une réplication multi zones d&#8217;accessibilité sur la région du service.</li>
<li>La <span style="text-decoration: underline;">modification de l&#8217;allocation des ressources</span> n&#8217;est pas instantanée : si l&#8217;action de diminution de la capacité en lecture ou en écriture est une question de secondes ou de minutes, l&#8217;augmentation de cette capacité se compte <span style="text-decoration: underline;">en minutes ou en heures</span> en fonction de la taille de la base (la croissance n&#8217;est pas forcément proportionnelle car met en place des mécanismes de parallélisation). Il faut donc s&#8217;y prendre à l&#8217;avance ! On ne peut donc pas, par exemple, lisser l&#8217;allocation de la capacité sur la journée pour une application qui a des pics d&#8217;utilisation sur une période donnée de la journée (une application de jeu qui voit son trafic exploser le midi et le soir par exemple). La fréquence des pics de charge serait trop importante. En revanche cela est tout à fait envisageable pour une utilisation avec des pics plus espacés (période de soldes sur l&#8217;année pour un site de e-commerce).</li>
<li>Autre point important à prendre en compte sur l&#8217;augmentation de la capacité en lecture ou en écriture : le <span style="text-decoration: underline;">facteur maximum d&#8217;augmentation est de 2</span>. Donc au maximum on double sa capacité en une demande au service DynamoDB. Si on veut multiplier sa capacité en lecture ou/et en écriture par 8, il faudra donc effectuer 3 requêtes successives (2 x 2 x 2), avec entre chaque demande un temps de mise en application de la capacité allant de quelques minutes à quelques heures.</li>
</ul>
<p>&nbsp;</p>
<p style="text-align: center;"><img class="size-full wp-image-2910 aligncenter" title="AWS - DynamoDB - Modify Provisioned Throughput" src="http://decrypt.ysance.com/wp-content/uploads/2012/02/AWS-DynamoDB-ModifyProvisionedThroughput-Bis.png" alt="AWS - DynamoDB - Modify Provisioned Throughput" width="367" height="319" /></p>
<ul>
<li>Il est possible également de diminuer cette capacité de la quantité souhaitée (pas de facteur) avec un <span style="text-decoration: underline;">minimum de 5 unités de capacité de débit</span> pour la lecture et/ou l&#8217;écriture. Attention cependant, <span style="text-decoration: underline;">une seule diminution de la capacité est autorisée par jour</span> : cela ne me semble pas poser de problème sur une vraie utilisation (c&#8217;est-à-dire autre que des tests :o)).</li>
<li>Durant cette modification de capacité, il est important de noter qu&#8217;il n&#8217;y a <span style="text-decoration: underline;">pas d&#8217;interruption du service sur cette table</span> : il est toujours possible de la requêter en lecture et en écriture.</li>
<li>La taille maximale d&#8217;un item à stocker est de <span style="text-decoration: underline;">64KB</span>, ceci inclut le nom et la valeur des attributs. Il n&#8217;y a <span style="text-decoration: underline;">pas de limite sur le nombre d&#8217;attributs</span> d&#8217;un item (tant que l&#8217;on reste dans la limite des 64KB en taille totale de l&#8217;item).</li>
<li>On peut créer jusqu&#8217;à <span style="text-decoration: underline;">256 tables</span> pour un compte donné, avec <span style="text-decoration: underline;">2 limitations sur les unités de capacité</span> (ces 2 limitations sur la capacité de débit peuvent être dépassées en remplissant <a title="Site de AWS, Formulaire d'augmentation des limites de DynamoDB" href="http://www.amazon.com/gp/html-forms-controller/DynamoDB_Limit_Increase_Form" target="_blank">ce formulaire</a>) :
<ul>
<li>10,000 unités en capacité de débit en lecture par table et pareil en écriture.</li>
<li>20,000 unités en capacité de débit en lecture sur le compte, réparties entre toutes les tables et pareil en écriture.</li>
</ul>
</li>
<li>Les <span style="text-decoration: underline;">temps de traitements</span> indiqués pour les requêtes &laquo;&nbsp;in the single-digit milliseconds&nbsp;&raquo; correspondent aux temps de traitements côté service (DynamoDB). Pensez à ajouter le temps réseau pour le transport (JSON over HTTP(S)) des informations de requêtes/réponses.</li>
<li>Concernant la <span style="text-decoration: underline;">composante du prix liée à la capacité de débit des requêtes</span> (Throughput Capacity), on a actuellement les tarifs suivants :
<ul>
<li>&laquo;&nbsp;Write Throughput: $0.01 per hour for every 10 units of Write Capacity&nbsp;&raquo;</li>
<li>&laquo;&nbsp;Read Throughput: $0.01 per hour for every 50 units of Read Capacity&nbsp;&raquo;</li>
</ul>
</li>
<li>Mais qu&#8217;est ce qu&#8217;une <span style="text-decoration: underline;">unité de capacité</span> ?</li>
</ul>
<p><span style="color: #888888;"><strong>Il s&#8217;agit d&#8217;une requête (lecture ou écriture) par seconde <span style="text-decoration: underline;">pour un item de 1KB ou moins</span>.</strong></span></p>
<p>Voici un petit exemple de calcul de la capacité que vous allez devoir réserver (attention : on parle toujours de &laquo;&nbsp;réservé&nbsp;&raquo; ou &laquo;&nbsp;alloué&nbsp;&raquo; et pas de &laquo;&nbsp;consommé&nbsp;&raquo;) :</p>
<p><span style="color: #808080;"><em>Si vous avez des items de <span style="text-decoration: underline;">512 bytes</span> (rentre dans la catégorie des 1KB ou moins) et que vous souhaitez lire (ou écrire) <span style="text-decoration: underline;">100 items/secondes</span>, vous allez devoir provisionner 100 unités de capacité de lecture (ou d&#8217;écriture). Ce qui donne en termes de prix :</em></span></p>
<p><span style="color: #808080;"><em><span style="text-decoration: underline;">Lecture :</span> 100 unités de lecture / 50 unités de lecture (unité de base de la facturation) = 2, soit 2 x $0.01 = <span style="text-decoration: underline;">$0.02 par heure</span> pour réserver une capacité de lecture de 100 unités (100 requêtes/secondes pour des items de 1KB ou moins).</em></span></p>
<p><span style="color: #808080;"><em><span style="text-decoration: underline;">Ecriture :</span> 100 unités d&#8217;écriture / 10 unités d&#8217;écriture (unité de base de la facturation) = 10, soit 10 x $0.01 = <span style="text-decoration: underline;">$0.10 par heure</span> pour réserver une capacité d&#8217;écriture de 100 unités (100 requêtes/secondes pour des items de 1KB ou moins).</em></span></p>
<p>Voici un autre exemple avec des items de taille plus importante :</p>
<p><em><span style="color: #808080;">Si vous avez des items de <span style="text-decoration: underline;">14.5KB</span> et que vous souhaitez lire (ou écrire) <span style="text-decoration: underline;">100 items/secondes</span>, vous allez devoir provisionner 15 (la taille est arrondie à l&#8217;entier supérieur) x 100 requêtes/secondes = 1500 unités de capacité de lecture (ou d&#8217;écriture). Ce qui donne en termes de prix :</span></em></p>
<p><em><span style="color: #808080;"><span style="text-decoration: underline;">Lecture :</span> 1500 unités de lecture / 50 unités de lecture (unité de base de la facturation) = 30, soit 30 x $0.01 = <span style="text-decoration: underline;">$0.30 par heure</span> pour réserver une capacité de lecture de 1500 unités (100 requêtes/secondes pour des items de 14KB+ à 15KB).</span></em></p>
<p><em><span style="color: #808080;"><span style="text-decoration: underline;">Ecriture :</span> 1500 unités d&#8217;écriture / 10 unités d&#8217;écriture (unité de base de la facturation) = 150, soit 150 x $0.01 = <span style="text-decoration: underline;">$1.50 par heure</span> pour réserver une capacité d&#8217;écriture de 1500 unités (100 requêtes/secondes pour des items de 14KB+ à 15KB).</span></em></p>
<p>A noter que vous pouvez choisir de requêter votre table <span style="text-decoration: underline;">en lecture</span> selon 2 modes :</p>
<ul>
<li><a title="Finalement Cohérent – Revisité" href="http://decrypt.ysance.com/2011/04/finalement-coherent-revisite/">cohérence à terme</a> (par défaut au niveau de l&#8217;API DynamoDB)</li>
<li><span style="text-decoration: underline;">cohérence forte</span> (à spécifier dans votre requête à l&#8217;API quand vous voudrez lire de la sorte : par exemple dans le SDK Ruby ajoutez <em>:consistent_read =&gt; true</em>)</li>
</ul>
<p>En choisissant la cohérence à terme, vous pourrez ne provisionner que la <span style="text-decoration: underline;">moitié du nombre d&#8217;unités</span> que vous avez calculé pour obtenir le même résultat en terme de requêtes (lecture) par seconde.</p>
<p>Ne pas oublier d&#8217;ajouter à ces exemples le <span style="text-decoration: underline;">stockage de la donnée</span> (&laquo;&nbsp;Storage: $1.00 Per GB-month&nbsp;&raquo;) et éventuellement la <span style="text-decoration: underline;">quantité de données échangées</span> si vous dialoguez avec le service depuis une application hors du réseau AWS (c&#8217;est-à-dire qui n&#8217;est pas sur une instance EC2 ou bien qui est sur une instance EC2 dans une autre région que le service DynamoDB que vous utilisez).</p>
<p>2 notes concernant les données stockées :</p>
<ul>
<li>Contrairement à la capacité de débit des requêtes qui correspond à de l&#8217;alloué/provisionné/réservé, la <span style="text-decoration: underline;">capacité de stockage correspond à du consommé</span> en termes de facturation.</li>
<li>DynamoDB est une base de données indexées et la quantité d&#8217;espace disque correspond à la taille des données que vous avez chargées plus un <span style="text-decoration: underline;">overhead par item de 100 bytes pour l&#8217;indexation</span>.</li>
</ul>
<p><em><strong>Bench</strong></em></p>
<p>J&#8217;ai effectué un mini bench à partir d&#8217;une instance EC2 <em>m1.large</em> dans la même région que le service DynamoDB : j&#8217;ai lancé un script Ruby qui insère <span style="text-decoration: underline;">10000 éléments de moins de 1Ko</span> dans une table vide dont j&#8217;ai fait varier la capacité de débit de requêtes en écriture. Entre chaque test, j&#8217;ai détruit/recréé la table.</p>
<p>Voici le code que j&#8217;ai utilisé basé sur le <a title="AWS SDK for Ruby" href="http://aws.amazon.com/sdkforruby/" target="_blank">SDK Ruby</a> (que je vous recommande par ailleurs) proposé par AWS :</p>
<blockquote>
<pre>require 'rubygems'
require 'aws'

dynamo_db = AWS::DynamoDB.new(
:access_key_id =&gt; 'XXXXXXXXXXXXXXXXXX',
:secret_access_key =&gt; 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')

table = dynamo_db.tables['TestFredTableForDecrypt']
table.hash_key = [:ImageID, :string]

10000.times do |i|
    item = table.items.create(
    :ImageID =&gt; "img-#{i}",
    :name =&gt; "name-#{i}",
    :other =&gt; ["nothing", "NA", "nada", "nil", "other-#{i}"])
end</pre>
</blockquote>
<p>Le résultat de ce test est le suivant :<br />
<img class="size-full wp-image-2990" title="AWS – DynamoDB – Débit écritures" src="http://decrypt.ysance.com/wp-content/uploads/2012/02/AWS-DynamoDB-DebitEcritures.png" alt="AWS – DynamoDB – Débit écritures" width="483" height="291" /><br />
<img class="size-full wp-image-2991" title="AWS – DynamoDB – Débit écritures (DataSource)" src="http://decrypt.ysance.com/wp-content/uploads/2012/02/AWS-DynamoDB-DebitEcrituresDataSource.png" alt="AWS – DynamoDB – Débit écritures (DataSource)" width="655" height="42" /></p>
<p>On constate que le débit en écriture correspond bien à ce que nous attendions :</p>
<ul>
<li>10000 w / 5 w/s = 2000 s = 33,33 min</li>
<li>10000 w / 20 w/s = 2000 s = 8,33 min</li>
<li>10000 w / 40 w/s = 250 s = 4,17 min</li>
<li>&#8230;</li>
</ul>
<p>Une dérive apparaît à partir de 160 unités, mais cela n&#8217;est pas représentatif car le test est effectué à partir d&#8217;<span style="text-decoration: underline;">un seul thread Ruby</span> (l&#8217;instance EC2 <em>m1.large</em> elle-même n&#8217;était pas beaucoup sollicitée &#8211; CPU, Load Average, &#8230;) qui a du rencontrer sa propre limite. :o)</p>
<p>J&#8217;ai bien entendu vérifié après chaque test que tout avait bien été inséré : <em>table.items.count</em> ! :o)</p>
<p>A noter que j&#8217;ai aussi essayé le même test en ne recréant pas la table et en doublant la capacité en écriture à chaque fois : le résultat est le même et chaque opération de modification de la capacité du débit a pris au maximum une minute pour ces 10000 éléments.</p>
<p>Comme précisé dans l&#8217;introduction, il s&#8217;agit d&#8217;un mini bench. Pour bien faire avec plus de temps, il faudrait refaire le même test en optimisant un injecteur (l&#8217;instance EC2) avec plusieurs threads et en multipliant ce nombre d&#8217;injecteurs pour bencher DynamoDB et pas le code Ruby ou l&#8217;OS. Il faudrait alors vérifier la tenue des performances en écriture et en lecture (fonction de la cohérence) et surtout voir si la modification de capacité du débit sur un gros volume de données est complètement transparente pour les requêtes en cours d&#8217;exécution et quelle est la durée nécessaire à cette augmentation.</p>
<p><strong><em>Conclusion</em></strong></p>
<p>DynamoDB est un outil intéressant car il s&#8217;inscrit dans un démarche de plus en plus packagée des services, <span style="text-decoration: underline;">plus proche d&#8217;un PaaS que d&#8217;un IaaS</span>. Le modèle est similaire à celui de SimpleDB, mais le gros avantage réside dans la <span style="text-decoration: underline;">non limitation de la taille d&#8217;une table</span> et de la <span style="text-decoration: underline;">garantie de la performance</span> quel que soit le volume de données stockées (sans parler de la disponibilité et de la durabilité des données qui sont assurées de manière inhérente par Amazon). Ce point technique est réalisé par la répartition (sharding) des données sur plusieurs serveurs (plus le débit souhaité sera important, plus le nombre de serveurs le sera aussi) pour permettre l&#8217;exécution de requêtes en parallèle. On comprend bien alors que l&#8217;augmentation de cette capacité peut prendre du temps sur de gros volumes, cela ne me choque pas, d&#8217;autant plus que le service reste disponible pendant cette opération !</p>
<p>Je suis un peu plus embêté par la <span style="text-decoration: underline;">limitation à un facteur 2 d&#8217;augmentation</span> de ce débit par opération. Je n&#8217;ai pas trouvé de formulaire pour upgrader cette limite. Même en s&#8217;y prenant à l&#8217;avance, cela peut être fastidieux de recommencer cette opération (avec le temps d&#8217;attente induit) si le site concerné attend un pourcentage d&#8217;augmentation significatif.</p>
<p>Dans tous les cas, il faut bien comprendre que cette scalabilité n&#8217;est pas instantanée, mais qu&#8217;il faut déterminer son <span style="text-decoration: underline;">capacity planning</span> et ensuite l&#8217;appliquer : le très gros avantage c&#8217;est qu&#8217;il suffit pour le mettre en place d&#8217;envoyer une requête (ou quelques unes) aux AWS qui s&#8217;occupent de tout le reste.</p>
<p>Au niveau fonctionnalités/modèle on retrouve un classique du NoSQL avec ses <span style="text-decoration: underline;">choix propres et compromis</span> entre complétude/performance. C&#8217;est donc un moteur de base de données non relationnel intéressant qu&#8217;il faudra prendre en compte dans les choix architecturaux de nos futures applications, au même titre que d&#8217;autres moteurs sur ce créneau (y compris SimpleDB qui conserve un intérêt du fait de fonctionnalités supplémentaires possibles via ses APIs par rapport aux APIs de dynamoDB). Il faudra suivre avec attention les prochaines releases du service pour voir les fonctionnalités qui seront embarquées en plus dans le produit.</p>
<p><em><strong>Frédéric FAURE</strong></em> <a title="Frédéric FAURE @Twitter" href="http://twitter.com/fredericfaure">@Twitter</a> <a title="Ysance, Simplifions les projets informatiques" href="http://www.ysance.com/">@Ysance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2012/02/dynamodb-le-decryptage-de-la-nouvelle-solution-nosql-de-aws/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Le Web accélère avec Varnish !!!</title>
		<link>http://decrypt.ysance.com/2012/02/le-web-accelere-avec-varnish/</link>
		<comments>http://decrypt.ysance.com/2012/02/le-web-accelere-avec-varnish/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 19:42:44 +0000</pubDate>
		<dc:creator>Laurent Roux</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Haute Disponibilité]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Load Balancing]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Scalability]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[NCSA]]></category>
		<category><![CDATA[S3]]></category>
		<category><![CDATA[Syslog-NG]]></category>
		<category><![CDATA[Varnish]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=2756</guid>
		<description><![CDATA[<img class="size-full wp-image-2795 alignright" title="Varnish Cache" src="http://decrypt.ysance.com/wp-content/uploads/2012/01/varnish_cache.jpg" alt="Varnish Cache" width="192" height="192" /><a title="Site de Varnish Cache" href="http://www.varnish-cache.org/" target="_blank">Varnish</a> est un outil fabuleux à bien des égards. C’est une boite à outils qui permet de simplifier, harmoniser, sécuriser et accélérer les architectures web. Nous allons aborder dans cet article certaines fonctionnalités de Varnish pour commencer à en tirer le maximum. Il se positionne comme un reverse proxy cache. En gros nous allons le placer en amont des serveurs Web pour intercepter les requêtes, mettre en cache ce qui est généré par les backends et resservir le contenu généré depuis son cache. Mais son fonctionnement peut aller plus loin.

<em><strong>Le fonctionnement</strong></em>
Varnish se configure simplement grâce à deux types de fichiers. Le fichier de configuration de Varnish où nous allons définir certains paramètres internes et les fichiers VCL qui permettent de configurer le comportement de Varnish via une sorte de langage de programmation.

[...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2795 alignright" title="Varnish Cache" src="http://decrypt.ysance.com/wp-content/uploads/2012/01/varnish_cache.jpg" alt="Varnish Cache" width="192" height="192" /><a title="Site de Varnish Cache" href="http://www.varnish-cache.org/" target="_blank">Varnish</a> est un outil fabuleux à bien des égards. C’est une boite à outils qui permet de simplifier, harmoniser, sécuriser et accélérer les architectures web. Nous allons aborder dans cet article certaines fonctionnalités de Varnish pour commencer à en tirer le maximum. Il se positionne comme un reverse proxy cache. En gros nous allons le placer en amont des serveurs Web pour intercepter les requêtes, mettre en cache ce qui est généré par les backends et resservir le contenu généré depuis son cache. Mais son fonctionnement peut aller plus loin.</p>
<p>&nbsp;</p>
<h3>Le fonctionnement</h3>
<p>Varnish se configure simplement grâce à deux types de fichiers. Le fichier de configuration de Varnish où nous allons définir certains paramètres internes et les fichiers VCL qui permettent de configurer le comportement de Varnish via une sorte de langage de programmation.</p>
<p><a title="Le principe de Varnish" href="https://www.varnish-cache.org/trac/wiki/VCLExampleDefault" target="_blank">Le principe de Varnish</a> s’appuie sur la machine à état suivante :</p>
<p style="text-align: center;"><img class="aligncenter size-large wp-image-2761" title="VCL" src="http://decrypt.ysance.com/wp-content/uploads/2012/01/vcl-649x1024.png" alt="VCL" width="649" height="1024" /></p>
<p>&nbsp;</p>
<p>Varnish permet d’intervenir au niveau de chacun des états pour effectuer des opérations sur HTTP ou sur lui-même. C’est cette finesse d’intervention qui permet à Varnish d’être véloce et complet.</p>
<p>Un client effectue une requête sur une ressource qui n’est pas en cache suivra le cheminement suivant :<br />
<img class="size-full wp-image-2804" title="Varnish cache miss" src="http://decrypt.ysance.com/wp-content/uploads/2012/01/cache_miss.png" alt="Varnish cache miss" width="532" height="109" /><br />
Si cette ressource est demandée à nouveau, le chemin suivi change car la ressource est maintenant en cache :<br />
<img class="size-full wp-image-2806" title="Varnish cache hit" src="http://decrypt.ysance.com/wp-content/uploads/2012/01/cache_hit.png" alt="Varnish cache hit" width="404" height="116" /></p>
<p>Toutes ces étapes sont symbolisées en VCL par des “procédures standards” (vcl_recv, vcl_fetch, vcl_deliver&#8230; etc). Toutes ces procédures sont surchargables et nous pouvons aussi déclarer les nôtres qui seront appelées dans les procédures standards. Le langage VCL ne tolère aucun code orphelin, tout ce qui est déclaré doit être utilisé.</p>
<p>&nbsp;</p>
<h3>Le Cache</h3>
<p>Varnish propose un cache en mémoire et un cache sur disque. Mais il faut faire un choix, les deux ne sont pas cumulables. Le cache accepte à peu près tout ce qui passe dans les mains de Varnish (pages HTML, fichiers statics, flux de données en JSON&#8230; etc), à partir du moment où l’on déclare l’objet cachable et qu’il a une TTL.<br />
Le cache est alimenté juste après l’étape “Fetch”, en réalité c’est juste après la récupération de la donnée sur le backend. C’est à cet endroit que l’on va faire toutes les modifications de l’entête HTTP de la ressource cachée. Faire ces modifications au niveau du “Fetch” va permettre de garantir une entrée cache propre (ne pas avoir plusieurs entrées cache car une même ressource va avoir un payload différent). De plus l’objet est stocké dans le cache avec son entête HTTP, il est donc plus efficace de traiter une fois pour toute l’entête et la resservir avec l’objet.<br />
Comme nous le verrons plus loin, la compression d’objet influe aussi sur les performances du cache. Il est préférable de stocker un objet compressé et laisser Varnish le délivrer compressé ou non suivant l’entête “Accept-Encoding”.</p>
<p>La définition correct de la TTL d’un objet pour manager le cache-control est un élément important de Varnish. Nous pouvons contrôler le cache de façon précise en définissant la TTL pour un type de ressource ou pour une url par exemple :</p>
<blockquote>
<pre>if(beresp.ttl &gt; 0s){
  unset beresp.http.Expires;
  if ( req.backend == backend_S3 ) {
     set beresp.http.Cache-Control = "public, max-age=60";
     set beresp.ttl = 60s;
  } else {
     set beresp.http.Cache-Control = "public, max-age=7200";
     set beresp.ttl = 2h;
  }
}</pre>
</blockquote>
<p>Ici nous demandons à Varnish de cacher sur 60 secondes tout ce qui vient de le backend “backend_S3” et le reste sera caché deux heures.</p>
<p>Le cache peut se manager de deux façons différentes :</p>
<li>Via des appels HTTP par la méthode PURGE et en gérant des ACLs pour sécuriser l’appel.</li>
<li>Via les “Bans” que l’on peut inclure dans le VCL ou effectuer via varnishadm.</li>
<p>&nbsp;</p>
<h3>La Compression</h3>
<p>Depuis la version 3.0, Varnish a la possibilité de compresser et décompresser des ressources. Cette fonctionnalité est importante pour 3 raisons :</p>
<li>Économiser de la bande passante entre le backend et Varnish.</li>
<li>Économiser de la place dans le cache de Varnish surtout quand il est en mémoire.</li>
<li>Économiser de la bande passante entre Varnish et le Client.</li>
<p>Elle peut être activée simplement en harmonisant l’entête “Accept-Encoding” et en positionnant la variable “do_gzip” au niveau du backend ou de la réponse du backend. Pour le reste Varnish va adapter la réponse (objet compressé ou non) au client en s’appuyant sur le “Accept encoding” de la requête.<br />
Il est bien sûr évident que la stratégie de compression doit être adaptée au type d’objet. On ne compressera pas un objet déjà compressé (gif, jpg&#8230;etc) :).</p>
<p>&nbsp;</p>
<h3>Le Loadbalancing</h3>
<p>Varnish peut gérer des backends de tous horizons. Avec des sites de plus en plus chargés, il est capable d’offrir la possibilité de faire du loadbalancing. Varnish dispose de 3 types de loadbalancing qui sont appelés “Director” :</p>
<li>RoundRobin.</li>
<li>Client (permet de faire du sticky session sur n’importe quel élément du header).</li>
<li>Random (disponible&#8230; utile c’est une autre histoire).</li>
<p>Varnish sait gérer l’éviction d’un backend lorsqu’il est indisponible. Cette fonctionnalité est d’autant plus utile quand nous activons le “probe” sur les backends.</p>
<blockquote>
<pre>backend server1 {
   .host = "server1.example.com";
   .probe = {
     .url = "/";
     .interval = 5s;
     .timeout = 1s;
     .window = 5;
     .threshold = 3;
   }
}</pre>
</blockquote>
<p>Varnish dispose aussi d’un mécanisme pour palier complètement à la défaillance d’un backend ou d’un Director. Nous appelons cela “Grace mode” ou “Saint mode”. Ces termes cachent la possibilité de servir un contenu caché même x minutes après la TTL en cas de non réponse d&#8217;un serveur. Il est aussi capable d’aiguiller une requête vers un autre serveur répondant correctement quand le serveur cible initial donne des réponses HTTP 500 à cause d’une trop grande charge par exemple.</p>
<p>&nbsp;</p>
<h3>Reverse Proxy</h3>
<p>Nous avons vu que Varnish se place devant toute notre infrastructure. Il va permettre de masquer complètement l’architecture déployée en utilisant toute la puissance de Reverse Proxy qu’il met à notre disposition.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-2765" title="Reverse Proxy" src="http://decrypt.ysance.com/wp-content/uploads/2012/01/Varnish1.png" alt="Reverse Proxy" width="382" height="370" /></p>
<p>En fait, il nous permet de faire un découplage complet entre l’organisation des URIs d’appels et l’organisation de leurs traitements sur l’infrastructure.</p>
<p>Voici un exemple d’une requête cliente que nous arrivons à aiguiller avec Varnish vers un bucket S3 public du nom de “ressources” et l’aiguillage prend en compte ce qu’il y a dans le nom du host de la requete :</p>
<blockquote>
<pre>set req.backend = backend_s3;
if(req.url == "/ressources1.xml") {
  set req.url = regsuball(req.http.host,
              "^(?:.*[.])?([a-z]+)[.](?:net|com)$", "/ressource1.\1.xml");
}else if(req.url == "/ressource2.txt") {
  set req.url = regsuball(req.http.host,
              "^(?:([a-z]+)[0-9]*[.])(?:([a-z]+)*[.])[a-z]+$","/ressources.\1.\2.txt");
}
set req.http.host = "resources.s3.amazonaws.com";

backend  backend_s3 {
  .host = "ressources.s3.amazonaws.com";
  .port = "80";
  .connect_timeout = 5s;
  .first_byte_timeout = 3s;
  .between_bytes_timeout = 2s;
  .max_connections = 1000;
}</pre>
</blockquote>
<p>&nbsp;</p>
<h3>Sécuriser et nettoyage HTTP</h3>
<p>Le protocole HTTP permet d’utiliser plusieurs types de méthodes (GET, POST, DELETE&#8230; etc). Ces méthodes peuvent être utilisées de différentes manières pour déclencher des actions spécifiques (cas de services REST) sur les services abrités sur les backends. Or la protection au niveau HTTP de ce genre de services est assez fastidieuse côté serveurs d’applications. Varnish va permettre de filtrer précisément ce qui doit passer et pour quelle utilisation. Nous allons donc limiter les effets de bords.<br />
Imaginons que nous avons un service accessible uniquement en GET /service1/ et un deuxième /service2/ accessible lui en GET et POST nous allons écrire quelque chose comme ceci :</p>
<blockquote>
<pre>if (req.request != "GET" &amp;&amp; req.request != "POST"){
  call error;
}

if (req.url ~ "^/service2"){
call service2;
}

if(req.request == "POST"){
  call error;
}

if (req.url ~ "^/service1"){
  call service1;
}

call error;</pre>
</blockquote>
<p>Dans cet exemple nous interdisons systématiquement tout ce qui n’est pas méthode GET ou POST. Ensuite pour une url qui commence par /service2 nous allons vers la routine qui va traiter le payload pour ce service. Puis nous bannissons la méthode POST et nous traitons les urls avec /service1 et enfin nous bannissons le reste.</p>
<p>Avec cette méthode aucune requête non prévue peut remonter vers un backend. Nous avons deux avantages :</p>
<li>Le code pour traiter les cas aux limites sera plus simple.</li>
<li>Une majorité d’erreurs ne remonteront pas vers le backend, celles-ci ne provoqueront donc aucune exception ni saturation.</li>
<p>Dans un deuxième cas de figure il peut être intéressant de normaliser les entêtes HTTP. Prenons l’exemple de l’Accept-Encoding. Varnish préconise de le normaliser ainsi :</p>
<blockquote>
<pre>if (req.http.Accept-Encoding) {
  if (req.http.Accept-Encoding ~ "gzip") {
    set req.http.Accept-Encoding = "gzip";
  } elsif (req.http.Accept-Encoding ~ "deflate") {
    set req.http.Accept-Encoding = "deflate";
  } else {
    remove req.http.Accept-Encoding;
  }
}</pre>
</blockquote>
<p>Tout simplement pour éviter de créer des entrées cache différentes pour un même payload uniquement parce que tous les clients n’écrivent pas cet entête de la même façon.</p>
<p>Nous pouvons aussi enlever certains headers qui peuvent donner trop d’informations sur l’infrastructure. Pour S3 par exemple nous allons passer ces commandes dans le fetch :</p>
<blockquote><p>unset beresp.http.x-amz-id-2;<br />
unset beresp.http.x-amz-request-id;<br />
unset beresp.http.x-amz-meta-s3cmd-attrs;<br />
unset beresp.http.x-amz-meta-s3fox-filesize;<br />
unset beresp.http.x-amz-meta-s3fox-modifiedtime;</p></blockquote>
<p>Ou positionner des entêtes plus personnelles :</p>
<blockquote><p>set beresp.http.Server = &laquo;&nbsp;ServeurPerso&nbsp;&raquo;;</p></blockquote>
<p>La dernière petite chose à penser pour le nettoyage réside dans le positionnement d’un content-type correct pour toutes des ressources. Cette opération se fait de la même manière que pour le nettoyage des headers en positionnant “set beresp.http.Content-Type” par groupe de ressources.</p>
<p>De par ces fonctionnalités, Varnish est capable d&#8217;assurer l&#8217;orchestration de la haute disponibilité d&#8217;une architecture. Il est capable de détecter les backends défaillants et même de les remplacer en s&#8217;appuyant sur son cache. Il va les protéger en prenant en compte une grande partie de la gestion des erreurs 404.</p>
<p>&nbsp;</p>
<h3>Uniformisation des Logs d’accès</h3>
<p>Le process “varnishd” ne produit aucun log. Il se contente d’écrire les informations dans des segments de mémoire partagée. Ces segments sont consommés par des outils comme varnishadm, varnishlog ou encore varnishncsa. C’est principalement varnishncsa qui nous intéresse. C’est ce process qui va lire les informations et créer un fichier de log au format NCSA. L’avantage ici est énorme. Nous pouvons décharger les serveurs d’applications et front http de la production de ces logs. De plus ces logs seront moins éparpillés (quoi que, avec l’utilisation de <a title="syslog-ng" href="http://www.balabit.com/sites/default/files/documents/syslog-ng-v3.0-guide-admin-en.html/bk01-toc.html" target="_blank">syslog-ng</a> ça ne soit pas un problème). Enfin les logs seront tous normalisés qu&#8217;ils soient sur Apache, Tomcat, JBoss ou encore lighttp et NginX. Nous pouvons donc penser uniquement aux traitements que nous allons bien pouvoir leur faire subir et ne plus passer du temps à tout reformater. Cette considération prend tout son sens quand on commence à atteindre plusieurs gigas de logs d’accès par jour.<br />
Depuis la version 3.0, Varnishncsa permet de ne pas suivre la norme NCSA et nous laisse le choix du format de sortie.</p>
<p><em><strong>Laurent ROUX</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2012/02/le-web-accelere-avec-varnish/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducing dynaTrace: Next Generation Application Performance Management</title>
		<link>http://decrypt.ysance.com/2012/01/introducing-dynatrace-next-generation-application-performance-management/</link>
		<comments>http://decrypt.ysance.com/2012/01/introducing-dynatrace-next-generation-application-performance-management/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 10:22:53 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Industrialisation]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Profiling]]></category>
		<category><![CDATA[APM]]></category>
		<category><![CDATA[DynaTrace]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=2817</guid>
		<description><![CDATA[<img class="size-full wp-image-2819 alignright" title="Logo dynaTrace" src="http://decrypt.ysance.com/wp-content/uploads/2012/01/LogoDynaTraceNew.jpg" alt="Logo dynaTrace" width="250" height="83" />

<span style="color: #ff0000;"><strong>Ysance </strong></span>is proud to introduce the <strong>dynaTrace</strong> solution to the French market in a <strong>webinar</strong> on 21 February 2012 starting at 09:30 (Paris, Prague).
<div id="main_text">
<div><strong>Application Performance Management</strong> is becoming an increasingly important capability in:</div>
<div>
<ul>
	<li><strong>Development</strong> – create faster, more stable and scalable applications right from the beginning to avoid costly rework</li>
	<li><strong>Test and QA</strong> – prevent performance issue from reaching production systems, while reducing test cycle and increasing test coverage</li>
	<li><strong>Production</strong> – gain visibility into Business Transaction and User Experience of complex SOA, virtualized or Cloud systems while being empowered to address production issues before impacting users</li>
</ul>
<strong><a title="Site de dynaTrace, Introducing dynaTrace" href="http://applicationperformance.dynatrace.com/IntroducingdynaTraceEE_Feb_2012.html?promosource=Ysance" target="_blank"><span style="color: #ff0000;">Register for Webinar</span>
</a></strong><strong>Duration: 1 hour (including demo)</strong>
</div>

[...]
]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-2819 alignright" title="Logo dynaTrace" src="http://decrypt.ysance.com/wp-content/uploads/2012/01/LogoDynaTraceNew.jpg" alt="Logo dynaTrace" width="250" height="83" /></p>
<p><span style="color: #ff0000;"><strong>Ysance </strong></span>is proud to introduce the <strong>dynaTrace</strong> solution to the French market in a <strong>webinar</strong> on 21 February 2012 starting at 09:30 (Paris, Prague).</p>
<div id="main_text">
<div><strong>Application Performance Management</strong> is becoming an increasingly important capability in:</div>
<div>
<ul>
<li><strong>Development</strong> – create faster, more stable and scalable applications right from the beginning to avoid costly rework</li>
<li><strong>Test and QA</strong> – prevent performance issue from reaching production systems, while reducing test cycle and increasing test coverage</li>
<li><strong>Production</strong> – gain visibility into Business Transaction and User Experience of complex SOA, virtualized or Cloud systems while being empowered to address production issues before impacting users</li>
</ul>
<p><strong><a title="Site de dynaTrace, Introducing dynaTrace" href="http://applicationperformance.dynatrace.com/IntroducingdynaTraceEE_Feb_2012.html?promosource=Ysance" target="_blank"><span style="color: #ff0000;">Register for Webinar</span><br />
</a></strong><strong>Duration: 1 hour (including demo)</strong>
</div>
<div><strong>dynaTrace </strong>provides a new approach to Managing and Optimizing Application Performance throughout entire lifecycle. Learn why over 500 companies have now switched to <strong>dynaTrace</strong> in order to:</div>
<div>
<ul>
<li><strong>Tame </strong>distributed, heterogeneous and virtualized systems complexity</li>
<li>Understand &amp; improve <strong>User Experience</strong></li>
<li>Manage <strong>business transactions</strong></li>
<li>Resolve production problems <strong>10 times faster</strong></li>
<li><strong>Automate</strong> Development and Test, <strong>to reduce test cycles by 75%</strong></li>
<li>Optimize<strong> Application Performance</strong> from the outset - <strong>boost developer productivity by 20%</strong></li>
</ul>
</div>
</div>
<p><em><strong>Frédéric FAURE</strong></em> <a title="Frédéric FAURE @Twitter" href="http://twitter.com/fredericfaure">@Twitter</a> <a title="Ysance, Simplifions les projets informatiques" href="http://www.ysance.com/">@Ysance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2012/01/introducing-dynatrace-next-generation-application-performance-management/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plus loin dans l’automatisation avec le DNS</title>
		<link>http://decrypt.ysance.com/2012/01/plus-loin-dans-l%e2%80%99automatisation-avec-le-dns/</link>
		<comments>http://decrypt.ysance.com/2012/01/plus-loin-dans-l%e2%80%99automatisation-avec-le-dns/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 08:55:31 +0000</pubDate>
		<dc:creator>Laurent Roux</dc:creator>
				<category><![CDATA[Automatisation]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Haute Disponibilité]]></category>
		<category><![CDATA[Industrialisation]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Capistrano]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[IaaS]]></category>
		<category><![CDATA[Scalability]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=2727</guid>
		<description><![CDATA[Dans le monde élastique du Cloud et plus précisément en ce qui concerne l’IaaS, nous nous heurtons souvent au problème : “quelle est l’adresse de telle machine, quel est son mode d’accès...”. A ces questions peuvent s’ajouter la problématique du tout automatique via un <a title="Site de Capistrano" href="http://www.capify.org/">Capistrano</a> par exemple. Vous me direz qu’il existe une console Web et des API. Oui mais la console n’est pas réellement exploitable pour l’automatisation et les API ont besoin de crédentials que l’on ne préfère pas disséminer partout sur les serveurs.

Le but de cet article est de montrer comment avoir un référentiel des instances disponibles sur un compte Amazon (ou autre) avec toutes les informations qui vont bien sans devoir utiliser la console web Amazon. Cette solution permet de pousser l’automatisation un cran plus loin en proposant une liste exhaustive que l’on peut automatiser et la possibilité d’avoir une liste des serveurs disponibles en une ligne de commande pour n’importe quel Devops allergique aux opérations sur navigateur web.

[...]
]]></description>
			<content:encoded><![CDATA[<p>Dans le monde élastique du Cloud et plus précisément en ce qui concerne l’IaaS, nous nous heurtons souvent au problème : “quelle est l’adresse de telle machine, quel est son mode d’accès&#8230;”. A ces questions peuvent s’ajouter la problématique du tout automatique via un <a title="Site de Capistrano" href="http://www.capify.org/">Capistrano</a> par exemple. Vous me direz qu’il existe une console Web et des API. Oui mais la console n’est pas réellement exploitable pour l’automatisation et les API ont besoin de crédentials que l’on ne préfère pas disséminer partout sur les serveurs.</p>
<p>Le but de cet article est de montrer comment avoir un référentiel des instances disponibles sur un compte Amazon (ou autre) avec toutes les informations qui vont bien sans devoir utiliser la console web Amazon. Cette solution permet de pousser l’automatisation un cran plus loin en proposant une liste exhaustive que l’on peut automatiser et la possibilité d’avoir une liste des serveurs disponibles en une ligne de commande pour n’importe quel Devops allergique aux opérations sur navigateur web.</p>
<p>Dans le but de rester élastique dans la démarche, nous allons utiliser deux fonctionnalités DNS des plus intéressantes qui sont :</p>
<li>les requêtes nsupdate</li>
<li>les requêtes AXFR</li>
<p>Nous allons aussi nous aider des API Amazon et tout ça dans un environnement Linux. Notre DNS va donc servir de base de données pour référencer les machines via leurs IP privées.</p>
<h4>Liste des pré-requis</h4>
<p>Un serveur T1-Micro sur Amazon servant de DNS est largement suffisant. Le package BIND9 doit être installé. Sachant que sur une infrastructure nous préférons utiliser des noms à la place des IP, l’utilisation d’un DNS est fortement conseillée. De plus, la configuration des différents éléments techniques d’une plate-forme est nettement plus souple en utilisant des noms.</p>
<h4>Configuration</h4>
<p>Pour effectuer des requêtes nsupdate sur un DNS il faut autoriser les IP des machines qui ont le droit d&#8217;émettre ces requêtes vers notre DNS (nsupdate et axfr). Ensuite il faut placer les bases du DNS (fichiers db.xxx) dans un endroit ou le process bind a le droit d’écrire. Pour des raisons de sécurité, il est hors de question que ce process puisse avoir un accès en écriture dans le répertoire /etc/ nous allons donc déplacer ces fichiers dans /var/cache/bind/.</p>
<h4>Elements de Configuration DNS</h4>
<p>Dans le fichier named.conf.local dans la section de la zone que nous voulons contrôler il faut ajouter l’ip de la machine autorisée à faire les requêtes nsupdate :</p>
<blockquote><p>allow-update { xxx.xxx.xxx.xxx; };</p></blockquote>
<p>Les requêtes AXFR sont autorisées dans ce même fichier de configuration en ajoutant l’ip des serveurs autorisés dans la sections “allow-transfer” de la zone.<br />
Dans cette même section nous allons déplacer le fichier de la zone en modifiant son chemin :</p>
<blockquote><p>file &laquo;&nbsp;/var/cache/bind/db.xxxx.yyyy&nbsp;&raquo;;</p></blockquote>
<h4>Démarche</h4>
<p>Une fois cette opération réalisée nous pouvons utiliser les API Amazon pour récupérer les informations qui concernent une instance (par exemple, nous utiliserons ec2-describe-instances dont la documentation est à l’adresse suivante :  <a title="Site de Amazon Web Services, AWS Documentation - ec2-describe-instances" href="http://docs.amazonwebservices.com/AWSEC2/latest/CommandLineReference/ApiReference-cmd-DescribeInstances.html">DOC API</a>).<br />
Les informations que nous allons récupérer (security groupes, Key, EBS ID&#8230;..), vont être réorganisées pour ensuite être injectées dans le DNS sous la forme d’enregistrements TXT en plus de l’enregistrement A utilisé pour référencer une adresse.<br />
Pour réaliser une mise à jour automatique du DNS il est préférable d’exécuter une instruction de “delete” avant l’ajout d’un enregistrement. Vu que nous sommes sur un DNS qui sera utilisé pour les zones de notre infrastructure nous allons prendre en compte les trois enregistrements suivants :</p>
<li>le forward record, qui fait correspondre un nom à une ip.</li>
<li>le reverse record, qui fait correspondre une ip à un nom.</li>
<li>le text record, qui va nous permettre d’enregistrer les informations sur l’instance.</li>
<p>Pour enlever les enregistrements précédents (dans le cas ou le serveur est déjà référencé ou pour enlever le serveur).</p>
<blockquote><p>nsupdate<br />
&gt; server monserverdns.domain.com<br />
&gt; zone domain.net<br />
&gt; update delete monserver.domain.net A<br />
&gt; update delete monserver.domain.net TXT<br />
&gt; update delete zzz.yyy.xxx.www.in-addr.arpa. PTR<br />
&gt; send</p></blockquote>
<p>Ensuite on enregistre le serveur.</p>
<blockquote><p>nsupdate<br />
&gt; server monserverdns.domain.com<br />
&gt; zone domain.net<br />
&gt; update add monserver.domain.net 86400 IN A www.xxx.yyy.zzz<br />
&gt; update add monserver.domain.net 86400 IN TXT informations sur le serveur<br />
&gt; update add zzz.yyy.xxx.www.in-addr.arpa 86400 IN PTR monserver.domain.net.<br />
&gt; send</p></blockquote>
<p>Nous partons du principe que le DNS est bien déclaré au niveau du fichier /etc/resolv.conf.</p>
<p>Une fois tous les enregistrements en place il suffit de passer la commande suivante pour que la liste apparaisse :</p>
<blockquote><p>dig @ip_du_dns axfr domain.net</p>
<p>sh-3.2# dig @10.211.55.5 axfr test.net<br />
; &lt;&lt;&gt;&gt; DiG 9.7.3-P3 &lt;&lt;&gt;&gt; @10.211.55.5 axfr test.net;<br />
(1 server found)<br />
;; global options: +cmd<br />
test.net.		604800	IN	SOA	dns. root.test.net. 4 604800 86400 2419200 604800<br />
test.net.		604800	IN	NS	dns.<br />
test.net.		604800	IN	A	10.211.55.5<br />
test.net.		604800	IN	AAAA	::1<br />
s1.test.net.		86400	IN	A	1.2.3.4<br />
s1.test.net.		86400	IN	TXT	&laquo;&nbsp;tout&nbsp;&raquo; &laquo;&nbsp;ce&nbsp;&raquo; &laquo;&nbsp;que&nbsp;&raquo; &laquo;&nbsp;l&nbsp;&raquo; &laquo;&nbsp;on&nbsp;&raquo; &laquo;&nbsp;peut&nbsp;&raquo; &laquo;&nbsp;dire&nbsp;&raquo; &laquo;&nbsp;sur&nbsp;&raquo; &laquo;&nbsp;un&nbsp;&raquo; &laquo;&nbsp;serveur&nbsp;&raquo;<br />
test.net.		604800	IN	SOA	dns. root.test.net. 4 604800 86400 2419200 604800<br />
;; Query time: 19 msec<br />
;; SERVER: 10.211.55.5#53(10.211.55.5)<br />
;; WHEN: Mon Jan  9 16:03:56 2012<br />
;; XFR size: 7 records (messages 1, bytes 237)</p></blockquote>
<p>Nous touchons au but. Il suffit maintenant d&#8217;exécuter la même commande avec un grep sur “TXT” pour récupérer la liste qui nous intéresse.</p>
<p>Avec la commande suivante nous allons enlever l’enregistrement TXT du DNS :</p>
<blockquote><p>nsupdate<br />
&gt; server monserverdns.test.com<br />
&gt; zone test.net<br />
&gt; update delete monserver.test.net TXT<br />
&gt; send</p></blockquote>
<blockquote><p>sh-3.2# dig @10.211.55.5 axfr test.net<br />
; &lt;&lt;&gt;&gt; DiG 9.7.3-P3 &lt;&lt;&gt;&gt;<br />
@10.211.55.5 axfr test.net;<br />
(1 server found);;<br />
global options: +cmd<br />
test.net.		604800	IN	SOA	dns. root.test.net. 5 604800 86400 2419200 604800<br />
test.net.		604800	IN	NS	dns.<br />
test.net.		604800	IN	A	10.211.55.5<br />
test.net.		604800	IN	AAAA	::1<br />
s1.test.net.		86400	IN	A	1.2.3.4<br />
test.net.		604800	IN	SOA	dns. root.test.net. 5 604800 86400 2419200 604800<br />
;; Query time: 2 msec<br />
;; SERVER: 10.211.55.5#53(10.211.55.5)<br />
;; WHEN: Mon Jan  9 16:15:30 2012<br />
;; XFR size: 6 records (messages 1, bytes 183)</p></blockquote>
<p>Nous avons donc une base de données (le serveur DNS) qui va nous servir de référence pour y placer toutes les informations des instances tirées des API Amazon.<br />
Cet article n’aborde pas le côté sécurité de bind et ne fait donc pas référence à la gestion de clé pour les requêtes nsupdate.</p>
<p><em><strong>Laurent ROUX</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2012/01/plus-loin-dans-l%e2%80%99automatisation-avec-le-dns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Azure en pratique&#8230;</title>
		<link>http://decrypt.ysance.com/2011/12/windows-azure-en-pratique/</link>
		<comments>http://decrypt.ysance.com/2011/12/windows-azure-en-pratique/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 15:17:30 +0000</pubDate>
		<dc:creator>Olivier Léal</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Systèmes Distribués]]></category>
		<category><![CDATA[Azure BLOB]]></category>
		<category><![CDATA[Azure Drive]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[SQL Azure]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=2700</guid>
		<description><![CDATA[<img class="alignleft size-full wp-image-2705" title="Windows Azure" src="http://decrypt.ysance.com/wp-content/uploads/2011/12/windowazure.png" alt="" width="203" height="157" />

La PaaS Microsoft <a href="http://www.microsoft.com/france/windows-azure/" title="Site de Windows Azure" target="_blank">Windows Azure</a> est l'une des plateformes "as a service" les plus abouties. Cependant, pour éviter les déceptions, il est important de bien comprendre les caractéristiques clés afin d'en faire le meilleur usage possible. Voici les éléments que je vais aborder :

o Que peut-on faire ou ne pas faire avec une instance de calcul ?

o Comment gérer la persistance des données ?

o Peut-on installer d'autres SGBD / Systèmes clé/valeur ?

[...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.microsoft.com/france/windows-azure"><img class="size-full wp-image-2705 alignleft" title="Windows Azure" src="http://decrypt.ysance.com/wp-content/uploads/2011/12/windowazure.png" alt="" width="203" height="157" /></a><br />
Le <strong>PaaS</strong> Microsoft <a title="Site de Windows Azure" href="http://www.microsoft.com/france/windows-azure/" target="_blank">Windows Azure</a> est l&#8217;une des plateformes &laquo;&nbsp;as a service&nbsp;&raquo; les plus abouties. Cependant, pour éviter les déceptions, il est important de bien comprendre les caractéristiques clés afin d&#8217;en faire le meilleur usage possible.</p>
<p><strong>PaaS</strong> = Un cloud orienté services où l&#8217;infrastructure nécessaire au déploiement d&#8217;une application est créée à partir des informations associées au package de déploiement de l&#8217;application. Pour faire simple, <strong>c&#8217;est l&#8217;infrastructure qui se construit autour de l&#8217;application à héberger</strong>.</p>
<p><span style="text-decoration: underline;">Répondons à  des questions de base :</span><a href="http://decrypt.ysance.com/2011/12/windows-azure-en-pratique"><img class="alignright size-full wp-image-2704" title="Windows Azure en pratique..." src="http://decrypt.ysance.com/wp-content/uploads/2011/12/question.png" alt="" width="144" height="157" /></a></p>
<p><strong>Que peut-on faire ou ne pas faire avec une instance de calcul (un serveur Windows dans le cloud Microsoft) ?</strong></p>
<ul>
<li>On peut y faire exécuter n&#8217;importe qu&#8217;elle type d&#8217;application compatible avec l&#8217;OS Windows : c&#8217;est-à-dire du .net, mais aussi du java, php, ruby, &#8230; L&#8217;utilisation de .net est facilitée, cependant, il existe de nombreux sdk additionnels permettant de déployer et exécuter d&#8217;autres types d&#8217;exécutables.</li>
<li>On ne peut pas y faire persister ses informations : l&#8217;état d&#8217;une instance Azure est à considérer comme &laquo;&nbsp;stateless&nbsp;&raquo;. Une instance Azure peut être réinstallée à tout moment et par conséquent, toutes les données stockées localement seront perdues.</li>
</ul>
<p><strong>Comment gérer la persistance des données ?</strong></p>
<ul>
<li>Il existe deux services essentiels pour le stockage des  données :
<ul>
<li>SQL Azure : une base SQL Server en haute disponibilité pour le stockage des données relationnelles, limitée à 150 Go par database,</li>
<li>les Blob : un entrepôt de stockage orienté clé/valeur sans limite de taille.</li>
</ul>
</li>
<li>Il existe un autre mode de persistance des données appelé Azure Drive. Il s&#8217;agit de pouvoir monter un disque persistant sur les instances de calculs. Les données de ce disque virtuel sont persistées dans les blobs Azure. Un Azure Drive peut être accessible en lecture pour plusieurs instances de calculs, cependant l&#8217;écriture est réservée à une seule instance.</li>
</ul>
<p>Idéalement, la gestion de la persistance des données ne s&#8217;effectue plus via le système de fichier NTFS, mais par l&#8217;utilisation des services de stockage : SQL Azure ou les services associés aux Blobs.</p>
<p><strong>Peut-on installer d&#8217;autres SGBD / Systèmes clé/valeur ?</strong></p>
<p>Oui et Non :</p>
<ul>
<li>Oui, il est possible de démontrer qu&#8217;on peut arriver à faire fonctionner <a title="Site de MySQL" href="http://www.mysql.fr/">MySQL</a>, <a title="Site de Oracle" href="http://www.oracle.com/fr/index.html">Oracle</a>,&#8230; par des procédures de déploiement complexes, mais c&#8217;est sans aucun support et en s&#8217;assurant soi-même de la bonne écriture des données principalement dans des Azure Drive ou en faisant le pari qu&#8217;avec &laquo;&nbsp;x&nbsp;&raquo; instances en cluster et en répliquant les données, il est peu probable que l&#8217;ensemble du pool d&#8217;instances soit arrêté à un même instant. A cela on peut ajouter le fait que l’utilisation des upgrade domains et des fault domains réduit à presque rien ce risque.</li>
<li>Oui, pour des solutions comme un moteur de recherche dont la donnée peut être reconstruite. C&#8217;est le cas par exemple avec <a title="Site de Solr" href="http://lucene.apache.org/solr/">Apache SOLR</a> que nous avons déjà déployé en production dans le Cloud Windows Azure. Mais aussi pour d&#8217;autres services comme Hadoop, Memcache, &#8230; Cependant, certains services comme la base NoSQL <a title="Site de MongoDB" href="http://www.mongodb.org/">MongoDB</a> propose maintenant un package d&#8217;installation compatible avec le stockage sur des blobs (<a title="Site de MongoDB, MongoDB on Azure" href="http://www.mongodb.org/display/DOCS/MongoDB+on+Azure">MongoDB sur Azure</a>).</li>
<li> Non, car pour un déploiement en production, il est indispensable, au final, de s’appuyer sur SQL Azure et les Blob afin de disposer des garanties indispensables à la pérennité des données. Cependant, comme pour le cas de MongoDB, les logiciels proposent de plus en plus des adaptations afin d&#8217;assurer une compatibilité avec ces modes de stockage. L&#8217;avenir n&#8217;est plus au stockage des données dans des &laquo;&nbsp;file systems&nbsp;&raquo; ntfs/fat/&#8230;</li>
</ul>
<p>La mise en oeuvre d&#8217;applications dans un PaaS nécessite une bonne compréhension de ses caractéristiques. Une fois cet apprentissage réalisé, il est possible de faire bien plus de choses qu&#8217;avec une architecture physique . L&#8217;ensemble des services proposés par le cloud est utilisable via des APIs, ainsi une application peut elle-même décider d&#8217;actions sur son hébergement afin d&#8217;adapter sa consommation en ressources.</p>
<p><strong><em>Olivier LEAL</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2011/12/windows-azure-en-pratique/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Le Cloud ? Réponses en images !</title>
		<link>http://decrypt.ysance.com/2011/10/le-cloud-reponses-en-images/</link>
		<comments>http://decrypt.ysance.com/2011/10/le-cloud-reponses-en-images/#comments</comments>
		<pubDate>Fri, 07 Oct 2011 12:44:01 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Organisation]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=2668</guid>
		<description><![CDATA[<a href="http://decrypt.ysance.com/wp-content/uploads/2011/10/techtoc.tv_.jpg"><img class="size-full wp-image-2672 alignleft" title="Logo techtoc.tv" src="http://decrypt.ysance.com/wp-content/uploads/2011/10/techtoc.tv_.jpg" alt="Logo techtoc.tv" width="233" height="59" /></a>

Voici 3 videos de plateaux TV (<a title="Le site de techtoc.tv" href="http://techtoc.tv/" target="_blank">techtoc.tv</a>), où Olivier LEAL et moi-même avons participé, sur divers sujets autour du Cloud Computing tels que :

o <a title="Le site de techtoc.tv, plateau : Migration du SI vers le Cloud : à quelles conditions ? Pour quelles parties du SI ? Pour qui ?" href="http://techtoc.tv/event/1345/migration-du-si-vers-le-cloud--a-quelles-conditions--pour-quelles-parties-du-si--pour-qui" target="_blank">Migration du SI vers le Cloud : à quelles conditions ? Pour quelles parties du SI ? Pour qui ?</a>, revue des bonnes pratiques déjà établies pour se déterminer à aller vers le Cloud, et vers lequel.

o <a title="Le site de techtoc.tv, plateau : Impacts du Cloud sur la gouvernance des SI ?" href="http://techtoc.tv/event/1351/conception-logicielle--design/virtualisation--cloud-computing/impacts-du-cloud-sur-la-gouvernance-des-si" target="_blank">Impacts du Cloud sur la gouvernance des SI ?</a>, redistribution des cartes !

o Ou bien encore <a title="Le site de techtoc.tv, plateau : Le Cloud pour ma PME ?" href="http://techtoc.tv/event/1355/conception-logicielle--design/virtualisation--cloud-computing/le-cloud-pour-ma-pme" target="_blank">Le Cloud pour ma PME ?</a>, les grandes entreprises auraient-elles plus d’avantages à utiliser le Cloud qu’une PME ? Ou les raisons sont-elles ailleurs ?

Je les mets à votre disposition si vous souhaitez les regarder !

[...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://decrypt.ysance.com/wp-content/uploads/2011/10/techtoc.tv_.jpg"><img class="size-full wp-image-2672 alignleft" title="Logo techtoc.tv" src="http://decrypt.ysance.com/wp-content/uploads/2011/10/techtoc.tv_.jpg" alt="Logo techtoc.tv" width="233" height="59" /></a></p>
<p>Voici 3 videos de plateaux TV (<a title="Le site de techtoc.tv" href="http://techtoc.tv/" target="_blank">techtoc.tv</a>), où Olivier LEAL et moi-même avons participé, sur divers sujets autour du Cloud Computing tels que :</p>
<p>o <a title="Le site de techtoc.tv, plateau : Migration du SI vers le Cloud : à quelles conditions ? Pour quelles parties du SI ? Pour qui ?" href="http://techtoc.tv/event/1345/migration-du-si-vers-le-cloud--a-quelles-conditions--pour-quelles-parties-du-si--pour-qui" target="_blank">Migration du SI vers le Cloud : à quelles conditions ? Pour quelles parties du SI ? Pour qui ?</a>, revue des bonnes pratiques déjà établies pour se déterminer à aller vers le Cloud, et vers lequel.</p>
<p><object id="playerWCS" width="600" height="338" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="movie" value="http://www.webcastory.com/v/4HeolczLwx3oBZ&#038;host=techtoc.tv" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed src="http://www.webcastory.com/v/4HeolczLwx3oBZ&#038;host=techtoc.tv" name="playerWCS" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="600" height="338"></embed></object></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>o <a title="Le site de techtoc.tv, plateau : Impacts du Cloud sur la gouvernance des SI ?" href="http://techtoc.tv/event/1351/conception-logicielle--design/virtualisation--cloud-computing/impacts-du-cloud-sur-la-gouvernance-des-si" target="_blank">Impacts du Cloud sur la gouvernance des SI ?</a>, redistribution des cartes !</p>
<p><object id="playerWCS" width="600" height="338" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="movie" value="http://www.webcastory.com/v/65YI51z7mNFbr0&#038;host=techtoc.tv" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed src="http://www.webcastory.com/v/65YI51z7mNFbr0&#038;host=techtoc.tv" name="playerWCS" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="600" height="338"></embed></object></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>o Ou bien encore <a title="Le site de techtoc.tv, plateau : Le Cloud pour ma PME ?" href="http://techtoc.tv/event/1355/conception-logicielle--design/virtualisation--cloud-computing/le-cloud-pour-ma-pme" target="_blank">Le Cloud pour ma PME ?</a>, les grandes entreprises auraient-elles plus d’avantages à utiliser le Cloud qu’une PME ? Ou les raisons sont-elles ailleurs ?</p>
<p><object id="playerWCS" width="600" height="338" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"><param name="movie" value="http://www.webcastory.com/v/qc206a0w82UlrH&#038;host=techtoc.tv" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed src="http://www.webcastory.com/v/qc206a0w82UlrH&#038;host=techtoc.tv" name="playerWCS" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="600" height="338"></embed></object></p>
<p>Je les mets à votre disposition si vous souhaitez les regarder !</p>
<p><strong>Frédéric FAURE</strong> <a title="Frédéric FAURE @Twitter" href="http://twitter.com/fredericfaure">@Twitter</a> <a title="Ysance, Simplifions les projets informatiques" href="http://www.ysance.com/">@Ysance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2011/10/le-cloud-reponses-en-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>7 Tendances Cloud Computing en 2011</title>
		<link>http://decrypt.ysance.com/2011/07/7-tendances-cloud-computing-en-2011/</link>
		<comments>http://decrypt.ysance.com/2011/07/7-tendances-cloud-computing-en-2011/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 14:55:56 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Amazon Web Services]]></category>
		<category><![CDATA[Cloud Hybride]]></category>
		<category><![CDATA[Cloud Privé]]></category>
		<category><![CDATA[Configuration Management System]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Infogérance]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portabilité]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=2643</guid>
		<description><![CDATA[<img class="size-thumbnail wp-image-2646 alignright" title="Cloud Invader" src="http://decrypt.ysance.com/wp-content/uploads/2011/07/space_invader-150x150.png" alt="Cloud Invader" width="90" height="90" /> Bonjour à tous ! Je mets à disposition sur Decrypt les slides de ma présentation lors de la Web Conférence <strong>Tendances Cloud 2011</strong>. Vous y trouverez ma <strong><span style="color: #ff0000;">définition </span></strong>du Cloud Computing, ainsi que les<strong><span style="color: #ff0000;"> 7 tendances</span></strong> de la fin de cette année qui, à mon sens, marqueront la direction du Cloud au niveau des entreprises :
<ol>
	<li>Champ Libre pour l’Open Source</li>
	<li>La Portabilité dans le Cloud</li>
	<li>DevOps</li>
	<li>AWS, l’Unique ?</li>
	<li>Cloud Privé : Mythe ou Réalité ?</li>
	<li>Moteur Hybride</li>
	<li>Infogérance</li>
</ol>
En vous souhaitant bon visionnage !

[...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-thumbnail wp-image-2646 alignright" title="Cloud Invader" src="http://decrypt.ysance.com/wp-content/uploads/2011/07/space_invader-150x150.png" alt="Cloud Invader" width="90" height="90" /> Bonjour à tous ! Je mets à disposition sur Decrypt les slides de ma présentation lors de la Web Conférence <strong>Tendances Cloud 2011</strong>. Vous y trouverez ma <strong><span style="color: #ff0000;">définition </span></strong>du Cloud Computing, ainsi que les<strong><span style="color: #ff0000;"> 7 tendances</span></strong> de la fin de cette année qui, à mon sens, marqueront la direction du Cloud au niveau des entreprises :</p>
<ol>
<li>Champ Libre pour l’Open Source</li>
<li>La Portabilité dans le Cloud</li>
<li>DevOps</li>
<li>AWS, l’Unique ?</li>
<li>Cloud Privé : Mythe ou Réalité ?</li>
<li>Moteur Hybride</li>
<li>Infogérance</li>
</ol>
<p>En vous souhaitant bon visionnage !</p>
<div style="width:595px" id="__ss_8574899"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/fredericfaure/tendances-cloud-2011" title="7 Tendances Cloud Computing en 2011" target="_blank">7 Tendances Cloud Computing en 2011</a></strong> <object id="__sse8574899" width="595" height="497"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tendancescloud2011-ffa-110712091958-phpapp01&#038;stripped_title=tendances-cloud-2011&#038;userName=fredericfaure" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse8574899" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tendancescloud2011-ffa-110712091958-phpapp01&#038;stripped_title=tendances-cloud-2011&#038;userName=fredericfaure" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="595" height="497"></embed></object>
<div style="padding:5px 0 12px"> </div>
</p></div>
<p><strong>Frédéric FAURE</strong> <a title="Frédéric FAURE @Twitter" href="http://twitter.com/fredericfaure">@Twitter</a> <a title="Ysance, Simplifions les projets informatiques" href="http://www.ysance.com/">@Ysance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2011/07/7-tendances-cloud-computing-en-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#171;&#160;Decrypt, Le Forum&#160;&#187; est ouvert !</title>
		<link>http://decrypt.ysance.com/2011/06/decrypt-le-forum-est-ouvert/</link>
		<comments>http://decrypt.ysance.com/2011/06/decrypt-le-forum-est-ouvert/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 11:29:25 +0000</pubDate>
		<dc:creator>Frédéric Faure</dc:creator>
				<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[CRM]]></category>
		<category><![CDATA[E-Commerce]]></category>
		<category><![CDATA[Industrialisation]]></category>
		<category><![CDATA[Forum]]></category>

		<guid isPermaLink="false">http://decrypt.ysance.com/?p=2619</guid>
		<description><![CDATA[<img class="size-medium wp-image-2631 alignright" title="Logo Decrypt, Le Forum" src="http://decrypt.ysance.com/wp-content/uploads/2011/06/sitelogo_small-300x100.png" alt="Logo Decrypt, Le Forum" width="216" height="72" />

<a title="Decrypt, Le Forum" href="http://decrypt.ysance.com/forums/">Decrypt, Le Forum</a> est ouvert ! Venez échanger avec nous et avec la communauté. Notre forum flambant neuf s'articule autour de nos domaines d'expertYse que sont le <span style="color: #ff6600;"><strong>Cloud Computing</strong></span>, l'<span style="color: #ff6600;"><strong>industrialisation des développements</strong></span>, l'<span style="color: #ff6600;"><strong>e-commerce</strong></span> et le <strong><span style="color: #ff6600;">CRM</span></strong>. Une dernière catégorie <span style="color: #ff6600;"><strong>Autour d'un café</strong></span> permet d'échanger sur divers sujets techniques. Nous pourrons <strong>répondre </strong>à vos interrogations sur ces thèmes, mais vous pourrez également <strong>partager </strong>vos retours d'expérience et <strong>présenter </strong>les nouveautés que vous avez vous-même testées si vous le souhaitez.

C'est un espace d'échange que nous souhaitons <strong>convivial </strong>et qui, nous l'espérons, vous plaira !

A bientôt donc sur <a title="Decrypt, Le Forum" href="http://decrypt.ysance.com/forums/">Decrypt, Le Forum</a> !

[...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-2631 alignright" title="Logo Decrypt, Le Forum" src="http://decrypt.ysance.com/wp-content/uploads/2011/06/sitelogo_small-300x100.png" alt="Logo Decrypt, Le Forum" width="216" height="72" /></p>
<p><a title="Decrypt, Le Forum" href="http://decrypt.ysance.com/forums/">Decrypt, Le Forum</a> est ouvert ! Venez échanger avec nous et avec la communauté. Notre forum flambant neuf s&#8217;articule autour de nos domaines d&#8217;expertYse que sont le <span style="color: #ff6600;"><strong>Cloud Computing</strong></span>, l&#8217;<span style="color: #ff6600;"><strong>industrialisation des développements</strong></span>, l&#8217;<span style="color: #ff6600;"><strong>e-commerce</strong></span> et le <strong><span style="color: #ff6600;">CRM</span></strong>. Une dernière catégorie <span style="color: #ff6600;"><strong>Autour d&#8217;un café</strong></span> permet d&#8217;échanger sur divers sujets techniques. Nous pourrons <strong>répondre </strong>à vos interrogations sur ces thèmes, mais vous pourrez également <strong>partager </strong>vos retours d&#8217;expérience et <strong>présenter </strong>les nouveautés que vous avez vous-même testées si vous le souhaitez.</p>
<p>C&#8217;est un espace d&#8217;échange que nous souhaitons <strong>convivial </strong>et qui, nous l&#8217;espérons, vous plaira !</p>
<p>A bientôt donc sur <a title="Decrypt, Le Forum" href="http://decrypt.ysance.com/forums/">Decrypt, Le Forum</a> !</p>
<p><em><strong>Frédéric FAURE</strong></em> <a title="Frédéric FAURE @Twitter" href="http://twitter.com/fredericfaure">@Twitter</a> <a title="Ysance, Simplifions les projets informatiques" href="http://www.ysance.com/">@Ysance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://decrypt.ysance.com/2011/06/decrypt-le-forum-est-ouvert/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

