6 juillet 2022

Accélérez WordPress et maximisez les performances de MySQL via la connexion Unix Domain Socket

Les sockets de domaine Unix améliorent-ils les performances de WordPress via une connexion localhost ? Voyons cette astuce simple ensemble.

La communication inter-processus sur une seule machine est une fonctionnalité essentielle pour de nombreux systèmes informatiques. Il existe deux façons principales d'établir des connexions locales : via le protocole TCP/IP et via Unix Domain Socket (UDS). Le protocole TCP/IP est une norme de communication entre les appareils sur un réseau et est utilisé pour la communication entre les processus sur une seule machine, ainsi que pour la communication entre les machines sur un réseau. D'autre part, les sockets de domaine Unix sont un mécanisme de communication utilisé exclusivement pour la communication inter-processus sur une seule machine. Ces deux options offrent des avantages et des inconvénients en fonction des besoins spécifiques de votre système. Dans cet article, nous allons explorer ces deux modes de communication en détail et voir comment choisir celui qui correspond le mieux à vos besoins.

Aussi passionnant que cela puisse être, tester, essayer, expérimenter de nouvelles technologies, serveurs web, configurations, au final l'objectif ultime est toujours de faire mieux.

Dans un article précédent, nous avons comparé la vitesse, le débit et les avantages que l'on peut obtenir en utilisant les sockets de domaine Unix plutôt que des sockets TCP pour établir une connexion avec une base de données MySQL.

Parce qu'essentiellement, avoir une base de données locale et se connecter via TCP comme s'il s'agissait d'une base de données distante implique nécessairement toutes les opérations au niveau TCP pour établir une connexion, tout d'abord la prise de contact à trois voies TCP.

Poignée de main à trois voies

Ce processus implique nécessairement des opérations supplémentaires au niveau du réseau, et une latence plus importante que l'ouverture d'un descripteur de fichier UNIX, rendant effectivement la connexion de notre CMS WordPress (mais le discours est valable pour tout autre CMS) plus lente et moins performante par rapport à l'utilisation d'UNIX PRISE DE DOMAINE.

Les avantages que nous avons déjà largement vus dans l'article précédent qui traitait de la différence de performances entre les connexions MySQL via socket plutôt que MySQL via TCP, mais évidemment un article technique peut être inutile s'il n'est pas adapté à notre objectif qui est de rendre notre installation WordPress ou WooCommerce plus performante.

Les sockets de domaine Unix améliorent-ils les performances des requêtes WordPress ?

Panoramica

Améliorez la vitesse de communication entre votre système WordPress et la base de données MySQL en modifiant simplement le fichier de configuration. Apprenez à utiliser les sockets de domaine Unix sur les systèmes Linux pour accélérer votre site WordPress. Dans ce guide, nous vous donnerons une explication détaillée du processus et des résultats des tests qui vont modifier votre constante DB_HOST défini dans wp-config qui par défaut à la valeur normalement hôte local ou 127.0.0.1.

Ce didacticiel vous montrera comment procéder, expliquera le raisonnement sous-jacent et testera les résultats.

Procédure d'utilisation des sockets de domaine Unix avec WordPress.

Le codex WordPress explique cette technique dans la documentation d'édition de fichiers wp-config.php, va illustrer les méthodes de montage qui sont très simples et à la portée de tous.

Configuration UDS WP

Il suffit d'ouvrir le fichier/wp-config.php dans un éditeur, puis recherchez une ligne qui ressemble à ceci :

define( 'DB_HOST', 'localhost' );

et en le remplaçant par cette valeur :

define( 'DB_HOST', 'localhost:/var/lib/mysql/mysql.sock' );

vous aurez modifié votre configuration WordPress pour utiliser le descripteur de fichier de socket MySQL plutôt que la connexion TCP.

ATTENTION : Si votre Hébergeur utilise un serveur MySQL distant et non local, vous ne pourrez en aucun cas utiliser cette procédure et vous devrez vous contenter d'utiliser l'adresse IP distante et donc établir une connexion en TCP Sur IP.

Résolution des problèmes connus

Si la configuration ci-dessus ne fonctionne pas et bien que la base de données s'exécute localement et que vous ayez un accès shell Linux à votre hébergeur, vous pouvez vérifier le nom du socket de domaine Unix à l'aide de la commande lsof ce qui signifie lister les fichiers ouverts, ou la liste des fichiers ouverts.

La commande lsof n'est peut-être pas installée, mais vous pouvez le faire via l'utilitaire apt ou yum si vous disposez des privilèges root, ou demander à votre hébergeur de l'installer.

[root@Server174 ~]# lsof -U | grep mysql mysqld 28112 mysql 18u unix 0x0000000006388651 0t0 777704714 /var/lib/mysql/mysql.sock mysqld 28112 mysql 25u unix 0x0000000019e2551a 0t0 1143856963

