20 Giugno 2022

Separa il tuo back-end lento dall’importante traffico front-end con PHP-FPM

Vediamo alcuni accorgimenti su come creare due code di processi PHP, uno per il frontend ed uno per il backend.

Backend Frontend

Se stai usando WordPress, WooCommerce, Magento, Shopware, Oxid, un CMS o qualsiasi altro software standard, di solito sia il frontend che il backend utilizzano lo stesso pool fpm applicativo. Anche per le applicazioni sviluppate autonomamente con Symfony o altri framework questo è spesso il caso.

Il back-end/amministratore può quindi includere numerose operazioni lente, operazioni amministrative ed esportazioni di dati che possono richiedere molto tempo. Ciò potrebbe congestionare la coda di elaborazione dei server web riducendo il throughput per i tuoi clienti che potrebbero semplicemente fare clic sul pulsante di pagamento e visualizzare un errore 502 Bad Gateway.

Mettere frontend e backend su server fisici diversi è una soluzione, ma può essere troppo costoso per la maggior parte dei casi d’uso visto che andremo di fatto a raddoppiare i costi per le due macchine o istanze.

Separazione Pool PHP-FPM tra frontend e backend

Una soluzione semplice per questo problema consiste nell’utilizzare diversi pool PHP-FPM per il frontend e il backend, ciascuno con la propria configurazione per il numero massimo di richieste consentite.

Immagina ad esempio di essere il proprietario di un bar ed avere un solo bagno utilizzato sia dai clienti che dai dipendenti. Si possono verificare situazioni spiacevoli, in cui il cliente deve aspettare che il dipendente finisca per poter usare il bagno, o il caso di una coda di persone molto grande, magari ad una festa, ed il dipendente che deve necessariamente mettersi in fila ed aspettare il suo turno.

Capite che una dinamica del genere crei dei disservizi non indifferenti e delle problematiche sia al dipendente che al cliente. Infatti, a causa di ciò è prassi comune ormai vedere dotati esercizi pubblici di bagni riservati ai clienti e bagni riservati ai dipendenti in modo da non dover “mischiare” le code di attesa e le relative priorità.

Lo stesso principio può essere usato a livello server quando vogliamo separare la parte frontend dalla parte backend.

Esempio di amministrazione e frontend Magento

Come appare? Usiamo Magento come esempio, puoi configurare due pool in php-fpm.conf:

; php-fpm.conf [frontend] listen = /var/run/php-fpm-frontend.sock pm = static pm.max_children = 50

[backend] listen = /var/run/php-fpm-backend.sock pm = ondemand pm.max_children = 5 pm.process_idle_timeout = 5 

Il frontend è configurato per un massimo di 50 richieste simultanee e il backend per un massimo di 5 richieste simultanee. I lavoratori di back-end vengono creati su richiesta e i lavoratori di front-end sono statici per evitare il fork overhead. Discuterò le differenze tra le configurazioni del pool PHP-FPM in un futuro post sul blog.

È quindi possibile modificare la configurazione di Nginx vhost per l’installazione di Magento con il seguente interruttore:

server {     // ....

    set $fpm_socket "unix:/var/run/php-fpm-frontend.sock";

    if ($uri ~* "^/admin/") {         set $fpm_socket "unix:/var/run/php-fpm-backend.sock";     }

    location ~ .php$ {         // ...

        fastcgi_pass $fpm_socket;     } } 

In base al ^/adminpercorso nell’uri della richiesta, selezionerà ora il diverso pool FPM PHP e frontend e backend non competeranno più e si ruberanno le risorse a vicenda.

Se invece lavorassimo con WordPress o WooCommerce il percorso sarebbe ^/wp-admin.

Ciò che conta è ovviamente il concetto alla base, ovvero la possibilità di creare code separate e basate su path.

 

Hai dei dubbi? Non sai da dove iniziare? Contattaci !

Abbiamo tutte le risposte alle tue domande per aiutarti nella giusta scelta.

Chatta con noi

Chatta direttamente con il nostro supporto prevendita.

0256569681

Contattaci telefonicamente negli orari d’ufficio 9:30 – 19:30

Contattaci online

Apri una richiesta direttamente nell’area dei contatti.

INFORMAZIONI

