Consigli software
È necessario il seguente software per le istanze di produzione di Commerce:
- PHP
- Nginx e PHP-FPM
- MySQL
- Elasticsearch o OpenSearch
Per le distribuzioni su più server o per gli esercenti che pianificano la scalabilità della propria attività, consigliamo quanto segue:
- Cache Varnish
- Redis per sessioni (da 2.0.6+)
- Un'istanza Redis separata come cache predefinita (non utilizzare questa istanza per la cache delle pagine)
Per informazioni sulle versioni supportate di ciascun tipo di software, vedere requisiti di sistema.
Sistema operativo
Le configurazioni e le ottimizzazioni del sistema operativo sono simili per Commerce rispetto ad altre applicazioni Web ad alto carico. Con l'aumento del numero di connessioni simultanee gestite dal server, il numero di socket disponibili può essere completamente allocato. Il kernel Linux supporta un meccanismo per "riutilizzare" le connessioni TCP. Per abilitare questo meccanismo, impostare il valore seguente in /etc/sysctl.conf
:
net.ipv4.tcp_tw_reuse = 1
Il parametro kernel net.core.somaxconn
controlla il numero massimo di socket aperti in attesa di connessioni. Questo valore può essere aumentato in modo sicuro a 1024, ma dovrebbe essere correlato alla capacità del server di gestire tale quantità. Per abilitare questo parametro del kernel, impostare il valore seguente in /etc/sysctl.conf
:
net.core.somaxconn = 1024
PHP
Il Magento supporta pienamente PHP 7.3 e 7.4. Ci sono diversi fattori da tenere in considerazione quando si configura PHP per ottenere la massima velocità ed efficienza nell’elaborazione delle richieste.
Estensioni PHP
È consigliabile limitare l'elenco delle estensioni PHP attive a quelle necessarie per la funzionalità Commerce.
Magento Open Source e Adobe Commerce:
- ext-bcmath
- ext-ctype
- ext-curl
- ext-dom
- ext-fileinfo
- int-gd
- ext-hash
- ext-iconv
- int-est
- ext-json
- ext-libxml
- ext-mbstring
- ext-openssl
- pcre esterno
- ext-pdo_mysql
- ext-simplexml
- ext-soap
- socket di testo
- int-sodio
- ext-tokenizer
- ext-xmlwriter
- ext-xsl
- ext-zip
- lib-libxml
- lib-openssl
Inoltre, Adobe Commerce richiede:
- ext-bcmath
- ext-ctype
- ext-curl
- ext-dom
- ext-fileinfo
- int-gd
- ext-hash
- ext-iconv
- int-est
- ext-json
- ext-libxml
- ext-mbstring
- ext-openssl
- pcre esterno
- ext-pdo_mysql
- ext-simplexml
- ext-soap
- socket di testo
- int-sodio
- ext-spl
- ext-tokenizer
- ext-xmlwriter
- ext-xsl
- ext-zip
- lib-libxml
- lib-openssl
L'aggiunta di più estensioni aumenta i tempi di caricamento della libreria.
Impostazioni PHP
Per garantire la corretta esecuzione di tutte le Commerce istanze senza scaricare dati o codice su disco, impostare il limite di memoria come segue:
memory_limit=1G
Per il debug, aumentare questo valore a 2G.
Configurazione Realpath_cache
Per migliorare le prestazioni di Commerce, aggiungere o aggiornare le seguenti impostazioni consigliate di realpath_cache
nel file php.ini
. Questa configurazione consente ai processi PHP di memorizzare nella cache i percorsi dei file invece di cercarli ogni volta che viene caricata una pagina. Vedi Ottimizzazione delle prestazioni nella documentazione di PHP.
realpath_cache_size=10M
realpath_cache_ttl=7200
ByteCode
Per ottenere la velocità massima da Commerce su PHP 7, è necessario attivare il modulo OpCache e configurarlo correttamente. Queste impostazioni sono consigliate per il modulo:
opcache.memory_consumption=512
opcache.max_accelerated_files=60000
opcache.consistency_checks=0
opcache.validate_timestamps=0
opcache.enable_cli=1
Quando ottimizzi l’allocazione di memoria per opcache, tieni conto delle dimensioni della base di codice del Magento e di tutte le estensioni. Il team delle prestazioni del Magento utilizza i valori dell’esempio precedente per il test, perché fornisce spazio sufficiente in opcache per il numero medio di estensioni installate.
Se la memoria del computer è insufficiente e non sono installate molte estensioni o personalizzazioni, utilizzare le impostazioni seguenti per ottenere un risultato simile:
opcache.memory_consumption=64
opcache.max_accelerated_files=60000
APCU
È consigliabile abilitare l'estensione APCu PHP e configurare composer
per supportarla per ottimizzare le prestazioni. Questa estensione memorizza nella cache i percorsi dei file aperti, il che aumenta le prestazioni per Commerce chiamate al server, incluse pagine, chiamate AJAX ed endpoint.
Modifica il file apcu.ini
per includere quanto segue:
extension=apcu.so
[apcu]
apc.enabled = 1
Server web
Magento supporta completamente i server web Nginx e Apache. Commerce fornisce file di configurazione consigliati di esempio nei file <magento_home>/nginx.conf.sample
(Nginx) e <magento_home>.htaccess.sample
(Apache). L'esempio di Nginx contiene impostazioni per prestazioni migliori ed è progettato in modo che sia richiesta una piccola riconfigurazione. Alcune delle best practice di configurazione principali definite nel file di esempio includono:
- Impostazioni per la memorizzazione nella cache del contenuto statico in un browser
- Impostazioni della memoria e del tempo di esecuzione per PHP
- Impostazioni di compressione del contenuto
Devi anche configurare il numero di thread per l’elaborazione delle richieste di input, come elencato di seguito:
MySQL
Questo documento non fornisce istruzioni di ottimizzazione MySQL approfondite perché ogni archivio e ambiente è diverso, ma è possibile formulare alcune raccomandazioni generali.
Sono stati apportati numerosi miglioramenti a MySQL 5.7.9 Siamo certi che MySQL sia distribuito con le impostazioni predefinite corrette. Le impostazioni più critiche sono:
innodb_buffer_pool_instances
innodb_buffer_pool_size
innodb_buffer_pool_instances
e innodb_buffer_pool_size
in modo che ogni istanza del pool di buffer sia di almeno 1 GB.max_connections
max_connections
deve essere correlato al numero totale di thread PHP configurati nel server applicazioni. Una raccomandazione generale sarebbe di 300 per un ambiente di piccole dimensioni e di 1000 per un ambiente di medie dimensioni.innodb_thread_concurrency
innodb_thread_concurrency = 2 * (NumCPUs + NumDisks)
Varnish
Il Magento consiglia vivamente di utilizzare Varnish come server cache a pagina intera per l'archivio. Il modulo PageCache è ancora presente nel codebase, ma deve essere utilizzato solo a scopo di sviluppo. Non deve essere usato insieme o al posto di Varnish.
Installa Varnish in un server separato di fronte al livello Web. Deve accettare tutte le richieste in arrivo e fornire copie delle pagine memorizzate nella cache. Per consentire a Varnish di funzionare in modo efficace con le pagine protette, è possibile inserire un proxy di terminazione SSL davanti a Varnish. Nginx può essere utilizzato per questo scopo.
Commerce distribuisce un file di configurazione di esempio per Varnish (versioni 4 e 5) contenente tutte le impostazioni consigliate per le prestazioni. Tra questi, i più critici in termini di prestazioni sono:
- Il controllo di integrità back-end esegue il polling del server Commerce per determinare se sta rispondendo in modo tempestivo.
- La modalità di tolleranza consente di istruire Varnish a mantenere un oggetto nella cache oltre il periodo TTL (Time to Live) e a distribuire questo contenuto non aggiornato se Commerce non è integro o se non è ancora stato recuperato contenuto nuovo.
- Modalità Saint inserisce nella blacklist Commerce server non integri per un periodo di tempo configurabile. Di conseguenza, i backend non integri non possono gestire il traffico quando si utilizza Varnish come load balancer.
Per ulteriori informazioni sull'implementazione di queste funzionalità, vedere Advanced Varnish configuration.
Ottimizzare le prestazioni delle risorse
In generale, consigliamo di memorizzare le risorse (immagini, JS, CSS, ecc.) su una rete CDN per prestazioni ottimali.
Se il sito non richiede la distribuzione di un numero elevato di impostazioni internazionali e i server si trovano nella stessa area della maggior parte dei clienti, è possibile ottenere significativi miglioramenti delle prestazioni a un costo inferiore archiviando le risorse in Varnish anziché utilizzando una rete CDN.
Per archiviare le risorse in Varnish, aggiungi le seguenti voci VCL nel file default.vcl
generato da Commerce per Varnish 5.
Alla fine dell'istruzione if
per le richieste PURGE nella subroutine vcl_recv
, aggiungere:
# static files are cacheable. remove SSL flag and cookie
if (req.url ~ "^/(pub/)?(media|static)/.*\.(ico|html|css|js|jpg|jpeg|png|gif|tiff|bmp|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)$") {
unset req.http.Https;
unset req.http./* {{ ssl_offloaded_header }} */;
unset req.http.Cookie;
}
Nella subroutine vcl_backend_response
, cercare l'istruzione if
che annulla l'impostazione del cookie per le richieste GET
o HEAD
.
Il blocco if
aggiornato deve essere simile al seguente:
# validate if we need to cache it and prevent from setting cookie
# images, css and js are cacheable by default so we have to remove cookie also
if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) {
unset beresp.http.set-cookie;
if (bereq.url !~ "\.(ico|css|js|jpg|jpeg|png|gif|tiff|bmp|gz|tgz|bz2|tbz|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)(\?|$)") {
set beresp.http.Pragma = "no-cache";
set beresp.http.Expires = "-1";
set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
}
}
Riavvia il server Varnish per eseguire il flushing delle risorse memorizzate nella cache ogni volta che aggiorni il sito o distribuisci/aggiorni le risorse.
Memorizzazione in cache e server di sessione
Magento fornisce una serie di opzioni per memorizzare la cache e i dati di sessione, tra cui Redis, Memcache, file system e database. Alcune di queste opzioni sono discusse di seguito.
Configurazione di un singolo nodo web
Se prevedi di gestire tutto il traffico con un solo nodo web, non avrebbe senso inserire la cache su un server Redis remoto. Utilizzare invece il file system o un server Redis locale. Se si desidera utilizzare il file system, inserire le cartelle della cache in un volume montato su un file system RAM. Se desideri utilizzare un server Redis locale, ti consigliamo vivamente di configurarlo in modo che utilizzi i socket per le connessioni dirette, anziché scambiare dati tramite HTTP.
Configurazione di più nodi web
Per la configurazione di più nodi web, Redis è l’opzione migliore. Poiché Commerce memorizza nella cache molti dati per migliorare le prestazioni, prestare attenzione al canale di rete tra i nodi Web e il server Redis. Non vuoi che il canale diventi un collo di bottiglia per l’elaborazione delle richieste.