Cette commande fonctionnera à la fois pour les bases de données MySQL et MariaDB qui sont nos très bonnes et préférées Serveur Percona. Si vous ne voyez pas de sortie similaire à celle illustrée ci-dessus, un socket de domaine Unix n'est pas disponible pour vous. Si vous obtenez une liste, mais que le chemin du socket est différent de/var/run/mysqld/mysqld.sock, copiez le bon chemin de socket et collez-le dans le vôtre wp-config.php après localhost:dans ta définition DB_HOST

Par exemple, dans les systèmes RedHat Linux dérivés, tels que RHEL lui-même, CentOS, Fedora, Almalinux, Rockylinux, Scientific Linux, le chemin est normalement /var/lib/mysql/mysql.sock

Apportons quelques précisions sur les sockets de domaine UNIX

De mauvaises informations circulent sur Internet à ce sujet et cela peut entraîner des erreurs de connexion, l'accessibilité du site ou beaucoup de confusion. Essayons donc de clarifier.

  • Les sockets de domaine Unix sont très fiables
    La commande lsof utilisée pour afficher les sockets ouverts peut afficher le type d'UDS STREAM, ce qui indique qu'il s'agit d'un SOCK_STREAM UDS qui garantit la livraison des données dans l'ordre. Ce type de socket est particulièrement adapté pour transmettre des données en flux continu. Il est très rare qu'un serveur de base de données utilise un datagramme UDS car ces sockets sont mieux adaptés pour transmettre des données non structurées et ne garantissent pas une livraison ordonnée des données. En général, les serveurs de bases de données nécessitent une livraison fiable et ordonnée des données, ils sont donc plus susceptibles d'utiliser des sockets de type STREAM. Pour référence, voir la définition de SOCK_STREAM .
  • Unix Domain Socket est plus rapide que TCP
    La fonction socket() est un composant fondamental dans la création de connexions de communication inter-processus. Lorsqu'elles sont appelées avec un domaine de socket AF_INET ou AF_INET6, quelle que soit l'adresse IP utilisée, toutes les communications auront une surcharge de protocole TCP/IP. Cependant, les sockets de domaine Unix offrent une alternative à la communication interprocessus (IPC) avec une surcharge de traitement nettement inférieure à celle de TCP/IP. Ces sockets sont une option idéale pour les systèmes qui nécessitent une communication à haut débit et une faible quantité de traitement.
  • La différence de performance n'est pas si grande.
    Le pilote de bouclage TCP/IP sous Linux, pour optimiser son fonctionnement, adopte certaines techniques telles que l'évitement de la génération et de la vérification de la somme de contrôle. Les benchmarks montrent que le passage de TCP/IP aux sockets de domaine UNIX améliore à la fois la latence de connexion et la vitesse de transfert de données. En particulier, plus il y a de données transférées par requête, plus le taux de transfert de données sera rapide. Par exemple, WordPress étant un système qui utilise de grands ensembles de données et de nombreuses requêtes de base de données lors de l'enregistrement ou de l'affichage d'une page Web, l'utilisation d'UNIX DOMAIN SOCKET peut améliorer les performances du système. Cependant, il faut noter que lorsque la base de données WordPress est sur l'hébergeur local, les requêtes ne prennent que 3% à 6% du temps d'exécution lors du chargement d'une page. Par conséquent, vous ne constaterez peut-être une amélioration de la vitesse que sur les sites Web à fort trafic et gourmands en données.
  • L'utilisation des Unix Domain Sockets permet d'éviter la saturation des ports TCP
    Le nombre de ports disponibles pour les connexions TCP est limité et la saturation des ports peut entraîner des problèmes de performances sur un serveur. En outre, un grand nombre de connexions TCP globales peut entraîner une surcharge du système et une dégradation des performances. En utilisant UDS, au lieu de créer de nouvelles connexions TCP, un système de fichiers est utilisé pour créer un point de connexion entre les processus, évitant ainsi la saturation des ports et des connexions du serveur global.
  • L'utilisation d'Unix Domain Sockets permet une plus grande sécurité
    L'utilisation d'UDS permet une plus grande sécurité et un meilleur contrôle que les connexions TCP, car UDS peut utiliser des contrôles d'accès au système de fichiers pour autoriser ou refuser l'accès aux processus. Bien qu'il s'agisse d'un aspect marginal puisque TCP/IP permet également des mécanismes de pare-feu, ou une liaison d'instance sur des adresses IP privées telles que localhost, et dans tous les cas, le service nécessite une connexion à l'aide d'informations d'identification, il est juste de dire que la sécurité est meilleure avec l'utilisation de UDS.

Comment fonctionne cette approche ?

