<?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>Archives des Varnish - Alain ARDITI&#039;s blog</title>
	<atom:link href="https://alain.arditi.fr/tag/varnish/feed/" rel="self" type="application/rss+xml" />
	<link>https://alain.arditi.fr/tag/varnish/</link>
	<description>Aide mémoire informatique</description>
	<lastBuildDate>Mon, 13 Nov 2023 09:25:57 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://alain.arditi.fr/wp-content/uploads/2020/04/cropped-ARDITI_Alain_20200326_512x512-32x32.jpg</url>
	<title>Archives des Varnish - Alain ARDITI&#039;s blog</title>
	<link>https://alain.arditi.fr/tag/varnish/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Faut-il supprimer l&#8217;en-tête X-Magento-Cache-Debug ?</title>
		<link>https://alain.arditi.fr/2023/02/24/faut-il-supprimer-len-tete-x-magento-cache-debug/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Fri, 24 Feb 2023 11:13:44 +0000</pubDate>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Varnish]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1128</guid>

					<description><![CDATA[<p>Comme la documentation Magento l’indiquait, si on était en mode production, alors on ne voyait pas le header X-Magento-Cache-Debug…. C’était vrai avant 2019 ! Maintenant ce header est renvoyé systématiquement, mais on peut revenir à la configuration de 2019 si on le souhaite !</p>
<p>L’article <a href="https://alain.arditi.fr/2023/02/24/faut-il-supprimer-len-tete-x-magento-cache-debug/">Faut-il supprimer l&rsquo;en-tête X-Magento-Cache-Debug ?</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Comme la documentation Magento l&rsquo;indiquait, si on était en mode production, alors on ne voyait pas le header X-Magento-Cache-Debug&#8230;.</p>



<p>C&rsquo;était vrai avant 2019, le code du fichier varnish6.vcl était le suivant :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">sub vcl_deliver {
    if (resp.http.X-Magento-Debug) {
        if (resp.http.x-varnish ~ " ") {
            set resp.http.X-Magento-Cache-Debug = "HIT";
            set resp.http.Grace = req.http.grace;
        } else {
            set resp.http.X-Magento-Cache-Debug = "MISS";
        }
    } else {
...</pre></div>



<p>Depuis, la configuration Varnish fournie par Magento2 est la suivante :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">sub vcl_deliver {
    if (resp.http.x-varnish ~ " ") {
        set resp.http.X-Magento-Cache-Debug = "HIT";
        set resp.http.Grace = req.http.grace;
    } else {
        set resp.http.X-Magento-Cache-Debug = "MISS";
    }
...</pre></div>



<p>Bref, on reçoit le header X-Magento-Cache-Debug même quand le Magento est en mode production.</p>



<h2 class="wp-block-heading">Est-ce que c&rsquo;est gênant ?</h2>



<p>Certains sites importants laissent l&rsquo;information, d&rsquo;autres non. On peut imaginer que cette information peut faciliter les dénis de service.</p>



<p>Dans tous les cas, il suffit de remettre la condition de l&rsquo;ancienne version pour supprimer l&rsquo;information&#8230; </p>
<p>L’article <a href="https://alain.arditi.fr/2023/02/24/faut-il-supprimer-len-tete-x-magento-cache-debug/">Faut-il supprimer l&rsquo;en-tête X-Magento-Cache-Debug ?</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Forcer le rafraichissement du cache Varnish avec Ctrl+F5 !</title>
		<link>https://alain.arditi.fr/2023/02/22/forcer-le-rafraichissement-du-cache-varnish-avec-ctrlf5/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Wed, 22 Feb 2023 15:42:16 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Varnish]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1122</guid>

					<description><![CDATA[<p>La plupart des outils de gestion de sites Internet, comme les CMS ou les solutions d’e-commerce peuvent intégrer dans leur architecture logicielle le composant Varnish pour cacher des pages ou des éléments de pages Web. La gestion du cache Varnish est alors intégrée à l’outil. C’est à dire que l’outil va générer un en-tête du&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2023/02/22/forcer-le-rafraichissement-du-cache-varnish-avec-ctrlf5/">Poursuivre la lecture <span class="screen-reader-text">Forcer le rafraichissement du cache Varnish avec Ctrl+F5 !</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2023/02/22/forcer-le-rafraichissement-du-cache-varnish-avec-ctrlf5/">Forcer le rafraichissement du cache Varnish avec Ctrl+F5 !</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>La plupart des outils de gestion de sites Internet, comme les CMS ou les solutions d’e-commerce peuvent intégrer dans leur architecture logicielle le composant <a href="https://varnish-cache.org/" target="_blank" rel="noreferrer noopener nofollow">Varnish</a> pour cacher des pages ou des éléments de pages Web.</p>



<p>La gestion du cache Varnish est alors intégrée à l’outil. C’est à dire que l’outil va générer un en-tête du type TTL (expires ou autre) qui va permettre à Varnish d’appliquer la politique de cache de l’outil. Quand les éléments de sites contiennent des hash dans les URLs, généralement les TTL sont très grands (une année, voire plus). A chaque nouvelle version de cet élément l’outil va modifier le hash, et les utilisateurs pourront ainsi récupérer la nouvelle version sans qu’il n’y ait eu de purge de l’ancienne, puisque l’élément a un nouveau nom&nbsp;!</p>



<p>Dans le cas où les éléments ne changent pas de nom, la home page par exemple, ou des pages Web avec des permaliens, c’est l’outil qui va envoyer une requête de purge à Varnish (généralement une requête HTTP de type PURGE), qui va ainsi rafraîchir son cache et envoyer la nouvelle version.</p>



<p>Ces technologies sont relativement bien rodées sauf dans quelques cas où une extension ne gère pas le cache Varnish ou bien quand on insère dans blocs dans une page ou qu’on fait de l’ESI par exemple.</p>



<p>Dans ces cas, on peut toujours rafraîchir le cache Varnish en ligne de commande avec l’outil d’administration varnishadm ou bien en forgeant une requête de type PURGE, mais ces techniques dépassent souvent les permissions accordés aux webmestres ou leur compétences.</p>



<p>Il reste une solution assez simple d&rsquo;utilisation, c’est de déclencher une purge Varnish quand l’utilisateur demande une version de la page qui ne provient pas du cache, c’est à dire avec le header HTTP « Cache-Control: no-cache »</p>



<p>C&rsquo;est le header envoyé par les navigateurs quand on demande le rafraîchissement d&rsquo;une page. Selon les OS et les navigateurs, le rafraîchissement s&rsquo;obtient par les raccourcis claviers suivants :</p>



<ul class="tw-mt-0 tw-mb-0 wp-block-list">
<li>Windows: <code>Ctrl</code> + <code>F5</code></li>



<li>Mac: <code>Command</code> + <code>Shift</code> + <code>R</code></li>



<li>Linux: <code>Ctrl</code> + <code>Shift</code> + <code>R</code></li>
</ul>



<p></p>



<p>Dans le livre <a href="https://info.varnish-software.com/resources/varnish-6-by-example-book" target="_blank" rel="noreferrer noopener nofollow">Varnish 6 by example</a>, il est écrit&nbsp;:<br>« How Varnish deals with Cache-Control<br>First things first: Varnish doesn’t respect the Cache-Control as a request header, only as a response header. »</p>



<p>Effectivement l&rsquo;objectif de Varnish ce n&rsquo;est pas que les utilisateurs contournent le cache et le vide sans arrêt. L&rsquo;idée de la mise en place du rafraîchissement par un navigateur, c&rsquo;est de filtrer les IP qui ont le droit de de procéder au rafraîchissement.</p>



<p>On trouve des articles des années 2010 sur Internet qui indiquent comment faire et qui proposent des élément de configuration des fichiers VCL de Varnish datant de Varnish 3 ou 4&nbsp;:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">acl CTRLF5 {
   "127.0.0.1";
}

sub vcl_hit {

  if (client.ip ~ CTRLF5) {
    if (req.http.pragma ~ "no-cache" || req.http.Cache-Control ~ "no-cache")
    {
      set obj.ttl = 0s;
      return(pass);
    }
    else { return(deliver); }
  }
  else { return(deliver); }
}</pre></div>



<p>Bref, quand on travaille sur Varnish 6 avec des CDN ou des proxy SSL type Nginx, on ne risque pas de faire fonctionner le rafraîchissement avec le code ci-dessus !</p>



<p>La configuration actualisée pour Varnish 6 serait du type&nbsp;:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># VCL version 5.0 is not supported so it should be 4.0 even though actually used Varnish version is 6
vcl 4.0;
import std;
...

# Declaration des IP autorisées à purger les pages
purge {
  "localhost";
  "127.0.0.1";
  "::1";
  "78.201.202.159"; # IP de ma maison
  "90.63.253.70";   # toHero (Orange)
  "212.114.18.211"; # toHero (Free)
}
...

sub vcl_hit {
    # Comme on est derrière Nginx, client.ip est l'IP du proxy pour tous les clients !!!
    # Si on se basait sur client.ip, il n'y aurait aucun filtrage...
    # On utilise X-Real-IP, sauf si la requête provient de localhost
    if ((req.http.X-Real-IP) &amp;&amp; (std.ip(req.http.X-Real-IP) ~ purge) ||
            client.ip ~ purge) {
        if (req.http.pragma ~ "no-cache" || req.http.Cache-Control ~ "no-cache")
        {
          ban("obj.http.X-Req-URL ~ " + req.url);
          return (restart);
        }
    }
...</pre></div>



<p>Une fois cette configuration installée, on peut procéder à quelques tests !</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">aa2@apollo:~$ curl -s -k -D - -o /dev/null "https://alain.arditi.fr/"
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 22 Feb 2023 14:51:19 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Last-Modified: Sun, 06 Nov 2022 21:39:44 GMT
Vary: Accept-Encoding
Age: 24
X-Cache: HIT
Accept-Ranges: bytes

aa2@apollo:~$

# On force le rafraichissement
aa2@apollo:~$ curl -s -k -H "Cache-control: no-cache" -D - -o /dev/null "https://alain.arditi.fr/"
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 22 Feb 2023 14:51:25 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Last-Modified: Sun, 06 Nov 2022 21:39:44 GMT
Vary: Accept-Encoding
Age: 0
X-Cache: MISS
Accept-Ranges: bytes

aa2@apollo:~$
aa2@apollo:~$ curl -s -k -D - -o /dev/null "https://alain.arditi.fr/"
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 22 Feb 2023 15:33:08 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 31761
Connection: keep-alive
Last-Modified: Sun, 06 Nov 2022 21:39:44 GMT
Vary: Accept-Encoding
Age: 14
X-Cache: HIT
Accept-Ranges: bytes

aa2@apollo:~$ 

# Test depuis une IP qui n'est pas dans l'access list "purge" :
arditi-host3:~# curl -s -k -H "Cache-control: no-cache" -D - -o /dev/null "https://alain.arditi.fr/"
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 22 Feb 2023 15:35:23 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 31761
Connection: keep-alive
Last-Modified: Sun, 06 Nov 2022 21:39:44 GMT
Vary: Accept-Encoding
Age: 149
X-Cache: HIT
Accept-Ranges: bytes

arditi-host3:~#</pre></div>



<p>…..</p>
<p>L’article <a href="https://alain.arditi.fr/2023/02/22/forcer-le-rafraichissement-du-cache-varnish-avec-ctrlf5/">Forcer le rafraichissement du cache Varnish avec Ctrl+F5 !</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Munin : le plugin Varnish sous Debian Buster</title>
		<link>https://alain.arditi.fr/2021/03/08/munin-le-plugin-varnish-sous-debian-buster/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Mon, 08 Mar 2021 22:15:54 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Munin]]></category>
		<category><![CDATA[Varnish]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1031</guid>

					<description><![CDATA[<p>Comment faire fonctionner le plugin Varnish de Munin sous Debian Buster</p>
<p>L’article <a href="https://alain.arditi.fr/2021/03/08/munin-le-plugin-varnish-sous-debian-buster/">Munin : le plugin Varnish sous Debian Buster</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Munin est un outil bien pratique pour les tests de charge. Il est packagé par Debian dans sa version 2.0.49 avec des plugins pour quasiment tous les services. Ca tombe bien pour évaluer le comportement de Varnish, puisqu&rsquo;on a un plugin Varnish présent dans le répertoire des plugins : <code>/usr/share/munin/plugins/varnish_</code></p>



<p>Pour l&rsquo;installer, rien de plus simple, il suffit de faire un lien symbolique sur un des « aspects » disponibles pour ce plugin, qu&rsquo;on obtient par la commande :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">aa2:~# munin-run varnish_transfer_rates suggest
memory_usage
request_rate
backend_traffic
transfer_rates
threads
bad
uptime
expunge
objects
hit_rate
aa2:~#</pre></div>



<p> Mais avant de pouvoir lancer cette commande pour connaître les « aspects » de ce plugin, il fallait déjà faire un lien symbolique, donc lire le contenu du plugin ! La on choisit l&rsquo;aspect « transfer_rates ». Pour installer le plugin qui va fournir les « transfer_rates » de Varnish, il faut faire le lien suivant :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">aa2:~# ln -s /usr/share/munin/plugins/varnish_ /etc/munin/plugins/varnish_transfer_rates
aa2:~#</pre></div>



<p>A cette étape, la configuration est prête pour tester le plugin. On lance la commande suivante pour vérifier les valeurs que renvoie le plugin :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">aa2:~# munin-run varnish_transfer_rates 
.....
Could not get hold of varnishd, is it running?

no element found at line 1, column 0, byte 0 at /usr/lib/x86_64-linux-gnu/perl5/5.28/XML/Parser.pm line 187.
aa2:~#</pre></div>



<p>Pas de réponse, on attend les &#8230;.. puis on obtient une erreur ! Cette erreur provient de varnishstat. Quand on lance varnishstat pourtant tout fonctionne :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">aa2:~# varnishstat  -x
&lt;?xml version="1.0"?&gt;
&lt;varnishstat timestamp="2021-03-08T22:33:50"&gt;
	&lt;stat&gt;
		&lt;name&gt;MGT.uptime&lt;/name&gt;
		&lt;value&gt;520285&lt;/value&gt;
		&lt;flag&gt;c&lt;/flag&gt;
		&lt;format&gt;d&lt;/format&gt;
		&lt;description&gt;Management process uptime&lt;/description&gt;
	&lt;/stat&gt;
	&lt;stat&gt;
		&lt;name&gt;MGT.child_start&lt;/name&gt;
		&lt;value&gt;1&lt;/value&gt;
		&lt;flag&gt;c&lt;/flag&gt;
		&lt;format&gt;i&lt;/format&gt;
		&lt;description&gt;Child process started&lt;/description&gt;
	&lt;/stat&gt;
...
...
&lt;/varnishstat&gt;
aa2:~#</pre></div>



<p>Alors que se passe-t-il ? On essaie avec les options de débug :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">aa2:~# munin-run --debug --pidebug varnish_transfer_rates 
# Processing plugin configuration from /etc/munin/plugin-conf.d/README
# Processing plugin configuration from /etc/munin/plugin-conf.d/dhcpd3
# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
# Processing plugin configuration from /etc/munin/plugin-conf.d/spamstats
# Processing plugin configuration from /etc/munin/plugin-conf.d/varnish4_
# Processing plugin configuration from /etc/munin/plugin-conf.d/varnish5_
# Processing plugin configuration from /etc/munin/plugin-conf.d/varnish_
# Setting /rgid/ruid/ to /113/65534/
# Setting /egid/euid/ to /113 113/65534/
# Setting up environment
# About to run '/etc/munin/plugins/varnish_transfer_rates'
.....
Could not get hold of varnishd, is it running?

no element found at line 1, column 0, byte 0 at /usr/lib/x86_64-linux-gnu/perl5/5.28/XML/Parser.pm line 187.
aa2:~#</pre></div>



<p>Toujours la même erreur. En y regardant de plus près on s&rsquo;aperçoit que le plugin est lancé avec l&rsquo;euid 113 qui est l&rsquo;id de l&rsquo;utilisateur munin sur ma machine. Mais comme le process Varnish tourne sous l&rsquo;utilisateur vcache, le plugin ne peut pas contacter Varnish, d&rsquo;où l&rsquo;erreur. La méthode pour corriger ce problème est de lancer le plugin Varnish avec l&rsquo;utilisateur « vcache ». Pour ceci, on crée un fichier de configuration du plugin qui indique d&rsquo;utiliser « vcache » :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">aa2:~# cat /etc/munin/plugin-conf.d/varnish_ 
[varnish_*]
    user vcache
aa2:~# 
aa2:~# munin-run varnish_transfer_rates 
aa2:~# 
aa2:~# munin-run --debug --pidebug varnish_transfer_rates 
# Processing plugin configuration from /etc/munin/plugin-conf.d/README
# Processing plugin configuration from /etc/munin/plugin-conf.d/dhcpd3
# Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
# Processing plugin configuration from /etc/munin/plugin-conf.d/spamstats
# Processing plugin configuration from /etc/munin/plugin-conf.d/varnish4_
# Processing plugin configuration from /etc/munin/plugin-conf.d/varnish5_
# Processing plugin configuration from /etc/munin/plugin-conf.d/varnish_
# Setting /rgid/ruid/ to /113/109/
# Setting /egid/euid/ to /113 113/109/
# Setting up environment
# About to run '/etc/munin/plugins/varnish_transfer_rates'
aa2:~#</pre></div>



<p>Le plugin fonctionne, mais ne renvoie rien !!!<br>On tombe sur le bug : <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=959812" target="_blank" rel="noreferrer noopener nofollow">https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=959812</a></p>



<p>En cherchant les plugins Varnish pour Munin, on trouve beaucoup de choses. Qui vont de Varnish 2 à Varnish 5. Mais sous Buster, on est en Varnish 6. Tous les plugins Varnish ont la même source, la version de 2009. Mais on ne sait pas exactement avec quelle version de Varnish ils fonctionnent. J&rsquo;en ai essayé 3 différents, et sans aucun doute, le bon est celui-ci : <a href="https://gallery.munin-monitoring.org/plugins/munin-contrib/varnish5_/" target="_blank" rel="noreferrer noopener">https://gallery.munin-monitoring.org/plugins/munin-contrib/varnish5_/</a></p>



<p>Il faut récupérer le source, faire le lien dans le répertoire des plugins et mettre l&rsquo;utilisateur « vcache » ou « root » dans la configuration. Là, j&rsquo;ai utilisé le hit_rate comme « aspect » :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">aa2:~# ln -s /usr/share/munin/plugins/varnish5_ /etc/munin/plugins/varnish5_hit_rate
aa2:~#
aa2:~# cat /etc/munin/plugin-conf.d/varnish5_ 
[varnish5_*]
    user vcache
aa2:~#
aa2:~# munin-run varnish5_hit_rate 
client_req.value 2955
cache_hitpass.value 0
cache_hitmiss.value 12
cache_hit.value 2228
cache_miss.value 715
aa2:~#</pre></div>



<p>On a bien un résultat cette fois !<br>Remarque, le client_req est calculé comme la somme des 4 valeurs cache_*. Alors que la commande varnishstat renvoie un client_req de 9585 ! Cette dernière valeur représente toutes les requêtes reçues par Varnish, y compris les « pass ». Donc avec le plugin « varnish5_ » on n&rsquo;a que les requêtes qui sont sensées être en cache. Ce qui est logique pour un calcul de hit ratio, mais qui ne montre pas la totalité des requêtes reçues. </p>



<figure class="wp-block-image size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/image-26.png"><img fetchpriority="high" decoding="async" width="909" height="834" src="https://alain.arditi.fr/wp-content/uploads/2021/03/image-26.png" alt="" class="wp-image-1034" srcset="https://alain.arditi.fr/wp-content/uploads/2021/03/image-26.png 909w, https://alain.arditi.fr/wp-content/uploads/2021/03/image-26-300x275.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/03/image-26-768x705.png 768w" sizes="(min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Varnish hit rate ratio</figcaption></figure>



<p>On retrouve ci-dessus un hit ratio dont la somme des 4 composantes fait 100.</p>



<hr class="wp-block-separator"/>



<p>Références :<br><a href="http://munin-monitoring.org/" target="_blank" rel="noreferrer noopener nofollow">Munin</a><br><a href="https://packages.debian.org/buster/munin" target="_blank" rel="noreferrer noopener nofollow">Paquet Munin pour Debian Buster</a></p>
<p>L’article <a href="https://alain.arditi.fr/2021/03/08/munin-le-plugin-varnish-sous-debian-buster/">Munin : le plugin Varnish sous Debian Buster</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress : Plugin de cache ou Varnish ?</title>
		<link>https://alain.arditi.fr/2021/03/07/wordpress-plugin-de-cache-ou-varnish/</link>
					<comments>https://alain.arditi.fr/2021/03/07/wordpress-plugin-de-cache-ou-varnish/#comments</comments>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Sun, 07 Mar 2021 21:58:03 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Tests de charge]]></category>
		<category><![CDATA[Varnish]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=994</guid>

					<description><![CDATA[<p>A la question : Faut-il un plugin de cache ou Varnish ? la réponse est : les 2 !</p>
<p>L’article <a href="https://alain.arditi.fr/2021/03/07/wordpress-plugin-de-cache-ou-varnish/">WordPress : Plugin de cache ou Varnish ?</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>On a vu dans une série d&rsquo;article précédents l&rsquo;apport de Varnish sur un site qui avait déjà un plugin de cache : <a href="https://alain.arditi.fr/2021/02/16/booster-son-wordpress-avec-varnish/">Booster son WordPress avec Varnish</a></p>



<p>L&rsquo;apport de Varnish est important, par contre, on ne voit pas ce qu&rsquo;apporte le plugin de cache WordPress. Effectivement, sur les pages statiques lorsque Varnish est installé, WordPress ne travaille plus. On verra néanmoins l&rsquo;intérêt du plugin en conclusion.</p>



<p>J&rsquo;ai utilisé le plugin WordPress de cache <a href="https://wordpress.org/plugins/wp-fastest-cache/" target="_blank" rel="noreferrer noopener">WP Fastest Cache</a> pour faire les tests, mais globalement tous les plugins de cache WordPress travaillent de la même manière. Ils créent la page sur le disque et WordPress, ou plutôt le serveur Web, Apache ou Nginx, renvoie directement la page depuis le disque. Il ne devrait pas y avoir beaucoup de différence entre les différents plugins de cache pour WordPress. Donc celui-ci ou un autre, ce n&rsquo;est pas la question dans cet article.</p>



<p>l&rsquo;infrastructure cible est une petite VM avec 1 vcpu et 500Mo de RAM sur VirtualBox de mon MacBook Air 2017. L&rsquo;injecteur JMeter est sur une autre VM de ma machine, les latences sont donc très faibles par rapports aux latences sur Internet.</p>



<p>On va tester un scénario de 7 pages statiques :</p>



<figure class="wp-block-table"><table><tbody><tr><td>1- /</td><td>La « Home page » pour démarrer. <br>Là, on initie une connexion HTTPS.</td></tr><tr><td>2 &#8211; /category/uncategorized/</td><td>Liste des articles sans catégorie.<br>Les 3 articles ci dessous !</td></tr><tr><td>3 &#8211; /2021/02/05/test-article/</td><td>Article qui pèse 4ko</td></tr><tr><td>4 &#8211; /2021/02/05/test-article-27/</td><td>Article qui pèse 4ko</td></tr><tr><td>5 &#8211; /2021/02/01/nouvel-article/</td><td>Article qui pèse 10Ko</td></tr><tr><td>6 &#8211; /author/aa2-1/</td><td>Liste des articles publiés par l&rsquo;auteur aa2</td></tr><tr><td>7 &#8211; /author/aa2-1/</td><td>idem</td></tr></tbody></table><figcaption>Scénario de test</figcaption></figure>



<p>Sur 3 configurations différentes </p>



<ol class="wp-block-list"><li>WordPress avec Varnish</li><li>WordPress sans Varnish et sans plugin</li><li>WordPress sans Varnish et avec le plugin WP Fastest Cache</li></ol>



<p>JMeter est configuré pour lancer 30 threads. Il passe de 1 à 30 en 5 minutes et reste 2 minutes à 30 threads, sans aucun délai entre les threads. Ce n&rsquo;est pas très réaliste, c&rsquo;est juste un test technique. On verra d&rsquo;ailleurs dans l&rsquo;analyse que le serveur est saturé bien avant d&rsquo;arriver au plateau des 30 threads dans les 3 cas.</p>



<figure class="wp-block-image size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/flotActiveThreadsOverTime.png"><img decoding="async" width="895" height="400" src="https://alain.arditi.fr/wp-content/uploads/2021/03/flotActiveThreadsOverTime.png" alt="" class="wp-image-996" srcset="https://alain.arditi.fr/wp-content/uploads/2021/03/flotActiveThreadsOverTime.png 895w, https://alain.arditi.fr/wp-content/uploads/2021/03/flotActiveThreadsOverTime-300x134.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/03/flotActiveThreadsOverTime-768x343.png 768w" sizes="(min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de threads en fonction du temps pendant les 7 minutes du test</figcaption></figure>



<p> </p>



<h3 class="wp-block-heading">WordPress avec Varnish</h3>



<p>On retrouve les performances qu&rsquo;on avait déjà vues dans l&rsquo;article <a href="https://alain.arditi.fr/2021/02/12/booster-son-wordpress-avec-varnish-4-4/">Booster son WordPress avec Varnish 5/4</a>. Dans cette configuration, on arrive à produire plus de 30Mbps de flux depuis le serveur.</p>



<p>La connexion initiale lors de l&rsquo;accès à la « Home page » prend du temps. C&rsquo;est le temps de la création de la communication TCP/IP et la mise en place du SSL avec le serveur Nginx. Et au début de chaque threads, il y a une reconnection afin de simuler la réalité.</p>



<figure class="wp-block-image size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/flotLatenciesOverTime-1.png"><img decoding="async" width="895" height="400" src="https://alain.arditi.fr/wp-content/uploads/2021/03/flotLatenciesOverTime-1.png" alt="" class="wp-image-997" srcset="https://alain.arditi.fr/wp-content/uploads/2021/03/flotLatenciesOverTime-1.png 895w, https://alain.arditi.fr/wp-content/uploads/2021/03/flotLatenciesOverTime-1-300x134.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/03/flotLatenciesOverTime-1-768x343.png 768w" sizes="(min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Graphe de latence</figcaption></figure>



<p>La latence ci-dessus est l&rsquo;équivalent du Time To First Byte (TTFB). On voit que les latences sont exceptionnelles basses sauf pour la « Home page » en violet. Quelque soit la page, Varnish la sort de la mémoire sans aucun traitement. Il n&rsquo;y a donc aucune différence entre les pages.</p>



<p>On va plutôt étudier les temps de réponse qui sont plus démonstratifs, sur les autres configurations.</p>



<figure class="wp-block-image size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-1.png"><img loading="lazy" decoding="async" width="895" height="400" src="https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-1.png" alt="" class="wp-image-999" srcset="https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-1.png 895w, https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-1-300x134.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-1-768x343.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Temps de réponse avec Varnish</figcaption></figure>



<p>Ici, on voit que les temps de réponse sont très similaires au TTFB, puisqu&rsquo;ensuite, s&rsquo;ajoute le temps de transfert de la page à l&rsquo;intérieur du MacBook !</p>



<h3 class="wp-block-heading">WordPress sans Varnish sans plugin de cache</h3>



<p>Par contre, avec la deuxième configuration, sans Varnish et sans plugin, les temps de réponse sont nettement plus élevés</p>



<figure class="wp-block-image size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-2-1-1024x476.png"><img loading="lazy" decoding="async" width="1024" height="476" src="https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-2-1-1024x476.png" alt="" class="wp-image-1001" srcset="https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-2-1-1024x476.png 1024w, https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-2-1-300x139.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-2-1-768x357.png 768w, https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-2-1.png 1026w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-1.png"></a>Temps de réponse sans Varnish sans plugin</figcaption></figure>



<p>L&rsquo;échelle du graphe est 4 fois plus grande, on atteint la seconde. Et on note une différence entre les pages, cette fois-ci. La « Home » est en violet, mais dépassée par les catégories. En troisième c&rsquo;est la page « 5 &#8211; /2021/02/01/nouvel-article/ » qui est plus lourde que les autres, car elle a plus de contenu. Le temps de réponse est quasiment le même pour les autres pages.</p>



<h3 class="wp-block-heading">WordPress sans Varnish avec plugin de cache</h3>



<p>Avec la troisième configuration, sans Varnish mais avec le plugin WP Fastest Cache, les temps de réponse sont meilleurs que ceux de la configuration précédente :</p>



<figure class="wp-block-image size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-3-1.png"><img loading="lazy" decoding="async" width="895" height="424" src="https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-3-1.png" alt="" class="wp-image-1005" srcset="https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-3-1.png 895w, https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-3-1-300x142.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/03/flotResponseTimesOverTime-3-1-768x364.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Temps de réponse sans Varnish mais avec plugin</figcaption></figure>



<p>L&rsquo;échelle du graphique est divisé par 3 par rapport au précédent, on atteint les 350 ms.</p>



<p>Maintenant qu&rsquo;on a vu le détail des pages et les temps de réponse, on va pouvoir comparer les graphes de consommation de ressources du serveur.<br>Dans les graphes qui suivent, les 3 périodes correspondent aux 3 configurations dans l&rsquo;ordre suivant :</p>



<ol class="wp-block-list" id="block-c54e3c86-071b-468c-a495-582fbe0f7c87"><li>WordPress avec Varnish</li><li>WordPress sans Varnish et sans plugin</li><li>WordPress sans Varnish et avec le plugin WP Fastest Cache</li></ol>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/cpu.png"><img loading="lazy" decoding="async" width="254" height="596" src="https://alain.arditi.fr/wp-content/uploads/2021/03/cpu.png" alt="" class="wp-image-1007" srcset="https://alain.arditi.fr/wp-content/uploads/2021/03/cpu.png 254w, https://alain.arditi.fr/wp-content/uploads/2021/03/cpu-128x300.png 128w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Consommation de CPU</figcaption></figure></div>



<p>La première période, celle « Avec Varnish » montre que la CPU est tout de même tout utilisée. <br>C&rsquo;est l&rsquo;effet HTTPS ! Toute la CPU est utilisée par Nginx pour la terminaison SSL. C&rsquo;est à se demander si on ne ferait pas mieux d&rsquo;abandonner le SSL pour les sites statiques afin diminuer la consommation énergétique du numérique !</p>



<p>Pour les deuxièmes et troisièmes périodes, on atteint les 100% d&rsquo;utilisation de la CPU. Dans ces 2 cas, on constate une contention de la CPU. Dans le premier cas, sans Varnish sans plugin, les 100% de CPU sont atteints de suite. Dans le cas sans Varnish mais avec plugin, les 100% sont atteints dans les 3 minutes. On note plus d&rsquo;activité système dans ce dernier cas. En effet, on va le confirmer sur les débits, avec le plugin de cache, le débit est beaucoup plus élevé, donc les entrées/sorties sont plus sollicitées.</p>



<p></p>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/if_enp0s3.png"><img loading="lazy" decoding="async" width="259" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/03/if_enp0s3.png" alt="" class="wp-image-1008" srcset="https://alain.arditi.fr/wp-content/uploads/2021/03/if_enp0s3.png 259w, https://alain.arditi.fr/wp-content/uploads/2021/03/if_enp0s3-155x300.png 155w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Débit en Mbps</figcaption></figure></div>



<p>On voit clairement avec ce graphe de débit, la capacité à fournir des pages lorsque Varnish fonctionne. La contention se situe au niveau du réseau avec Varnish. A 36Mbps, on est au maximum de ce que la VM peut produire. Pour les 2 autres configurations les débits sont beaucoup plus faibles, la contention se situe bien au niveau de la CPU.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/load.png"><img loading="lazy" decoding="async" width="287" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/03/load.png" alt="" class="wp-image-1009" srcset="https://alain.arditi.fr/wp-content/uploads/2021/03/load.png 287w, https://alain.arditi.fr/wp-content/uploads/2021/03/load-172x300.png 172w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Load average</figcaption></figure></div>



<p>Le graphe du Load average est l&rsquo;inverse de celui du débit ! On confirme la contention au niveau de la CPU.</p>



<p>Regardons les 2 graphes MySQL</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/mysql_queries.png"><img loading="lazy" decoding="async" width="251" height="572" src="https://alain.arditi.fr/wp-content/uploads/2021/03/mysql_queries.png" alt="" class="wp-image-1011" srcset="https://alain.arditi.fr/wp-content/uploads/2021/03/mysql_queries.png 251w, https://alain.arditi.fr/wp-content/uploads/2021/03/mysql_queries-132x300.png 132w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de requêtes MySQL</figcaption></figure></div>



<p>Là aussi, on confirme les données précédentes. Avec Varnish, il n&rsquo;y a pas de requêtes. Toutes les pages sont en RAM. Sans Varnish, WordPress récupère une partie de ses données depuis MySQL. Sans plugin, le site fait deux fois plus de requêtes.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/03/mysql_bytes.png"><img loading="lazy" decoding="async" width="232" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/03/mysql_bytes.png" alt="" class="wp-image-1012" srcset="https://alain.arditi.fr/wp-content/uploads/2021/03/mysql_bytes.png 232w, https://alain.arditi.fr/wp-content/uploads/2021/03/mysql_bytes-139x300.png 139w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Débit MySQL en Mbps</figcaption></figure></div>



<p>Avec le plugin de cache WordPress, le site fournit presque trois fois plus de pages, c&rsquo;est pour cette raison qu&rsquo;il y a plus de données extraites du MySQL et avec moins de requêtes. On suppose que les traitements sont optimisés pour extraire le maximum de données en un minimum de requêtes.</p>



<p>Le bilan en nombre de pages pour les 3 configurations avec le même scénario qui dure 7 minutes est le suivant :</p>



<ol class="wp-block-list" id="block-4df110cc-b43e-455f-9f65-3e19a581ca38"><li>WordPress avec Varnish : <br>190 000 pages <br>débit max de 500 pages/s</li><li>WordPress sans Varnish et sans plugin : <br>18 000 pages<br>débit max de 46 pages/s</li><li>WordPress sans Varnish et avec le plugin WP Fastest Cache : <br>56 000 pages<br>débit max de 150 pages/s</li></ol>



<p>Même si les graphes ne sont pas toujours parlants, ce bilan permet de remettre les résultats en perpective :</p>



<p>Avec Varnish le site WordPress produit 3 fois plus de pages (indépendamment du plugin de cache), que lorsque WordPress est configuré avec un plugin de cache.<br>Avec le plugin de cache le site produit 3 fois plus de pages que lorsque WordPress n&rsquo;a pas de plugin.<br>Il faut quand même noter qu&rsquo;il y a une saturation réseau avec Varnish et que sans SSL on pourrait améliorer les performances d&rsquo;un facteur au moins 2 !</p>



<p>Le bilan est clair. Les plugins de cache apportent une performance significative à WordPress. Il ne faut donc pas s&rsquo;en priver puisqu&rsquo;ils s&rsquo;installent de manière quasiment automatique. C&rsquo;est une optimisation facile à mettre en place chez les hébergeurs qui fournissent du WordPress clé en main. Pour passer à la vitesse supérieur, il faut ajouter Varnish.</p>



<p>Alors pourquoi ne pas installer Varnish et c&rsquo;est tout !</p>



<p>Parce que les plugins de cache optimisent l&rsquo;expérience utilisateur ! Nous n&rsquo;avons pas regardé ce qui se passe lorsqu&rsquo;on charge une page du point de vue utilisateur. Mais les optimisations comme la minification des CSS, du JavaScript ou l&rsquo;allègement des images sont essentielles pour le ressenti utilisateur ! Et c&rsquo;est un critère de poids pour les outils d&rsquo;analyse de sites.</p>



<p>Lors des tests de charges, nous n&rsquo;étudions pas ces aspects. Le bilan est clair, il faut Varnish ET un plugin de cache si on veut améliorer les performances de WordPress sous tous les aspects.</p>



<p>Donc à la question : WordPress : Plugin de cache ou Varnish ?<br>Je réponds : les 2 mon capitaine !</p>



<p>La dernière optimisation pour les performances c&rsquo;est l&rsquo;addition d&rsquo;un CDN. Le problème c&rsquo;est qu&rsquo;ils sont, soit payants, soit nécessitent de laisser la gestion du domaine, comme CloudFlare. Mais c&rsquo;est un « must have » pour les sites à forte audience internationale.</p>



<hr class="wp-block-separator"/>



<h3 class="wp-block-heading">Petite réflexion sur les tests menés ci-dessus. </h3>



<p>Dans les 3 configurations, on atteint les limites de la VM bien avant le plateau des 30 threads. On pourrait dire, il valait mieux aller à 20 threads ou moins selon la configuration, pour voir les graphes monter en fonction de la charge sans aller jusqu&rsquo;à la saturation. Alors effectivement, dans ce cas les graphes auraient été plus lisibles.</p>



<p>Mais en fait, tant que les scénarios ne font pas d&rsquo;erreur, et là, pour nos 3 scénarios, on a 0% d&rsquo;erreur, on peut ajouter de la charge et saturer le système, ce n&rsquo;est pas très grave. On atteint les limites plus vite. Et comme on cherche à comparer les limites des 3 configurations autant y aller !</p>



<p>Alors que se passe-t-il lorsqu&rsquo;on atteint une contention et que WordPress continue à répondre sans erreur ?</p>



<p>Et bien, il répond plus lentement ! C&rsquo;est comme un bouchon d&rsquo;automobilistes sur la route. On passe toujours le même nombre de voiture par tronçon, mais plus lentement. C&rsquo;est la raison de l&rsquo;augmentation des temps de réponse. Plus on ajoute de threads, plus les temps de réponses augmentent, le débit restant à peu près inchangé pendant tout le restant du test. <br>Le critère à retenir, c&rsquo;est vraiment <strong>le débit du site, ou le nombre de pages par seconde</strong>. On voit très bien pendant les tests de charge que cette valeur va se figer dès qu&rsquo;on atteint un certain nombre de threads, qu&rsquo;on mette des timers, qu&rsquo;on simule les utilisateurs ou pas, ce nombre ne varie pas. Ce nombre est la limite de l&rsquo;infrastructure.</p>



<p>Si on ajoute des threads, les pages arrivent plus lentement, car il y une contention, c&rsquo;est le phénomène « bouchon ». Si on continue à ajouter des threads, passé une autre limite on commence à voir des erreurs. A partir de ce point là, le test n&rsquo;est plus pertinent. </p>



<p>Les erreurs sont donc un point à surveiller lors des tests avec JMeter, et les <a href="https://alain.arditi.fr/2021/03/01/les-tests-de-charge-avec-jmeter-les-assertions/">assertions</a> sont la réponse à cette exigence !</p>



<hr class="wp-block-separator"/>



<p>Références :<br><a href="https://wordpress.org/" target="_blank" rel="noreferrer noopener">WordPress</a><br><a href="https://jmeter.apache.org/" target="_blank" rel="noreferrer noopener">JMeter</a><br><a href="https://varnish-cache.org/" target="_blank" rel="noreferrer noopener">Varnish</a><br><a href="https://wordpress.org/plugins/wp-fastest-cache/" target="_blank" rel="noreferrer noopener">WP Fastest Cache</a></p>



<p></p>
<p>L’article <a href="https://alain.arditi.fr/2021/03/07/wordpress-plugin-de-cache-ou-varnish/">WordPress : Plugin de cache ou Varnish ?</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://alain.arditi.fr/2021/03/07/wordpress-plugin-de-cache-ou-varnish/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Booster son WordPress avec Varnish 1/4</title>
		<link>https://alain.arditi.fr/2021/02/16/booster-son-wordpress-avec-varnish/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Tue, 16 Feb 2021 22:06:50 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Varnish]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=289</guid>

					<description><![CDATA[<p>Faire voler votre WordPress en ajoutant le cache Varnish</p>
<p>L’article <a href="https://alain.arditi.fr/2021/02/16/booster-son-wordpress-avec-varnish/">Booster son WordPress avec Varnish 1/4</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Votre WordPress est déjà optimisé, vous avez installé un plugin de cache, mais avec Varnish, vous allez passer à la vitesse supérieure !</p>



<p>Vous avez un WordPress 5.6, votre site est installé sur une distribution Debian Buster avec Apache/PHP/MySQL. Comme Varnish ne fait pas de SSL, il vous faudra un accélérateur SSL comme Nginx ou HAProxy.  Varnish va s&rsquo;intercaler entre le WordPress et le composant qui gère la terminaison SSL.</p>



<span id="more-289"></span>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="436" height="339" src="https://alain.arditi.fr/wp-content/uploads/2021/02/Varnish_wordpress-2.png" alt="" class="wp-image-291" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/Varnish_wordpress-2.png 436w, https://alain.arditi.fr/wp-content/uploads/2021/02/Varnish_wordpress-2-300x233.png 300w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>



<p>On peut installer Varnish 6.1 avec la commande&nbsp;</p>



<pre class="wp-block-code"><code>$ sudo apt install varnish
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libjemalloc2 libvarnishapi2 Suggested packages:
varnish-doc
The following NEW packages will be installed:
libjemalloc2 libvarnishapi2 varnish
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,207 kB of archives.
After this operation, 3,397 kB of additional disk space will be used. Do you want to continue? &#91;Y/n] y
....
$</code></pre>



<p>Jusque là, comme Varnish s&rsquo;installe par défaut sur le port 6081, il n&rsquo;y a aucun impact sur le&nbsp;Wordpress !</p>



<p>On prépare la configuration de Varnish qui se trouve dans <code>/etc/varnish/default.vcl</code></p>



<p>Sauvegardez la version d&rsquo;origine avant de la modifier avec la version à <a href="https://alain.arditi.fr/wp-content/uploads/2021/02/default.vcl_-1.txt" target="_blank" rel="noreferrer noopener">télécharger ici</a> !</p>



<p>Dans ce fichier, il faut vérifier le paragraphe&nbsp;</p>



<pre><code>backend default {
    .host = "localhost";  # WordPress sur trouve sur le même serveur que Varnish
    .port = "8080";
    .....</code></pre>



<p>qui définit l&rsquo;endroit où seront redirigées les requêtes qui arrivent depuis Varnish.</p>



<h3 class="wp-block-heading">Etape 1 : Modifier les ports d&rsquo;écoute d&rsquo;Apache et de Varnish</h3>



<p>Afin que Apache écoute sur le port 8080, il faut modifier 2 fichiers de configuration d&rsquo;Apache :</p>



<p>On passe&nbsp;<code>Listen 80</code>&nbsp;à&nbsp;<code>Listen 8080</code>&nbsp;dans le fichier&nbsp;<code>/etc/apache2/ports.conf</code>&nbsp;et dans la configuration du site WordPress, il faut passer le 80 à 8080 également :</p>



<pre><code>$ less /etc/apache2/sites-enabled/000-default.conf
&lt;VirtualHost *:80&gt;
# The ServerName directive sets the request scheme, hostname and port that
....</code></pre>



<p>de manière à obtenir :</p>



<pre><code>$ less /etc/apache2/sites-enabled/000-default.conf
&lt;VirtualHost *:8080&gt;
# The ServerName directive sets the request scheme, hostname and port that
....</code></pre>



<p>Le redémarrage d&rsquo;Apache permet la prise en compte du changement de port :</p>



<pre><code>$ sudo apachectl -t
Syntax OK
$ 
$ sudo systemctl restart apache2
$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-01-25 10:01:27 CET; 9h ago
     Docs: https://httpd.apache.org/docs/2.4/
 Main PID: 26634 (apache2)
    Tasks: 13 (limit: 4696)
   Memory: 244.9M
   CGroup: /system.slice/apache2.service
           ├─ 3666 /usr/sbin/apache2 -k start
           ├─ 5662 /usr/sbin/apache2 -k start
           ├─ 5663 /usr/sbin/apache2 -k start
           ├─ 6443 /usr/sbin/apache2 -k start
           ├─26634 /usr/sbin/apache2 -k start
           ├─26637 /usr/sbin/apache2 -k start
           ├─26639 /usr/sbin/apache2 -k start
           ├─26899 /usr/sbin/apache2 -k start
           ├─26900 /usr/sbin/apache2 -k start
           ├─26901 /usr/sbin/apache2 -k start
           └─26920 /usr/sbin/apache2 -k start
Jan 25 10:01:27 aa2 systemd[1]: Starting The Apache HTTP Server...
Jan 25 10:01:27 aa2 systemd[1]: Started The Apache HTTP Server.
$</code></pre>



<p>On modifie le port d&rsquo;écoute de Varnish pour passer du port par défaut 6081 au port 80, c&rsquo;est l&rsquo;option -a de la ligne de commande <code>ExecStart</code> dans le fichier&nbsp;/etc/systemd/system/varnish.service qu&rsquo;on aura copié depuis la version distribuée :</p>



<pre><code>$ sudo cp /lib/systemd/system/varnish.service /etc/systemd/system/varnish.service
$
## et modifié comme suit :
$ cat /etc/systemd/system/varnish.service
[Unit]
Description=Varnish HTTP accelerator Documentation=https://www.varnish-cache.org/docs/6.1/ man:varnishd
[Service]
Type=simple
LimitNOFILE=131072
LimitMEMLOCK=82000
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m ExecReload=/usr/share/varnish/varnishreload
ProtectSystem=full 
ProtectHome=true 
PrivateTmp=true 
PrivateDevices=true
[Install] 
WantedBy=multi-user.target 
$</code></pre>



<p>On lance la prise en compte de cette modification et on redémarre Varnish :</p>



<pre><code>$ sudo systemctl daemon-reload
$ sudo systemctl restart varnish
$ sudo systemctl status varnish
● varnish.service - Varnish HTTP accelerator
   Loaded: loaded (/lib/systemd/system/varnish.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-01-25 19:46:50 CET; 7s ago
     Docs: https://www.varnish-cache.org/docs/6.1/
           man:varnishd
 Main PID: 11354 (varnishd)
    Tasks: 217 (limit: 4696)
   Memory: 116.4M
   CGroup: /system.slice/varnish.service
           ├─11354 /usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
           └─11366 /usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
Jan 25 19:46:50 aa2 systemd[1]: Started Varnish HTTP accelerator.
Jan 25 19:46:52 aa2 varnishd[11354]: Debug: Version: varnish-6.1.1 revision efc2f6c1536cf2272e471f5cff5f145239b19460
Jan 25 19:46:52 aa2 varnishd[11354]: Debug: Platform: Linux,4.19.0-9-amd64,x86_64,-junix,-smalloc,-sdefault,-hcritbit
Jan 25 19:46:52 aa2 varnishd[11354]: Version: varnish-6.1.1 revision efc2f6c1536cf2272e471f5cff5f145239b19460
Jan 25 19:46:52 aa2 varnishd[11354]: Platform: Linux,4.19.0-9-amd64,x86_64,-junix,-smalloc,-sdefault,-hcritbit
Jan 25 19:46:52 aa2 varnishd[11354]: Debug: Child (11366) Started
Jan 25 19:46:52 aa2 varnishd[11354]: Child (11366) Started
Jan 25 19:46:52 aa2 varnishd[11354]: Info: Child (11366) said Child starts
Jan 25 19:46:52 aa2 varnishd[11354]: Child (11366) said Child starts
$ </code></pre>



<h3 class="wp-block-heading">Etape 2 : purger le cache Varnish</h3>



<p>Une fois installé, on peut vérifier l&rsquo;amélioration des&nbsp;performances de la mise en place de Varnish.</p>



<p>Pour vérifier la bon fonctionnement de Varnish, il faut gérer la purge. Sur le serveur Varnish, il suffit de lancer la commande suivante pour vider toutes les URLs mises en cache :</p>



<pre><code>$ sudo varnishadm "ban req.url ~ ."
$</code></pre>



<p>Le . de l&rsquo;expression régulière veut dire : 0 ou 1 caractère et n&rsquo;importe lequel. Toutes les URLs vont satisfaire la condition « ~ . » , donc cette expression va bannir toutes les URLs du cache.</p>



<p>La première requête suivant cette purge doit montrer un entête <code>X-Cache: MISS</code></p>



<p>La deuxième requête identique doit montrer un entête <code>X-Cache: HIT</code></p>



<p>On pourrait aussi purger des URLs avec une requête du type PURGE, puisqu&rsquo;on a a géré ce cas dans <a rel="noreferrer noopener" href="https://alain.arditi.fr/wp-content/uploads/2021/02/default.vcl_-1.txt" target="_blank">le fichier default.vcl</a>. Cette configuration permet de faire des purges à distance, sans être loggé sur le serveur et pourra aussi être utilisée par des plugins WordPress pour vider le cache lorsqu&rsquo;on publie un article.</p>



<p>Par exemple pour purger la page de cet article, dont l&rsquo;URL est : https://alain.arditi.fr/2021/02/09/booster-son-wordpress-avec-varnish/ il suffit de lancer la requête suivante sur la machine qui héberge le Varnish :</p>



<pre><code>$ curl -D - -X PURGE "http://localhost/2021/02/09/booster-son-wordpress-avec-varnish/"
HTTP/1.1 200 Purged.
Date: Tue, 09 Feb 2021 13:45:18 GMT
Server: Varnish
X-Varnish: 229742
Content-Length: 0
Accept-Ranges: bytes
Connection: keep-alive
$ sudo varnishadm 
200        
-----------------------------
Varnish Cache CLI 1.0
-----------------------------
Linux,4.19.0-9-amd64,x86_64,-junix,-smalloc,-sdefault,-hcritbit
varnish-6.1.1 revision efc2f6c1536cf2272e471f5cff5f145239b19460
Type 'help' for command list.
Type 'quit' to close CLI session.
varnish&gt; ban.list
200        
Present bans:
1612878318.148724     0 -  obj.http.X-Req-URL == /2021/02/09/booster-son-wordpress-avec-varnish/
1612878297.553181     0 C  
1612878289.407936     0 C  
1612878281.014556     0 C  
1612878237.731221     0 C  
1612864182.318939    44 C  
varnish&gt; quit
500        
Closing CLI connection
$</code></pre>



<p>On peut vérifier que la purge a bien fonctionné, en enchainant 2 fois la même requête et en regardant l&rsquo;entête X-Cache :</p>



<pre><code>$ curl -s -D - "https://alain.arditi.fr/2021/02/09/booster-son-wordpress-avec-varnish/" -o /dev/null
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 09 Feb 2021 13:59:29 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Frame-Options: sameorigin
Age: 0
X-Cache: MISS
Accept-Ranges: bytes
$ curl -s -D - "https://alain.arditi.fr/2021/02/09/booster-son-wordpress-avec-varnish/" -o /dev/null
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 09 Feb 2021 14:03:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 32894
Connection: keep-alive
Vary: Accept-Encoding
X-Frame-Options: sameorigin
Age: 245
X-Cache: HIT
Accept-Ranges: bytes
$</code></pre>



<p>Dernier point concernant la purge, on peut vérifier que la purge est interdite depuis une IP externe et génère un code d&rsquo;erreur 405 qui se trouve dans le fichier /etc/varnish/default.vcl :</p>



<pre><code>$ curl -D - -X PURGE "https://alain.arditi.fr/2021/02/09/booster-son-wordpress-avec-varnish/"   
HTTP/1.1 405 This IP is not allowed.
Server: nginx
Date: Tue, 09 Feb 2021 14:11:14 GMT
Content-Length: 0
Connection: keep-alive
X-Varnish: 360523
$</code></pre>



<p>A ce stade, nn est prêt à faire des mesures sur l&rsquo;efficacité des temps de réponse.</p>



<h3 class="wp-block-heading">Etape 3 : mesurer les temps de réponse unitaires</h3>



<p>On peut regarder le temps de chargement d&rsquo;une page avec cUrl ! <br>On prépare un fichier pour le formatage des temps de réponse comme suit :</p>



<pre><code>$ cat curl-format.txt
       time_connect:  %{time_connect}\n
 time_starttransfer:  %{time_starttransfer}\n
                    ----------\n
         time_total:  %{time_total}\n
$ </code></pre>



<p>Ce format pour cUrl est un format réduit, qui contient uniquement les 3 indicateurs qui nous intéressent. Ce qui produit un time_total qui n&rsquo;est pas toujours la somme de time_connect + time_starttransfer.</p>



<p>Pour information, le format qui permet d&rsquo;avoir tous les timers est le suivant :</p>



<pre><code>    time_namelookup:  %{time_namelookup}\n
       time_connect:  %{time_connect}\n
    time_appconnect:  %{time_appconnect}\n
   time_pretransfer:  %{time_pretransfer}\n
      time_redirect:  %{time_redirect}\n
 time_starttransfer:  %{time_starttransfer}\n
                    ----------\n
         time_total:  %{time_total}\n</code></pre>



<p>On lance une requête après le vidage du cache :</p>



<pre><code>$ curl -s -D - -w "@curl-format.txt" -o /dev/null -s "http://localhost/"
HTTP/1.1 200 OK
Date: Mon, 25 Jan 2021 16:00:28 GMT
Vary: Accept-Encoding
X-Frame-Options: sameorigin
Content-Type: text/html; charset=UTF-8
Age: 0
X-Cache: MISS
Accept-Ranges: bytes
Transfer-Encoding: chunked
Connection: keep-alive
       time_connect:  0.001480
 time_starttransfer:  0.030051
                    ----------
         time_total:  0.030324
$</code></pre>



<p>On remarque que l&rsquo;en-tête X-Cache vaut MISS.<br>La page est servie depuis Apache car elle n&rsquo;est pas stockée au niveau de Varnish.<br>Mais si on exécute la même requête encore une fois on obtient :</p>



<pre><code>$ curl -s -D - -w "@curl-format.txt" -o /dev/null -s "http://localhost/"
HTTP/1.1 200 OK
Date: Mon, 25 Jan 2021 16:00:28 GMT
Vary: Accept-Encoding
X-Frame-Options: sameorigin
Content-Type: text/html; charset=UTF-8
Age: 3
X-Cache: HIT
Accept-Ranges: bytes
Content-Length: 30108
Connection: keep-alive
        time_connect:  0.001529
  time_starttransfer:  0.002299
                    ----------
         time_total:  0.002713
$</code></pre>



<p>On divise le temps de réponse par un facteur 10 !!<br>Si on demande la même page directement depuis Apache, on obtient :</p>



<pre><code>$ curl -s -D - -w "@curl-format.txt" -o /dev/null "http://localhost:8080/"
HTTP/1.1 200 OK
Date: Mon, 25 Jan 2021 16:00:39 GMT
Server: Apache
Vary: Accept-Encoding
X-Frame-Options: sameorigin
Transfer-Encoding: chunked
Content-Type: text/html; charset=UTF-8
        time_connect:  0.001666
 time_starttransfer:  0.026801
                    ----------
         time_total:  0.027680
$</code></pre>



<p>soit un temps de réponse voisin de celui de Varnish quand la page n&rsquo;est pas cachée. Ce facteur 10 prouve l&rsquo;intérêt de Varnish, qui va pouvoir servir tous les contenus statiques, images, js et css, et pages également, lorsqu&rsquo;elles n&rsquo;ont pas de cookies de session, beaucoup plus rapidement qu&rsquo;un serveur Apache !</p>



<p>Sur ce test, on voit l&rsquo;efficacité de l&rsquo;addition de Varnish sur les contenus statiques en terme de temps de réponse unitaire. C&rsquo;est donc un gain pour l&rsquo;expérience utilisateur !</p>



<p>L&rsquo;autre bénéfice est celui de la tenue en charge, qu&rsquo;on peut mesurer avec des outils comme <a rel="noreferrer noopener" href="https://jmeter.apache.org/" target="_blank">JMeter</a>.</p>



<p>C&rsquo;est ce que nous allons étudier dans les pages suivantes.</p>



<p></p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-d0b3c9c8 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="--col-width:100%;flex-basis:100%">
<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-d0b3c9c8 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow"></div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p><a href="https://alain.arditi.fr/2021/02/15/booster-son-wordpress-avec-varnish-2-4/">Suite : Booster son WordPress avec Varnish 2/4</a></p>
</div>
</div>
</div>
</div>



<p></p>
<p>L’article <a href="https://alain.arditi.fr/2021/02/16/booster-son-wordpress-avec-varnish/">Booster son WordPress avec Varnish 1/4</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Booster son WordPress avec Varnish 2/4</title>
		<link>https://alain.arditi.fr/2021/02/15/booster-son-wordpress-avec-varnish-2-4/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Mon, 15 Feb 2021 21:05:17 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Varnish]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=344</guid>

					<description><![CDATA[<p>Booster son WordPress avec Varnish : Test n°1 : 40 threads sans Varnish</p>
<p>L’article <a href="https://alain.arditi.fr/2021/02/15/booster-son-wordpress-avec-varnish-2-4/">Booster son WordPress avec Varnish 2/4</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading" id="block-ec72f45b-bbbd-484f-b444-228fc57a694c">Mesurer les temps de réponse et la tenue en charge avec JMeter</h3>



<p><a href="https://jmeter.apache.org/" target="_blank" rel="noreferrer noopener">JMeter</a> est un « injecteur » qui permet de simuler le parcours de plusieurs internautes et donc de produire de l&rsquo;audience, de la charge, sur un serveur afin de vérifier son comportement, sa tenue en charge !</p>



<p id="block-c5dd02f8-9421-4e29-a11e-15bcb0b1f6ea">Le sujet de la tenue en charge est assez vaste. Ici, on réduira le périmètre aux pages statiques puisque pour les pages dynamiques, le Varnish ne va pas pouvoir utiliser son cache.</p>



<p id="block-f3ce61e9-9ad7-4660-a109-d02216938c6a">Les tests ci dessous ont été effectués sur une VM WordPress de test avec très peu de ressources afin de mieux visualiser les limites de la VM.<br>La VM WordPress dispose d&rsquo;un seul vcpu et de 500Mo de RAM et elle se trouve sur mon hyperviseur VirtualBox sur un Macbook Air de 2017 ! Le WordPress utilise le plugin de cache <a href="https://fr.wordpress.org/plugins/wp-fastest-cache/" target="_blank" rel="noreferrer noopener">WP Fastest Cache</a> qui génère les pages prêtes à l&#8217;emploi sur le disque. A noter, que comme JMeter n&rsquo;interprète pas le JavaScript ni les feuilles de style CSS, les optimisations de minification de JS, de CSS, l&rsquo;allègement du poids des images n&rsquo;apparaissent pas dans les résultats de ces tests.</p>



<p id="block-63bd13ae-1ded-49e2-a90f-ea966ee20d92">Dans les paragraphes ci dessous, notre objectif consiste uniquement à « visualiser » l&rsquo;apport du composant Varnish. On lance un premier test sans Varnish, puis on relance le même test en activant Varnish.</p>



<p id="block-c49a42de-9c13-4a9a-b334-bf1a1fb64568">Comme lors du deuxième test, on constate que la VM a encore de la ressource, on lancera un troisième test en doublant le nombre de threads, qui passent de 40 à 80.</p>



<h4 class="wp-block-heading" id="block-5046eef4-0e4a-45a5-b999-04383e4058ed">Test n°1 : 40 threads sans Varnish</h4>



<p id="block-14c0ba0e-ef51-4734-8f3f-ec87085186dc">On lance 40 threads JMeter sur le site en SSL avec Nginx, sans cache Varnish.<br>Les résultats bruts de JMeter : nombre de requêtes 406 128, 0% d&rsquo;erreur.</p>



<figure class="wp-block-image" id="block-002aa6cc-1dbe-42c3-8bb7-09531ca4d8b0"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotActiveThreadsOverTime-13-1.png"><img decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotActiveThreadsOverTime-13-1.png" alt="L’attribut alt de cette image est vide, son nom de fichier est flotActiveThreadsOverTime-13-1.png."/></a><figcaption>Nombre de threads actifs en fonction du temps</figcaption></figure>



<p id="block-f89f0700-f6ce-47f6-ba5c-0d55c4a5a200">La légende des abscisses indique le jour 09 (Février) suivi de l&rsquo;heure.<br>Les 40 threads sont atteints à 22h27. C&rsquo;est à partir de ce moment qu&rsquo;on atteint le maximum de la charge.</p>



<hr class="wp-block-separator" id="block-b6c5109d-cad8-4e7b-a671-c075cae8b1d5"/>



<p id="block-f6b84cc1-776a-4f2c-aaaa-b30214d197be">Les métriques de la VM sont les suivantes. La granularité de l&rsquo;outil de graphes <a href="http://munin-monitoring.org/" target="_blank" rel="noreferrer noopener">Munin</a>, utilisé pour ces tests est de 5 minutes.</p>



<figure class="wp-block-image" id="block-b2e004a5-47c1-453e-a0ad-a9538dd323f3"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request.png"><img decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request.png" alt="L’attribut alt de cette image est vide, son nom de fichier est nginx_request.png."/></a><figcaption>Nombre de requêtes traitées par Nginx par seconde</figcaption></figure>



<figure class="wp-block-image" id="block-3e8ca21d-5e3b-4980-8c99-fbcdfa1fb3db"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses.png"><img decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses.png" alt="L’attribut alt de cette image est vide, son nom de fichier est apache_accesses.png."/></a><figcaption>Nombre de requêtes traitées par Apache par seconde</figcaption></figure>



<p id="block-c8b252c4-5450-4378-ae48-0f5a48b543e9">On a exactement le même nombre de requêtes traitées par Nginx et par Apache puisqu&rsquo;il n&rsquo;y pas de cache. Toutes les requêtes sont transmises à Apache.</p>



<figure class="wp-block-image" id="block-abca910e-7f77-4bf9-af24-13a7b01ce92b"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/load.png"><img decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2021/02/load.png" alt="L’attribut alt de cette image est vide, son nom de fichier est load.png."/></a><figcaption>Load average : charge de la VM</figcaption></figure>



<figure class="wp-block-image" id="block-2e9ae262-4c39-4d78-ae9c-0a39c5bb0a0e"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/cpu.png"><img decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2021/02/cpu.png" alt="L’attribut alt de cette image est vide, son nom de fichier est cpu.png."/></a><figcaption>graphe d&rsquo;utilisation de la CPU</figcaption></figure>



<figure class="wp-block-image" id="block-172891ac-2001-40d9-bf5e-25ab8bf7d235"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries.png"><img decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries.png" alt="L’attribut alt de cette image est vide, son nom de fichier est mysql_queries.png."/></a><figcaption>Nombre de requêtes MySQL par seconde</figcaption></figure>



<figure class="wp-block-image" id="block-1dbb91ac-b196-45eb-94a0-80a470d47e76"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3.png"><img decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3.png" alt="L’attribut alt de cette image est vide, son nom de fichier est if_enp0s3.png."/></a><figcaption>Trafic réseau de la VM en Mbps</figcaption></figure>



<figure class="wp-block-image" id="block-eef6d58c-9e26-49ab-81d0-345149100171"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/memory.png"><img decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2021/02/memory.png" alt="L’attribut alt de cette image est vide, son nom de fichier est memory.png."/></a><figcaption>Utilisation de la mémoire. Il reste de la mémoire libre pendant tout le test.</figcaption></figure>



<hr class="wp-block-separator" id="block-6b9650f8-5b4f-4d74-a600-b86aa5c52ace"/>



<p id="block-ac71ef56-4781-48ad-b9e7-9d4d8897ee15">Les métriques coté JMeter sont les suivantes. La granularité des JMeter est de 1 minutes, c&rsquo;est donc beaucoup plus précis dans notre cas que les graphes Munin.</p>



<figure class="wp-block-image" id="block-26bac8aa-e23d-4e88-9808-b2b883db893b"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotLatenciesOverTime-13.png"><img decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotLatenciesOverTime-13.png" alt="L’attribut alt de cette image est vide, son nom de fichier est flotLatenciesOverTime-13.png."/></a><figcaption>La latence des pages (TTFB) en fonction du temps.</figcaption></figure>



<p id="block-88a5a617-3eea-4969-99fa-8bfbe2620bf8">Les temps de réponse sont en millisecondes car JMeter se trouve sur le même hyperviseur que la VM WordPress. On voit que la latence augmente graduellement en fonction de la charge. est perturbée à 22h32 et à 22h35.</p>



<figure class="wp-block-image" id="block-cd47e4d5-9712-486b-bb5d-cf4925ed9014"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotLatenciesOverTime-13.png"><img decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotResponseTimesOverTime-13.png" alt="L’attribut alt de cette image est vide, son nom de fichier est flotResponseTimesOverTime-13.png."/></a><figcaption>Les temps de réponse des pages en fonction du temps</figcaption></figure>



<p id="block-02627096-1614-42e2-a02c-dc5e3b16a94b">On fait le même constat sur les temps de réponse. La courbe violette correspond à une page qui pèse 10 fois plus que les autres, son temps de réponse est plus élevé à cause du temps de transfert.</p>



<figure class="wp-block-image" id="block-29584a5a-981a-4942-93c2-5d700d398382"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotBytesThroughputOverTime-13-1.png"><img decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotBytesThroughputOverTime-13-1.png" alt="L’attribut alt de cette image est vide, son nom de fichier est flotBytesThroughputOverTime-13-1.png."/></a><figcaption>Graphes de débit réseau en MBps (octets) par seconde.</figcaption></figure>



<p id="block-e41e492c-6138-4127-8c5a-1a121b249de4">On voit que qu&rsquo;à partir de 22h27 le débit se dégrade, avec une perturbation à 22h32. On suppose que cette pointe est un artefact lié à la charge. Néanmoins, à partir de 40 thread, il y a un comportement erratique qu&rsquo;on ne voit pas bien sur les graphes Munin. En y regardant de plus près, on voit que sur les graphes Munin les mesures de 22h30 sont plus faibles que les mesures de 22h25, mais surtout que les mesures de 22h35 sont beaucoup plus faibles, alors qu&rsquo;il y a toujours 40 threads jusqu&rsquo;à 22h37. C&rsquo;est le signe que la VM ne répond plus correctement, on a une dégradation de son comportement à 40 threads.</p>



<p>On va pouvoir constater les différences avec le même test, mais avec Varnish activé qui va cacher toutes les page.</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-d0b3c9c8 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p><a href="https://alain.arditi.fr/2021/02/16/booster-son-wordpress-avec-varnish/">Précédent : Booster son WordPress avec Varnish 1/4</a></p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p><a href="https://alain.arditi.fr/2021/02/13/booster-son-wordpress-avec-varnish-3-4/">Suite : Booster son WordPress avec Varnish 3/4</a></p>
</div>
</div>



<p></p>
<p>L’article <a href="https://alain.arditi.fr/2021/02/15/booster-son-wordpress-avec-varnish-2-4/">Booster son WordPress avec Varnish 2/4</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Booster son WordPress avec Varnish 3/4</title>
		<link>https://alain.arditi.fr/2021/02/13/booster-son-wordpress-avec-varnish-3-4/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Sat, 13 Feb 2021 21:04:57 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Varnish]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=350</guid>

					<description><![CDATA[<p>Booster son WordPress avec Varnish : Test n°2 : 40 threads avec Varnish</p>
<p>L’article <a href="https://alain.arditi.fr/2021/02/13/booster-son-wordpress-avec-varnish-3-4/">Booster son WordPress avec Varnish 3/4</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h4 class="wp-block-heading" id="block-5046eef4-0e4a-45a5-b999-04383e4058ed">Test n°2 : 40 threads avec Varnish</h4>



<p id="block-14c0ba0e-ef51-4734-8f3f-ec87085186dc">On lance 40 threads JMeter sur le site en SSL avec Nginx, mais cette fois avec le cache Varnish et avec le plugin de cache WordPress <a rel="noreferrer noopener" href="https://wordpress.org/plugins/wp-fastest-cache/" target="_blank">WP Fastest Cache</a>. <br>Les résultats bruts de JMeter : nombre de requêtes 482 789, 0% d&rsquo;erreur.</p>



<figure class="wp-block-image size-large" id="block-002aa6cc-1dbe-42c3-8bb7-09531ca4d8b0"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotActiveThreadsOverTime.png"><img loading="lazy" decoding="async" width="680" height="400" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotActiveThreadsOverTime.png" alt="" class="wp-image-351" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/flotActiveThreadsOverTime.png 680w, https://alain.arditi.fr/wp-content/uploads/2021/02/flotActiveThreadsOverTime-300x176.png 300w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de threads actifs en fonction du temps</figcaption></figure>



<p id="block-f89f0700-f6ce-47f6-ba5c-0d55c4a5a200">La légende des abscisses indique le jour 09 (Février) suivi de l&rsquo;heure.<br>Les 40 threads sont atteints à 23h35. C&rsquo;est à partir de ce moment qu&rsquo;on atteint le maximum de la charge.</p>



<hr class="wp-block-separator" id="block-b6c5109d-cad8-4e7b-a671-c075cae8b1d5"/>



<p id="block-f6b84cc1-776a-4f2c-aaaa-b30214d197be">Les métriques de la VM sont les suivantes. La granularité de l&rsquo;outil de graphes <a href="http://munin-monitoring.org/" target="_blank" rel="noreferrer noopener">Munin</a>, utilisé pour ces tests est de 5 minutes.</p>



<figure class="wp-block-image size-large" id="block-b2e004a5-47c1-453e-a0ad-a9538dd323f3"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-1.png"><img loading="lazy" decoding="async" width="897" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-1.png" alt="" class="wp-image-353" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-1.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-1-300x167.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-1-768x428.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de requêtes traitées par Nginx par seconde</figcaption></figure>



<p>Il faut noter l&rsquo;amélioration du maximum. Dans le scénario sans Varnish on arrive à 170 requêtes/s, ici on monte à 220 requêtes/s.</p>



<figure class="wp-block-image size-large" id="block-3e8ca21d-5e3b-4980-8c99-fbcdfa1fb3db"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-1.png"><img loading="lazy" decoding="async" width="897" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-1.png" alt="" class="wp-image-355" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-1.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-1-300x167.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-1-768x428.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de requêtes traitées par Apache par seconde</figcaption></figure>



<p id="block-c8b252c4-5450-4378-ae48-0f5a48b543e9">Apache traite cent fois moins de requête avec Varnish. En fait dans le scénario, il y a une requête dynamique dans le scénario et qui ne peut pas être cachée par Varnish. Elle est toujours passée à Apache. On note également sur les deux graphes précédents, mais on retrouvera ce comportement sur tous les graphes suivants, qu&rsquo;on bien un plateau identique au plateau de nombre de threads. Contrairement au scénario 1, sans Varnish où la VM ne suit plus les thread de l&rsquo;injecteur JMeter une fois au maximum. Ce qui confirme la saturation de la VM dans le scénario 1.</p>



<figure class="wp-block-image size-large" id="block-abca910e-7f77-4bf9-af24-13a7b01ce92b"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/load-1.png"><img loading="lazy" decoding="async" width="897" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/02/load-1.png" alt="" class="wp-image-356" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/load-1.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/load-1-300x167.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/load-1-768x428.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Load average : charge de la VM</figcaption></figure>



<p>La charge de la VM n&rsquo;est pas significative, il ne faut pas tenir compte des petites variations qui sont sous la valeur 0,2.</p>



<figure class="wp-block-image size-large" id="block-2e9ae262-4c39-4d78-ae9c-0a39c5bb0a0e"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-1.png"><img loading="lazy" decoding="async" width="897" height="596" src="https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-1.png" alt="" class="wp-image-357" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-1.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-1-300x199.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-1-768x510.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>graphe d&rsquo;utilisation de la CPU</figcaption></figure>



<figure class="wp-block-image size-large" id="block-172891ac-2001-40d9-bf5e-25ab8bf7d235"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries-1.png"><img loading="lazy" decoding="async" width="897" height="572" src="https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries-1.png" alt="" class="wp-image-358" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries-1.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries-1-300x191.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries-1-768x490.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de requêtes MySQL par seconde</figcaption></figure>



<p>Les valeurs sont tellement faibles que ce graphe n&rsquo;est pas significatif. Ici on a des millièmes de requêtes par seconde.</p>



<figure class="wp-block-image size-large" id="block-1dbb91ac-b196-45eb-94a0-80a470d47e76"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-1.png"><img loading="lazy" decoding="async" width="897" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-1.png" alt="" class="wp-image-359" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-1.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-1-300x167.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-1-768x428.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Trafic réseau de la VM en Mbps</figcaption></figure>



<figure class="wp-block-image size-large" id="block-eef6d58c-9e26-49ab-81d0-345149100171"><img loading="lazy" decoding="async" width="897" height="656" src="https://alain.arditi.fr/wp-content/uploads/2021/02/memory-1.png" alt="" class="wp-image-360" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/memory-1.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/memory-1-300x219.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/memory-1-768x562.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /><figcaption>Utilisation de la mémoire. Rien à signaler coté mémoire.</figcaption></figure>



<hr class="wp-block-separator" id="block-6b9650f8-5b4f-4d74-a600-b86aa5c52ace"/>



<p id="block-ac71ef56-4781-48ad-b9e7-9d4d8897ee15">Les métriques coté JMeter sont les suivantes. La granularité des JMeter est de 1 minutes, c&rsquo;est donc beaucoup plus précis dans notre cas que les graphes Munin.</p>



<figure class="wp-block-image size-large" id="block-26bac8aa-e23d-4e88-9808-b2b883db893b"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotLatenciesOverTime.png"><img loading="lazy" decoding="async" width="680" height="400" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotLatenciesOverTime.png" alt="" class="wp-image-361" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/flotLatenciesOverTime.png 680w, https://alain.arditi.fr/wp-content/uploads/2021/02/flotLatenciesOverTime-300x176.png 300w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>La latence des pages (TTFB) en fonction du temps.</figcaption></figure>



<p id="block-88a5a617-3eea-4969-99fa-8bfbe2620bf8">La latence ne varie quasiment pas avec la charge. Il n&rsquo;y a pas de saturation. On note également une diminution de la latence par un facteur 10 au moins. On voit la capacité de Varnish à cracher du HTTP !</p>



<figure class="wp-block-image size-large" id="block-cd47e4d5-9712-486b-bb5d-cf4925ed9014"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotResponseTimesOverTime.png"><img loading="lazy" decoding="async" width="680" height="400" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotResponseTimesOverTime.png" alt="" class="wp-image-362" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/flotResponseTimesOverTime.png 680w, https://alain.arditi.fr/wp-content/uploads/2021/02/flotResponseTimesOverTime-300x176.png 300w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Les temps de réponse des pages en fonction du temps</figcaption></figure>



<p id="block-02627096-1614-42e2-a02c-dc5e3b16a94b">Même constat, les temps de réponse sont exceptionnels et ne varient pas. Sauf pour la courbe violette correspond à une page qui pèse 10 fois plus que les autres.</p>



<figure class="wp-block-image size-large" id="block-29584a5a-981a-4942-93c2-5d700d398382"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotBytesThroughputOverTime.png"><img loading="lazy" decoding="async" width="680" height="400" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotBytesThroughputOverTime.png" alt="" class="wp-image-363" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/flotBytesThroughputOverTime.png 680w, https://alain.arditi.fr/wp-content/uploads/2021/02/flotBytesThroughputOverTime-300x176.png 300w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Graphes de débit réseau en MBps (octets) par seconde.</figcaption></figure>



<p>Trois conclusions à tirer de ce deuxième test :</p>



<ol class="wp-block-list"><li>Les latences et les temps de réponse sont exceptionnels</li><li>Le nombre de requêtes fournies par seconde augmente de 30%, parce que les pages sont servies plus vite.</li><li>A 40 threads, la VM n&rsquo;est pas saturée, contrairement au test précédent qui avait atteint les limites. Les graphes JMeter et Munin suivent le graphe des threads !</li></ol>



<p>On va doit pouvoir pousser le test à 80 threads</p>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-d0b3c9c8 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p><a href="https://alain.arditi.fr/2021/02/15/booster-son-wordpress-avec-varnish-2-4/" data-type="URL">Précédent : Booster son WordPress avec Varnish 2/4</a></p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p><a href="https://alain.arditi.fr/2021/02/12/booster-son-wordpress-avec-varnish-4-4/">Suite : Booster son WordPress avec Varnish 4/4</a></p>
</div>
</div>



<p></p>
<p>L’article <a href="https://alain.arditi.fr/2021/02/13/booster-son-wordpress-avec-varnish-3-4/">Booster son WordPress avec Varnish 3/4</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Booster son WordPress avec Varnish 4/4</title>
		<link>https://alain.arditi.fr/2021/02/12/booster-son-wordpress-avec-varnish-4-4/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Fri, 12 Feb 2021 22:02:45 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Varnish]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=365</guid>

					<description><![CDATA[<p>Booster son Wordpress avec Varnish : 80 threads avec Varnish</p>
<p>L’article <a href="https://alain.arditi.fr/2021/02/12/booster-son-wordpress-avec-varnish-4-4/">Booster son WordPress avec Varnish 4/4</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h4 class="wp-block-heading" id="block-5046eef4-0e4a-45a5-b999-04383e4058ed">Test n°3 : 80 threads avec Varnish</h4>



<p id="block-14c0ba0e-ef51-4734-8f3f-ec87085186dc">On lance 80 threads JMeter sur le site en SSL avec Nginx, avec le cache Varnish et avec le plugin de cache WordPress <a rel="noreferrer noopener" href="https://wordpress.org/plugins/wp-fastest-cache/" target="_blank">WP Fastest Cache</a> afin d&rsquo;essayer de trouver la limite de la VM WordPress.<br>Les résultats bruts de JMeter : nombre de requêtes 935 664 avec 7% d&rsquo;erreur.</p>



<figure class="wp-block-image size-large" id="block-002aa6cc-1dbe-42c3-8bb7-09531ca4d8b0"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotActiveThreadsOverTime-1.png"><img loading="lazy" decoding="async" width="680" height="400" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotActiveThreadsOverTime-1.png" alt="" class="wp-image-366" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/flotActiveThreadsOverTime-1.png 680w, https://alain.arditi.fr/wp-content/uploads/2021/02/flotActiveThreadsOverTime-1-300x176.png 300w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de threads actifs en fonction du temps</figcaption></figure>



<p id="block-f89f0700-f6ce-47f6-ba5c-0d55c4a5a200">La légende des abscisses indique le jour 10 (Février) suivi de l&rsquo;heure.<br>Les 80 threads sont atteints à 08h27. C&rsquo;est à partir de ce moment qu&rsquo;on atteint le maximum de la charge jusqu&rsquo;à 08h37.</p>



<hr class="wp-block-separator" id="block-b6c5109d-cad8-4e7b-a671-c075cae8b1d5"/>



<p id="block-f6b84cc1-776a-4f2c-aaaa-b30214d197be">Les métriques de la VM sont les suivantes. La granularité de l&rsquo;outil de graphes <a href="http://munin-monitoring.org/" target="_blank" rel="noreferrer noopener">Munin</a>, utilisé pour ces tests est de 5 minutes.</p>



<figure class="wp-block-image size-large" id="block-b2e004a5-47c1-453e-a0ad-a9538dd323f3"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-2.png"><img loading="lazy" decoding="async" width="897" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-2.png" alt="" class="wp-image-367" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-2.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-2-300x167.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-2-768x428.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de requêtes traitées par Nginx par seconde</figcaption></figure>



<p>Il faut noter l&rsquo;amélioration du maximum. On est à 360 requêtes/s ce qui prouve que la VM avec encore des ressources. On a augmenté de plus de 60% pour une augmentation de 100% du nombre de threads. Ce qui indique qu&rsquo;il y a probablement une contention, sinon on aurait aussi fait 100% de requêtes/s en plus !</p>



<figure class="wp-block-image size-large" id="block-3e8ca21d-5e3b-4980-8c99-fbcdfa1fb3db"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-2.png"><img loading="lazy" decoding="async" width="897" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-2.png" alt="" class="wp-image-368" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-2.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-2-300x167.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-2-768x428.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de requêtes traitées par Apache par seconde</figcaption></figure>



<p id="block-c8b252c4-5450-4378-ae48-0f5a48b543e9">Apache ne fait rien ou presque.</p>



<figure class="wp-block-image size-large" id="block-abca910e-7f77-4bf9-af24-13a7b01ce92b"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/load-2.png"><img loading="lazy" decoding="async" width="897" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/02/load-2.png" alt="" class="wp-image-369" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/load-2.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/load-2-300x167.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/load-2-768x428.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Load average : charge de la VM</figcaption></figure>



<p>La charge de la VM n&rsquo;est pas significative, il ne faut pas tenir compte des petites variations.</p>



<figure class="wp-block-image size-large" id="block-2e9ae262-4c39-4d78-ae9c-0a39c5bb0a0e"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-2.png"><img loading="lazy" decoding="async" width="897" height="596" src="https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-2.png" alt="" class="wp-image-370" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-2.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-2-300x199.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-2-768x510.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>graphe d&rsquo;utilisation de la CPU</figcaption></figure>



<p>L&rsquo;utilisation de la CPU a doublé et passe à 20%, ce qui reste faible. Ce n&rsquo;est pas en calcul que la VM est limitée.</p>



<figure class="wp-block-image size-large" id="block-172891ac-2001-40d9-bf5e-25ab8bf7d235"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries-2.png"><img loading="lazy" decoding="async" width="897" height="572" src="https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries-2.png" alt="" class="wp-image-371" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries-2.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries-2-300x191.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/mysql_queries-2-768x490.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de requêtes MySQL par seconde</figcaption></figure>



<p>Là aussi, on a un « joli » graphe mais pas significatif. MySQL ne fait rien.</p>



<figure class="wp-block-image size-large" id="block-1dbb91ac-b196-45eb-94a0-80a470d47e76"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-2.png"><img loading="lazy" decoding="async" width="897" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-2.png" alt="" class="wp-image-372" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-2.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-2-300x167.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-2-768x428.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Trafic réseau de la VM en Mbps</figcaption></figure>



<p>On voit la contention !!! Le maximum de débit réseau est atteint à 8h20, alors que les 80 threads sont atteints à 8h27. Ce plateau montre que la VM n&rsquo;arrive pas à produire plus de pages que  lorsqu&rsquo;elle est soumise à 65 threads.</p>



<figure class="wp-block-image size-large" id="block-eef6d58c-9e26-49ab-81d0-345149100171"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/memory-2.png"><img loading="lazy" decoding="async" width="897" height="656" src="https://alain.arditi.fr/wp-content/uploads/2021/02/memory-2.png" alt="" class="wp-image-373" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/memory-2.png 897w, https://alain.arditi.fr/wp-content/uploads/2021/02/memory-2-300x219.png 300w, https://alain.arditi.fr/wp-content/uploads/2021/02/memory-2-768x562.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Utilisation de la mémoire. Rien à signaler coté mémoire.</figcaption></figure>



<hr class="wp-block-separator" id="block-6b9650f8-5b4f-4d74-a600-b86aa5c52ace"/>



<p id="block-ac71ef56-4781-48ad-b9e7-9d4d8897ee15">Les métriques coté JMeter sont les suivantes. La granularité des JMeter est de 1 minutes, c&rsquo;est donc beaucoup plus précis dans notre cas que les graphes Munin.</p>



<figure class="wp-block-image size-large" id="block-26bac8aa-e23d-4e88-9808-b2b883db893b"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotLatenciesOverTime-1.png"><img loading="lazy" decoding="async" width="680" height="400" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotLatenciesOverTime-1.png" alt="" class="wp-image-374" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/flotLatenciesOverTime-1.png 680w, https://alain.arditi.fr/wp-content/uploads/2021/02/flotLatenciesOverTime-1-300x176.png 300w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>La latence des pages (TTFB) en fonction du temps.</figcaption></figure>



<p id="block-88a5a617-3eea-4969-99fa-8bfbe2620bf8">La latence ne varie pas jusqu&rsquo;à 8h20 puis elle se disperse. En fait lorsque la machine est saturée, comme on atteint une limite de débit, les latences s&rsquo;allongent.</p>



<figure class="wp-block-image size-large" id="block-cd47e4d5-9712-486b-bb5d-cf4925ed9014"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotResponseTimesOverTime-1.png"><img loading="lazy" decoding="async" width="680" height="400" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotResponseTimesOverTime-1.png" alt="" class="wp-image-375" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/flotResponseTimesOverTime-1.png 680w, https://alain.arditi.fr/wp-content/uploads/2021/02/flotResponseTimesOverTime-1-300x176.png 300w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Les temps de réponse des pages en fonction du temps</figcaption></figure>



<p id="block-02627096-1614-42e2-a02c-dc5e3b16a94b">Même constat, les temps de réponse s&rsquo;allongent à partir de 8h20.</p>



<figure class="wp-block-image size-large" id="block-29584a5a-981a-4942-93c2-5d700d398382"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/flotBytesThroughputOverTime-1.png"><img loading="lazy" decoding="async" width="680" height="400" src="https://alain.arditi.fr/wp-content/uploads/2021/02/flotBytesThroughputOverTime-1.png" alt="" class="wp-image-376" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/flotBytesThroughputOverTime-1.png 680w, https://alain.arditi.fr/wp-content/uploads/2021/02/flotBytesThroughputOverTime-1-300x176.png 300w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Graphes de débit réseau en MBps (octets) par seconde.</figcaption></figure>



<p>Et le débit ne suit pas les threads&#8230;..</p>



<p>Conclusions à tirer de ce troisième test :</p>



<ol class="wp-block-list"><li>On a réussi à saturer la VM vers 65 threads.</li><li>La contention apparaît au niveau du réseau. La VM n&rsquo;arrive pas à fournir plus de 15 Mbps.</li><li>Au delà de 65 threads, la VM répond, mais les temps de réponse s&rsquo;allongent et elle produit des erreurs.</li></ol>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-d0b3c9c8 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p><a href="https://alain.arditi.fr/2021/02/13/booster-son-wordpress-avec-varnish-3-4/">Précédent : Booster son WordPress avec Varnish 3/4</a></p>
</div>



<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow">
<p><a href="https://alain.arditi.fr/2021/02/12/booster-son-wordpress-avec-varnish-5-4/">Suivant : Booster son WordPress avec Varnish 5/4</a></p>
</div>
</div>



<p></p>
<p>L’article <a href="https://alain.arditi.fr/2021/02/12/booster-son-wordpress-avec-varnish-4-4/">Booster son WordPress avec Varnish 4/4</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Booster son WordPress avec Varnish 5/4</title>
		<link>https://alain.arditi.fr/2021/02/12/booster-son-wordpress-avec-varnish-5-4/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Fri, 12 Feb 2021 21:23:40 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Varnish]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=393</guid>

					<description><![CDATA[<p>Booster son WordPress avec Varnish : la conclusion gagnante en faveur de Varnish</p>
<p>L’article <a href="https://alain.arditi.fr/2021/02/12/booster-son-wordpress-avec-varnish-5-4/">Booster son WordPress avec Varnish 5/4</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Il manquait une conclusion à ces différents essais pour booster WordPress  et une vue globale des graphes.</p>



<p>Alors voici les courbes des 3 tests, juxtaposées.</p>



<p>La courbe de gauche correspond au premier scénario avec 40 threads servis par Apache sans Varnish. Dans ce cas WordPress va récupérer le contenu des pages générées par le plugin WP Fastest Cache sur le disque puis renvoyer la page au client. Dans ce premier scénario Nginx génère le SSL et Apache renvoie les pages.</p>



<p>On voit lors de la comparaison que le comportement à 40 threads est perturbé car on ne trouve pas de plateau de 10 minutes. On a une décroissance des métriques qui montre qu&rsquo;il y a une saturation pour servir les pages à cette fréquence. A 40 threads on est un peu au delà  de ce que peut supporter la VM. Cette valeur n&rsquo;est pas arrivée par hasard, c&rsquo;est la conséquence de multiples essais pour trouver le point de saturation.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-3.png"><img loading="lazy" decoding="async" width="340" height="494" src="https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-3.png" alt="" class="wp-image-395" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-3.png 340w, https://alain.arditi.fr/wp-content/uploads/2021/02/apache_accesses-3-206x300.png 206w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de requêtes servies par Apache par seconde</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-3.png"><img loading="lazy" decoding="async" width="337" height="596" src="https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-3.png" alt="" class="wp-image-396" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-3.png 337w, https://alain.arditi.fr/wp-content/uploads/2021/02/cpu-3-170x300.png 170w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Utilisation de la CPU</figcaption></figure></div>



<p>La CPU suit le nombre de requêtes servies par Apache qui utilise principalement la CPU. On voit la saturation à 22h30 sur la CPU. Quand on ajoute Varnish, le serveur ne travaille presque plus ! Le reste de la CPU provient d&rsquo;une page dynamique du scénario qui ne peut pas être cachée par Varnish.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-4.png"><img loading="lazy" decoding="async" width="339" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-4.png" alt="" class="wp-image-401" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-4.png 339w, https://alain.arditi.fr/wp-content/uploads/2021/02/nginx_request-4-203x300.png 203w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Nombre de requêtes servies par WordPress par seconde</figcaption></figure></div>



<p>Avec Varnish à 40 threads, il  n&rsquo;y a aucune saturation. La VM sert 30% de requêtes en plus. C&rsquo;est pour cette raison qu&rsquo;on pousse la VM avec un test à 80 threads, qui montre un doublement de la tenue en charge par rapport à Apache tout seul. On n&rsquo;a pas de doublement par rapport au scénario Varnish 40 threads, ce qui montre qu&rsquo;il y a une saturation, qui se produit à 8H20 avant d&rsquo;atteindre les 80 threads.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-4.png"><img loading="lazy" decoding="async" width="339" height="500" src="https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-4.png" alt="" class="wp-image-400" srcset="https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-4.png 339w, https://alain.arditi.fr/wp-content/uploads/2021/02/if_enp0s3-4-203x300.png 203w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></a><figcaption>Débit réseau de la VM en Mbps</figcaption></figure></div>



<p>L&rsquo;autre indicateur qui montre la saturation à 80 threads est le taux d&rsquo;erreur des requêtes qui monte à 7%. Le serveur n&rsquo;arrive plus à suivre et génère des erreurs, on voit aussi sur le graphe réseau une légère diminution du débit. En conclusion là aussi on atteint la limite de la VM avec un débit de 15,5 Mbps et 360 requêtes par secondes.</p>



<p>Dans le scénario, on ne récupère que les pages HTML, qui sont relativement légères, quelques Ko, sauf une qui pèse 100Ko. On imagine que si on traitait les images/CSS/JS on aurait une saturation bien plus rapide. On peut imaginer que ces éléments soient servis par un CDN qui déchargerait le WordPress. Donc notre test pourrait se rapprocher de conditions réelles si on utilisait un CDN en plus.</p>



<p>Par contre, que représentent 360 requêtes par seconde ?</p>



<p>Ca dépend de la manière dont naviguent les internautes. Est-ce qu&rsquo;un internaute parcourt 5 pages du site, est-ce qu&rsquo;il en parcourt une centaine, comme sur les catalogues ? Est-ce qu&rsquo;il ne regarde qu&rsquo;une seule page, parce qu&rsquo;il arrive d&rsquo;un moteur de recherche ?</p>



<p>A chaque site sa réalité. On va faire un petit calcul théorique sur la base d&rsquo;un parcours de 5 pages par visite, un peu comme un journal, avec l&rsquo;heure d&rsquo;affluence autour de 9h, à l&rsquo;arrivé au bureau et à 18h.</p>



<p>On estime que l&rsquo;heure de 9h représente 20% du trafic de la journée. C&rsquo;est à cette heure là qu&rsquo;on atteint le débit maximal. Si on veut savoir ce que représentent nos 360 requêtes/s, on suppose que ce pic se produit pendant cette heure. Cas théorique où le serveur produirait 360 pages à la seconde sans faiblir pendant 1 heure.</p>



<p>En 1 heure, le site aura produit 360&#215;3600 = 1 296 000 pages. Comme chaque internaute regarde 5 pages, on aura eu l&rsquo;équivalent de 259 200 visites pendant cette heure. Cette heure représente 20% du trafic journalier, donc en 1 jour on aura eu 1 296 000 visites !</p>



<p>Reste à extrapoler au mois. Si on considère que le Lundi matin est le jour de pointe et qu&rsquo;il représente le tiers du trafic des autres jours,  en une semaine on aura eu 1 296 000 x 3 = 3 888 000 visites. Et en 1 mois, on en aura 4 fois plus, soit : <strong>15 552 000 visites par mois !</strong></p>



<p>Et tout ça servi par un WordPress sur une VM avec 1 vpcu et 500 Mo de RAM, 1 Varnish, 1 Nginx pour le SSL et un CDN pour servir les éléments statiques.</p>



<p>Ces chiffres sont relativement optimistes, on n&rsquo;a pas de sessions, pas de commentaires, par d&rsquo;éléments à rafraîchir, on est dans un cas idéal pour les performances. Néanmoins, on peut constater que lorsqu&rsquo;on arrive à mettre des pages en cache, on peut arriver à des performances exceptionnelles !</p>



<p>Et si on n&rsquo;a pas un site statique, on voit l&rsquo;importance de mettre des bouts d&rsquo;Ajax pour les éléments dynamiques dans des pages statiques pour pouvoir bénéficier des effets de cache. Mais bien sûr dans ces architectures, il est fondamental de vérifier qu&rsquo;on a bien des éléments statiques qui ne varient pas selon l&rsquo;utilisateur. Et on s&rsquo;aperçoit souvent qu&rsquo;il reste des petits bouts dynamiques dans les pages qui empêchent toute mise en cache et font tomber les performances malgré des infrastructures archi musclées. Dommage !</p>



<p><a href="https://alain.arditi.fr/2021/02/16/booster-son-wordpress-avec-varnish-4-4/">Précédent : Booster son WordPress avec Varnish 4/4</a></p>



<p class="has-white-background-color has-background">Références :<br>WordPress : <a href="https://wordpress.org" target="_blank" rel="noreferrer noopener">https://wordpress.org</a><br>Varnish : <a href="https://varnish-cache.org/" target="_blank" rel="noreferrer noopener">https://varnish-cache.org</a><br>Munin : <a href="http://munin-monitoring.org/" target="_blank" rel="noreferrer noopener">http://munin-monitoring.org</a><br>JMeter : <a href="https://jmeter.apache.org/" target="_blank" rel="noreferrer noopener">https://jmeter.apache.org</a></p>



<p></p>
<p>L’article <a href="https://alain.arditi.fr/2021/02/12/booster-son-wordpress-avec-varnish-5-4/">Booster son WordPress avec Varnish 5/4</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
