Sobes.tech
Middle

Τι είναι το PHP-FPM;

sobes.tech AI

Απάντηση από AI

PHP-FPM (FastCGI Process Manager) είναι ένας διαχειριστής διαδικασιών FastCGI για PHP, εναλλακτικός του πρότυπου PHP FastCGI. Παρέχει καλύτερη απόδοση στην επεξεργασία αιτημάτων ιστού σε περιβάλλοντα με υψηλό φόρτο. Το FPM διαχειρίζεται μια ομάδα διαδικασιών PHP που περιμένουν εισερχόμενα αιτήματα από τον διακομιστή ιστού (π.χ., Nginx ή Apache μέσω του module mod_proxy_fcgi).

Κύρια χαρακτηριστικά και πλεονεκτήματα του FPM:

  • Pool διαδικασιών: Το FPM δημιουργεί και διαχειρίζεται ένα σύνολο διαδικασιών PHP. Αυτές οι διαδικασίες μπορούν να είναι στατικές (σταθερός αριθμός), δυναμικές (δημιουργούνται ανάλογα με τις ανάγκες εντός ορίων) ή κατ' απαίτηση (δημιουργούνται κατά τη λήψη ενός αιτήματος και καταστρέφονται μετά την επεξεργασία). Αυτό επιτρέπει την αποδοτική χρήση των πόρων του συστήματος.
  • Καλύτερη κλιμάκωση: Χάρη στη διαχείριση της ομάδας διαδικασιών, το FPM μπορεί να χειριστεί πολλαπλά αιτήματα ταυτόχρονα, κάτι κρίσιμο για εφαρμογές με υψηλό φόρτο.
  • Διαχωρισμός διαδικασιών: Κάθε αίτημα επεξεργάζεται από ξεχωριστή διαδικασία FPM, αυξάνοντας τη σταθερότητα. Η αποτυχία ενός αιτήματος δεν επηρεάζει τα άλλα.
  • Ρύθμιση: Επιτρέπει ευέλικτη διαμόρφωση της συμπεριφοράς των διαδικασιών, π.χ., μέγιστος αριθμός αιτημάτων ανά διαδικασία, χρόνος ζωής διαδικασίας, διαχείριση μνήμης.
  • Ενσωμάτωση με διακομιστές ιστού: Ενσωματώνεται εύκολα με δημοφιλείς διακομιστές ιστού μέσω του πρωτοκόλλου FastCGI.

Παράδειγμα διαμόρφωσης της ομάδας διαδικασιών στο php-fpm.d/www.conf:

; Όνομα ομάδας
[www]

; Χρήστης και ομάδα υπό την οποία θα τρέχουν οι διαδικασίες
user = www-data
group = www-data

; Ακρόαση σε TCP socket:
; listen = 127.0.0.1:9000
; ...ή σε Unix socket:
listen = /run/php/php7.4-fpm.sock

; Μέθοδος διαχείρισης διαδικασιών:
; static - σταθερός αριθμός διαδικασιών (`pm.max_children`)
; dynamic - δυναμικός αριθμός διαδικασιών (`pm.start_servers`, `pm.min_servers`, `pm.max_servers`)
; ondemand - δημιουργούνται κατ' απαίτηση (`pm.process_idle_timeout`, `pm.max_children`)
pm = dynamic

; Αρχικός αριθμός παιδικών διαδικασιών κατά την εκκίνηση σε δυναμική λειτουργία
pm.start_servers = 5

; Ελάχιστος αριθμός παιδικών διαδικασιών που θα τρέχουν πάντα σε δυναμική λειτουργία
pm.min_servers = 2

; Μέγιστος αριθμός παιδικών διαδικασιών σε δυναμική και static/ondemand
pm.max_children = 15

Χωρίς το FPM, ο διακομιστής ιστού θα έπρεπε να ξεκινά τον PHP interpreter για κάθε αίτημα, κάτι που θα ήταν πολύ αναποτελεσματικό. Το FPM λύνει αυτό το πρόβλημα διατηρώντας έτοιμες προς χρήση διαδικασίες.