TCP/IP est un protocole de communication réseau. Une poignée de main à trois voies (la poignée de main à trois voies susmentionnée) doit d'abord être effectuée afin d'établir ensuite une connexion réseau TCP / IP et que les données puissent être envoyées.

Ensuite, toutes les données envoyées sont d'abord divisées en paquets plus petits (ceci est nécessaire pour un partage efficace de la bande passante du réseau). La source et la destination sont ajoutées à une enveloppe autour de chaque paquet de données. Les données de vérification des erreurs sont calculées et également ajoutées à l'enveloppe. Un numéro de séquence est également ajouté à l'enveloppe afin que le destinataire puisse corriger tout paquet de données hors service. Des données supplémentaires sont également ajoutées à chaque enveloppe de paquet pour aider à identifier et acheminer le paquet sur les réseaux locaux. Le destinataire doit vérifier et corriger tous les paquets hors service, vérifier chaque paquet pour les erreurs, envoyer un accusé de réception pour chaque paquet et réassembler le bloc de données d'origine à partir des données de chaque paquet.

Remarque : Le calcul de la somme de contrôle et la vérification des erreurs sont ignorés pour les connexions localhost sur les systèmes Linux modernes.

Les sockets de domaine Unix (sockets de domaine Unix) n'ont pas besoin de cette fragmentation et de ce traitement de données supplémentaires.  Ils fonctionnent plus comme la lecture et l'écriture dans un fichier, mais contrairement à un fichier normal, les données sont transmises à la mémoire système plutôt qu'à un lecteur de disque. Pour cette raison, les sockets de domaine Unix déplacent les données plus rapidement et plus efficacement que TCP / IP, en particulier lorsque vous êtes équipé d'une RAM rapide au niveau matériel.

Tester le résultat d'une requête MySQL

 

Nous voulions tester une requête dans notre environnement de test et avons obtenu des résultats intéressants. Le tableau ci-dessus montre des exemples de temps de chargement de pages WordPress utilisant TCP/IP et Unix Domain Sockets comme méthode de connexion à la base de données. Il y a eu une amélioration moyenne de la vitesse de plus de 25 % avec les sockets de domaine Unix.

A la base ce n'était pas nouveau et c'était déjà largement documenté sur le net, notamment le test de Percona, la société qui développe et supporte Percona Server qui avait déjà montré et démontré cette fonctionnalité et les avantages d'utiliser UNIX DOMAIN SOCKET au lieu de TCP/IP .

domaine de socket unix

Si vous êtes intéressé à lire leurs résultats concernant la qualité de cette technique, nous vous invitons à lire ce post : https://www.percona.com/blog/2020/04/13/need-to-connect-to-a-local-mysql-server-use-unix-domain-socket/

Quels bénéfices en attendre et quand l'utiliser ?

On parle en fait d'un secret de pulcinella, aussi simple à mettre en oeuvre que peu utilisé. Nous migrons des dizaines de sites Web WordPress et WooCommerce chaque jour et nous utilisons toujours (et toujours signifie toujours, c'est-à-dire 100 % des cas) en utilisant localhost ou 127.0.0.1 dans la configuration wp-config.php

Certes, appliquer une virtuosité telle que celle décrite est à la portée de tous même en faisant de simples tentatives, cependant l'obtention de résultats tangibles n'a de sens qu'une fois résolus les autres problèmes de performance.

Par exemple, il serait inutile de récupérer 5ms de vitesse et d'avoir ensuite 1 seconde de latence du fait du manque d'index sur les tables, ou d'avoir des limites de performances TCP dues au manque de TCP BBR par exemple.

Il en est autrement dans le cas où des opérations massives sont réalisées sur la base de données, comme des importations de catalogues CSV sur WooCommerce, des changements massifs de prix, ou des opérations de ce type, dont le crawl du sitemap par les crawlers de Google.

Bref, cette astuce doit être considérée comme la cerise sur le gâteau, capable d'améliorer quelque chose de déjà bien de lui et tout Processus d'optimisation des performances de WordPress que nous avons déjà longuement décrit, et ne fera certainement pas de miracles.

Avec l'avènement de Google Vitaux Web de base et de l'exigence imposée par Google pour obtenir un site Web rapide et performant, cependant, même quelques millisecondes peuvent être des valeurs importantes à prendre en considération en vue d'une stratégie d'optimisation et d'amélioration beaucoup plus large et plus productive.

Le meilleur retour sur cette technique est sûrement ce qu'elle peut vous apporter Serveurs Dédiés et des instances dédiées telles que Cloud ou VPS, dimensionnées de manière adéquate au niveau des ressources et configurées de manière experte au niveau du logiciel de réglage.

conclusion

