<?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>Communauté Magento francophone &#187; base de données</title>
	<atom:link href="http://www.wikigento.com/tag/base-de-donnees/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.wikigento.com</link>
	<description>Optimisation de sites E-commerce, hébergment Magento</description>
	<lastBuildDate>Mon, 30 Jan 2012 16:33:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Premières réflexions sur la séparation des databases et type de requêtes</title>
		<link>http://www.wikigento.com/mysql-base-de-donnees/premieres-reflexions-sur-la-separation-des-databases-et-type-de-requetes/</link>
		<comments>http://www.wikigento.com/mysql-base-de-donnees/premieres-reflexions-sur-la-separation-des-databases-et-type-de-requetes/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 18:48:45 +0000</pubDate>
		<dc:creator>Philippe Humeau</dc:creator>
				<category><![CDATA[Mysql / Base de données]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[base de données]]></category>

		<guid isPermaLink="false">http://www.blogento.com/?p=110</guid>
		<description><![CDATA[séparation base de données, séparation des types de requêtes ]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: 10pt; font-family: Arial;">Voici un rapide schéma qui montre comment se fait notre infrastructure actuelle :</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><a rel="attachment wp-att-109" href="http://www.wikigento.com/?attachment_id=109"><img class="aligncenter size-large wp-image-109" title="archi-serveurs1" src="http://www.blogento.com/wp-content/uploads/2009/01/archi-serveurs1-906x1024.jpg" alt="archi-serveurs1" width="487" height="548" /></a><br />
</span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;"><br />
</span></p>
<p class="MsoNormal" style="text-align: justify;"><span style="font-size: 10pt; font-family: Arial;">Techniquement c&#8217;est des blades et pas des serveurs, mais pour plus de clarté, j&#8217;ai ré-éclater ca en serveurs (en plus je n’avais pas les stencils visio pour les blades à l’époque</span><span style="font-size: 10pt; font-family: Arial;">)</span></p>
<p class="MsoNormal">
<p class="MsoNormal" style="text-align: justify;"><span style="font-size: 10pt; font-family: Arial;">On a discuté avec François Ziserman ce matin de l&#8217;optimisation de ces charges qui pèsent sur l&#8217;infrastructure. Partons du principe qu&#8217;on a l&#8217;infrastructure qu&#8217;on veut, que ce n’est pas un souci de moyen. Que ferions-nous pour aller au plus vite possible en termes de réponse ?</span></p>
<p class="MsoNormal">
<p class="MsoNormal"><span style="text-decoration: underline;"><span style="font-size: 10pt; font-family: Arial;">Les soucis principaux dûs à Magento :</span></span></p>
<ul>
<li><span style="font-size: 10pt; font-family: Arial;">Les frontaux Web consomment énormément de leur temps CPU pour rendre les pages Web</span></li>
<li><span style="font-size: 10pt; font-family: Arial;">Les frontaux Web pèsent très peu sur les perfs de la DB</span></li>
<li><span style="font-size: 10pt; font-family: Arial;">Le Back Office mange énormément de CPU à la DB lors de ses requêtes et un peu sur son propre CPU</span></li>
</ul>
<p class="MsoNormal"><span style="text-decoration: underline;"><span style="font-size: 10pt; font-family: Arial;">Quelques exemples sur un serveur de production réelle :</span></span></p>
<p class="MsoNormal"><span style="text-decoration: underline;"><span style="font-size: 10pt; font-family: Arial;"><br />
</span></span></p>
<p class="MsoNormal"><a rel="attachment wp-att-105" href="http://www.wikigento.com/?attachment_id=105"><img class="aligncenter size-full wp-image-105" title="charge-cpu" src="http://www.blogento.com/wp-content/uploads/2009/01/charge-cpu.jpg" alt="charge-cpu" width="595" height="268" /></a></p>
<p class="MsoNormal" style="text-align: justify;"><span style="font-size: 10pt; font-family: Arial;">Le pic de mardi à 50% est une charge équivalente de 600 à 1000 sessions en gros, cette charge vient uniquement des serveurs Web frontaux, pour ordre d&#8217;idée deux personnes qui travaillent sur le backoffice prennent plus de CPU que ces 1000 sessions.</span></p>
<p class="MsoNormal">
<p class="MsoNormal"><a rel="attachment wp-att-107" href="http://www.wikigento.com/?attachment_id=107"><img class="aligncenter size-full wp-image-107" title="sessions" src="http://www.blogento.com/wp-content/uploads/2009/01/sessions.jpg" alt="sessions" width="597" height="227" /></a></p>
<p class="MsoNormal"><span style="text-decoration: underline;"><span style="font-size: 10pt; font-family: Arial;">Sur le serveur de backoffice, c&#8217;est le calme sur le CPU mais la RAM est très chargée :</span></span></p>
<p class="MsoNormal">
<p class="MsoNormal"><a rel="attachment wp-att-106" href="http://www.wikigento.com/?attachment_id=106"><img class="aligncenter size-full wp-image-106" title="ram" src="http://www.blogento.com/wp-content/uploads/2009/01/ram.jpg" alt="ram" width="597" height="255" /></a></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Bref bref bref, que faire alors ? <span id="more-110"></span></span></p>
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Séparer les écritures des lectures semble une bonne idée.</span></p>
<p class="MsoNormal">
<p class="MsoNormal"><span style="text-decoration: underline;"><span style="font-size: 10pt; font-family: Arial;">Si on admet que :</span></span></p>
<ul>
<li><span style="font-size: 10pt; font-family: Arial;">Les frontends font massivement de la lecture en DB et quelques petites écritures par ci par là pour les données de sessions</span></li>
<li><span style="font-size: 10pt; font-family: Arial;">Le backoffice fait beaucoup beaucoup de lectures et des écritures</span></li>
</ul>
<p class="MsoNormal">
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Comment séparer les unes des autres ? </span></p>
<p class="MsoNormal">
<p class="MsoNormal"><span style="font-size: 10pt; font-family: Arial;">Avec une base de données master en écriture pour le backoffice et une base de données slave pour les lectures, le problème c&#8217;est</span> <span style="font-size: 10pt; font-family: Arial;">que le slave ne peut pas faire d&#8217;écriture en DB (Alter, Update, Insert, Delete etc&#8230;), donc les données de sessions ne sont pas stockées <img src='http://www.wikigento.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </span></p>
<p class="MsoNormal" style="text-align: justify;">
<p class="MsoNormal" style="text-align: justify;"><span style="font-size: 10pt; font-family: Arial;">Le framework Zend (sous jacent à Magento) permet peut être de séparer les accès aux bases de données en fonction des méthodes employées. En gros, les écritures avec un Backend SQL sur une DB d&#8217;écriture et les lectures avec un backend optimisé pour les lectures, sur une autre DB en slave. On enquête, mais le souci c&#8217;est que la relation master/slave de mysql ne permet que de faire de la lecture sur le slave.</span></p>
<p class="MsoNormal" style="text-align: justify;">
<p class="MsoNormal" style="text-align: justify;"><span style="font-size: 10pt; font-family: Arial;">En cas de cluster mysql, on va avoir plus de puissance pour l&#8217;ensemble mais tout le monde tapera toujours sur l&#8217;ensemble Mysql donc du coup le BO impacte de nouveau les perfs des serveurs frontaux. C&#8217;est une solution partielle, ca permet la scalabilité mais ce n&#8217;est pas encore le cas rêvé. Il serait possible d&#8217;atténuer cet effet en mettant une priorité plus faible aux requêtes provenant du BO qu&#8217;à celle provenant du FO mais je ne sais pas encore si c&#8217;est faisable. Avoir toute la DB en RAM aussi pourrait aider aevc un RAMFS mais cela ne changera pas tout non plus.</span></p>
<p class="MsoNormal" style="text-align: justify;">
<p class="MsoNormal" style="text-align: justify;"><span style="font-size: 10pt; font-family: Arial;">La dernière solution à laquelle je pense, c&#8217;est de créer un patch de Magento qui permettrait d&#8217;effectuer les opérations de backoffice et de frontoffice de façon différentes ou sur des bases différentes. Les écritures des serveurs de frontoffices (sessions utilisateurs) seraient faites dans la base de données Mysql Master en RW (Read Write) et les lectures sur la Slave RO (Read Only) pendant que le service de backoffice tape sur la master uniquement par exemple. Ca reviendrait à faire &laquo;&nbsp;à la main&nbsp;&raquo; la solution Zend évoquée ci-dessus.</span></p>
<p class="MsoNormal" style="text-align: justify;">
<p class="MsoNormal" style="text-align: justify;"><span style="font-size: 10pt; font-family: Arial;">On peut aussi tenter du master/master dans le cluster pour voir si les perfs sont meilleures…A suivre.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.wikigento.com/mysql-base-de-donnees/premieres-reflexions-sur-la-separation-des-databases-et-type-de-requetes/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

