Si vous travaillez avec un site qui se développe progressivement - le nombre de produits augmente, le trafic provenant de la publicité - alors tôt ou tard vous devrez passer en mode de fonctionnement haute charge, charges de serveur élevées. Mais que se passe-t-il si votre site ne se développe pas, que le serveur tombe de plus en plus en panne et qu'un blocage des données se produit ? C'est à cette problématique que nous avons été confrontés, en finalisant le site internet d'une boutique en ligne de matériel d'éclairage avec un assortiment de plus de 100 000 produits.
situation initiale
Le projet était situé sur un serveur qui disposait de suffisamment de ressources pour assurer un fonctionnement rapide et fluide du site, même sous des charges très élevées. Cependant, le serveur n'a pas répondu aux actions des utilisateurs ou a répondu très lentement, dès que le trafic du site a augmenté même légèrement.
Trouver le problème
Nous avons effectué un audit des paramètres du serveur et du site, en divisant le travail en deux étapes : analyse du back-end et du front-end, et avons constaté une faible vitesse de chargement des pages sur le back-end - environ 80 secondes sur les pages les plus visitées , ce qui a finalement conduit à une diminution significative de la conversion.
Nous avons découvert que le problème principal était un cache et une configuration de base de données mal configurés.
En conséquence, un plan d'action en quatre étapes a été élaboré, ce qui nous a permis d'obtenir de bons résultats. Qu'avons-nous fait?
Décision
Étape 1. Configuration de la base de données
MySQL , . , , , SWAP, , , .
2. InnoDB
InnoDB?
InnoDB , MyISAM, . InnoDB .
InnoDB – InnoDB , MyISAM . , , / . , InnoDB .
InnoDB. , :
# InnoDB parameters
innodb_file_per_table
innodb_flush_log_at_trx_commit
innodb_flush_method
innodb_buffer_pool_size
innodb_log_file_size
innodb_buffer_pool_instances
innodb_file_format
innodb_locks_unsafe_for_binlog
innodb_autoinc_lock_mode
transaction-isolation
innodb-data-file-path
innodb_log_buffer_size
innodb_io_capacity
innodb_io_capacity_max
innodb_checksum_algorithm
innodb_read_io_threads
innodb_write_io_threads
1 2 - , .
.
3. Nginx brotli, pagespeed, proxy_buffering
Nginx , , . Nginx , , , Mail.Ru, . , Nginx (proxy_buffering) (proxy_cache), .
Nginx. - , , , . client_max_body_size, Nginx .
4. PHP-FPM Memcache Apache
PHP-FPM - Nginx. , PHP-FPM. , Nginx + Apache.
Apache . , Apache , . Apache, , .
PHP-FPM unix socket. ? Nginx -, . PHP-FPM. , unix socket – PHP-FPM, .
1. 24 3 , 5-8 .
2. .
3. - .
4. 30%, , S, : => => => .
5. front-end . :
webp;
lazyload- ;
.
Nous avons rendu le site plus rapide et résolu les problèmes de chargement sans changer le code. La vitesse du site affecte de nombreux indicateurs : de la convivialité au classement du site dans les résultats de recherche, qui affecte finalement la conversion.