Comme mentionné ci-dessus, si la base de données est sur l'hôte local, les requêtes de base de données représentent moins de 6% du temps d'exécution pendant que WordPress traite une requête. L'effet global du passage de TCP/IP aux sockets de domaine Unix sera à peine perceptible, sauf sur les sites Web très fréquentés. Mais pour un changement aussi simple, pourquoi ne pas économiser du temps de traitement et de la consommation d'énergie en évitant également de saturer les ports TCP ?

Découvrez comment Unix Domain Sockets peut améliorer les performances de votre système et réduire la latence. Contactez notre support pour en savoir plus sur ce sujet et tirer le meilleur parti de votre système.

Vous avez des doutes ? Vous ne savez pas par où commencer ? Contactez-nous !

Nous avons toutes les réponses à vos questions pour vous aider à faire le bon choix.

Discute avec nous

Discutez directement avec notre support avant-vente.

0256569681

Contactez-nous par téléphone pendant les heures de bureau 9h30 - 19h30

Contactez-nous en ligne

Ouvrez une demande directement dans l'espace contact.

INFORMATIONS

Managed Server Srl est un acteur italien leader dans la fourniture de solutions système GNU/Linux avancées orientées vers la haute performance. Avec un modèle d'abonnement peu coûteux et prévisible, nous garantissons que nos clients ont accès à des technologies avancées en matière d'hébergement, de serveurs dédiés et de services cloud. En plus de cela, nous proposons des conseils système sur les systèmes Linux et une maintenance spécialisée en SGBD, sécurité informatique, Cloud et bien plus encore. Nous nous distinguons par notre expertise dans l'hébergement de CMS Open Source de premier plan tels que WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart et Magento, soutenus par un service d'assistance et de conseil de haut niveau adapté aux administrations publiques, aux PME et à toutes tailles.

Red Hat, Inc. détient les droits de Red Hat®, RHEL®, RedHat Linux® et CentOS® ; AlmaLinux™ est une marque commerciale d'AlmaLinux OS Foundation ; Rocky Linux® est une marque déposée de la Rocky Linux Foundation ; SUSE® est une marque déposée de SUSE LLC ; Canonical Ltd. détient les droits sur Ubuntu® ; Software in the Public Interest, Inc. détient les droits sur Debian® ; Linus Torvalds détient les droits sur Linux® ; FreeBSD® est une marque déposée de la FreeBSD Foundation ; NetBSD® est une marque déposée de la Fondation NetBSD ; OpenBSD® est une marque déposée de Theo de Raadt. Oracle Corporation détient les droits sur Oracle®, MySQL® et MyRocks® ; Percona® est une marque déposée de Percona LLC ; MariaDB® est une marque déposée de MariaDB Corporation Ab ; REDIS® est une marque déposée de Redis Labs Ltd. F5 Networks, Inc. détient les droits sur NGINX® et NGINX Plus® ; Varnish® est une marque déposée de Varnish Software AB. Adobe Inc. détient les droits sur Magento® ; PrestaShop® est une marque déposée de PrestaShop SA ; OpenCart® est une marque déposée d'OpenCart Limited. Automattic Inc. détient les droits sur WordPress®, WooCommerce® et JetPack® ; Open Source Matters, Inc. détient les droits sur Joomla® ; Dries Buytaert détient les droits sur Drupal®. Amazon Web Services, Inc. détient les droits sur AWS® ; Google LLC détient les droits sur Google Cloud™ et Chrome™ ; Facebook, Inc. détient les droits sur Facebook® ; Microsoft Corporation détient les droits sur Microsoft®, Azure® et Internet Explorer® ; La Fondation Mozilla détient les droits sur Firefox®. Apache® est une marque déposée de The Apache Software Foundation ; PHP® est une marque déposée du groupe PHP. CloudFlare® est une marque déposée de Cloudflare, Inc. ; NETSCOUT® est une marque déposée de NETSCOUT Systems Inc. ; ElasticSearch®, LogStash® et Kibana® sont des marques déposées d'Elastic NV. Ce site n'est affilié, sponsorisé ou autrement associé à aucune des entités mentionnées ci-dessus et ne représente aucune de ces entités de quelque manière que ce soit. Tous les droits sur les marques et noms de produits mentionnés sont la propriété de leurs titulaires respectifs des droits d'auteur. Toutes les autres marques mentionnées appartiennent à leurs titulaires. MANAGED SERVER® est une marque déposée au niveau européen par MANAGED SERVER SRL Via Enzo Ferrari, 9 62012 Civitanova Marche (MC) Italie.

JUSTE UN MOMENT !

Souhaitez-vous voir comment votre WooCommerce fonctionne sur nos systèmes sans avoir à migrer quoi que ce soit ? 

Entrez l'adresse de votre site WooCommerce et vous obtiendrez une démonstration navigable, sans avoir à faire absolument quoi que ce soit et entièrement gratuite.

Non merci, mes clients préfèrent le site lent.
Retour en haut de page