Managed Server S.r.l. è un player italiano di riferimento nel fornire soluzioni avanzate di sistemistica GNU/Linux orientate all’alta performance. Con un modello di sottoscrizione dai costi contenuti e prevedibili, ci assicuriamo che i nostri clienti abbiano accesso a tecnologie avanzate nel campo dell’hosting, server dedicati e servizi cloud. Oltre a questo, offriamo consulenza sistemistica su sistemi Linux e manutenzione specializzata in DBMS, IT Security, Cloud e molto altro. Ci distinguiamo per l’expertise in hosting di primari CMS Open Source come WordPress, WooCommerce, Drupal, Prestashop, Joomla, OpenCart e Magento, affiancato da un servizio di supporto e consulenza di alto livello adatto per la Pubblica Amministrazione, PMI, ed aziende di qualsiasi dimensione.

Red Hat, Inc. detiene i diritti su Red Hat®, RHEL®, RedHat Linux®, e CentOS®; AlmaLinux™ è un marchio di AlmaLinux OS Foundation; Rocky Linux® è un marchio registrato di Rocky Linux Foundation; SUSE® è un marchio registrato di SUSE LLC; Canonical Ltd. detiene i diritti su Ubuntu®; Software in the Public Interest, Inc. detiene i diritti su Debian®; Linus Torvalds detiene i diritti su Linux®; FreeBSD® è un marchio registrato di The FreeBSD Foundation; NetBSD® è un marchio registrato di The NetBSD Foundation; OpenBSD® è un marchio registrato di Theo de Raadt. Oracle Corporation detiene i diritti su Oracle®, MySQL®, e MyRocks®; Percona® è un marchio registrato di Percona LLC; MariaDB® è un marchio registrato di MariaDB Corporation Ab; REDIS® è un marchio registrato di Redis Labs Ltd. F5 Networks, Inc. detiene i diritti su NGINX® e NGINX Plus®; Varnish® è un marchio registrato di Varnish Software AB. Adobe Inc. detiene i diritti su Magento®; PrestaShop® è un marchio registrato di PrestaShop SA; OpenCart® è un marchio registrato di OpenCart Limited. Automattic Inc. detiene i diritti su WordPress®, WooCommerce®, e JetPack®; Open Source Matters, Inc. detiene i diritti su Joomla®; Dries Buytaert detiene i diritti su Drupal®. Amazon Web Services, Inc. detiene i diritti su AWS®; Google LLC detiene i diritti su Google Cloud™ e Chrome™; Microsoft Corporation detiene i diritti su Microsoft®, Azure®, e Internet Explorer®; Mozilla Foundation detiene i diritti su Firefox®. Apache® è un marchio registrato di The Apache Software Foundation; PHP® è un marchio registrato del PHP Group. CloudFlare® è un marchio registrato di Cloudflare, Inc.; NETSCOUT® è un marchio registrato di NETSCOUT Systems Inc.; ElasticSearch®, LogStash®, e Kibana® sono marchi registrati di Elastic N.V. Hetzner Online GmbH detiene i diritti su Hetzner®; OVHcloud è un marchio registrato di OVH Groupe SAS; cPanel®, L.L.C. detiene i diritti su cPanel®; Plesk® è un marchio registrato di Plesk International GmbH; Facebook, Inc. detiene i diritti su Facebook®. Questo sito non è affiliato, sponsorizzato o altrimenti associato a nessuna delle entità sopra menzionate e non rappresenta nessuna di queste entità in alcun modo. Tutti i diritti sui marchi e sui nomi di prodotto menzionati sono di proprietà dei rispettivi detentori di copyright. Ogni altro marchio citato appartiene ai propri registranti. MANAGED SERVER® è un marchio registrato a livello europeo da MANAGED SERVER SRL, Via Enzo Ferrari, 9, 62012 Civitanova Marche (MC), Italia.

SOLO UN ATTIMO !

Vorresti vedere come gira il tuo WooCommerce sui nostri sistemi senza dover migrare nulla ? 

Inserisci l'indirizzo del tuo sito WooCommerce e otterrai una dimostrazione navigabile, senza dover fare assolutamente nulla e completamente gratis.

No grazie, i miei clienti preferiscono il sito lento.
Torna in alto