Bilanciamento di carico su Magento 2

In questo articolo vedremo come cambiare l’architettura per gestire il bilanciamento di carico di un eCommerce su Magento, dividendo il carico di lavoro per ottenere resilienza nel caso di nodi compromessi.

Una delle problematiche di Magento 2 è il fatto di avere una complessità molto alta e una gestione delle risorse poco efficiente. Lo stack di base di Magento utilizza diversi software estremamente pesanti come Mysql, Varnish, Redis, Elasticsearch e Rabbit.

A meno che non si utilizzino le versioni Cloud Enterprise di Magento potrebbe essere necessario cambiare l’architettura del sistema in modo da poter gestire carichi di lavoro molto alti.

L’architettura standard di Magento ha la seguente struttura:

Questa architettura standard risulta poco efficiente in quanto non consente di isolare eventuali colli di bottiglia dati da alcune componenti.

In base al carico di lavoro che si ha, si potrebbe studiare una architettura diversa portando il database ed Elasticsearch fuori dal nodo principale.

Potenzialmente sarebbe possibile portare anche Redis e Varnish fuori dal nodo primario ma abbiamo visto che tendenzialmente questi due gestori di cache non portano mai il server in sovraccarico. I problemi infatti vengono sempre dal server (apache o nginx), elasticsearch e mysql.

Anche in questa configurazione abbiamo un collo di bottiglia che è il server stesso. Apache o Nginx potrebbero infatti avere un sovraccarico di utilizzo e a meno che non si abbiano a disposizione server di backup che in automatico si attivino per gestire la problematica, otterremo dei down continui.

Per questo motivo è consigliabile l’installazione di un bilanciatore di carico che consente di bilanciare le richieste fra i vari nodi e che quindi consente di ridurre anche i micronodi che contengono l’applicativo.

In questo modo otteniamo una architettura resiliente che anche in caso di down di un nodo, riesce comunque a mantenere il servizio attivo.

Installazione e configurazione di Haproxy

Haproxy è un software open source che fornisce un bilanciamneto di carico fra nodi ad alte performance. La sua installazione è estremamente facile in quanto è scaricabile e installabile tramite apt o yum.

Una volta installato va configurato in modo da gestire frontend e backend dei vari nodi. Una possibile configurazione basilare è la seguente.

Magentofrontend www-http
	bind *:80
	reqadd X-Forwarded-Proto:\ http
	default_backend www-backend

frontend www-https
	bind *:443 ssl crt /etc/haproxy/certs/cert.pem
	reqadd X-Forwarded-Proto:\ https
	default_backend www-backend

backend www-backend
	balance roundrobin
	server www-1 INDIRIZZO_IP:80 check
	server www-2 18.INDIRIZZO_IP:80 check
  • frontend ww-https: gestisce tutte le richeiste che arrivano tramite la porta 80 e sposta quelle richierste al backend chiamato www-backend
  • frontend www-https: gestisce tutte le richieste che arrivano tramite la porta 443 e sposta quelle richieste al backend chiamato www-backend
  • backend www-backend: si occupa di reindirizzare le richieste ai nodi disponibili in lista. In questo caso il bilanciamento settato è stato un roundrobin semplice

Configurazioni di Apache per il bilanciamento del carico di Magento

Una volta settato correttamente Haproxy è possibile impostare apache o nginx in modo che rimangano in ascolto sulla porta 80. Non serve configurare l’ascolto in HTTPS in quanto tutte le richieste vengono già gestite dal nodo di Haproxy che si occupa di restituire i contenuti di Magento sotto SSL.

Una possibile configurazione di Apache è la seguente:

<VirtualHost domainName:81>
ServerName domainName.com
  DocumentRoot "/var/www/html/magento/htdocs"
  
<Directory "/var/www/html/magento/htdocs">
      Options Indexes FollowSymLinks
    AllowOverride All
    <IfVersion < 2.3 >
      Order allow,deny                          
      Allow from all
    </IfVersion>
    <IfVersion >= 2.3 >
      Require all granted
    </IfVersion>
  </Directory>
...
</VirtualHost>

In questo caso abbiamo Apache che è in ascolto sulla porta 81 in quanto tutto il traffico viene gestito da Varnish che è in ascolto sulla porta 80.

Strutturando una architettura come la seguente riusciamo a gestire correttamente il bilanciamento di carico su Magento secondo un algoritmo predefinito e di conseguenza ottimizziamo anche i costi delle macchine in quanto diventa possibile anche spegnere la macchina quando non è utilizzata e riaccenderla quando si va in sovraccarico

Leave a Comment

Your email address will not be published. Required fields are marked *