sviluppo-web-qa.it

Quale installare: Apache Worker o Prefork? Quali sono gli (svantaggi di ciascuno?

Sulla base delle descrizioni di MPM Prefork e Worker , sembra che il tipo di prefork sia in qualche modo obsoleto, ma non riesco davvero a trovare un corretto confronto tra i due tipi.

Cosa vorrei sapere:

  • Quali sono le differenze tra le due versioni?
  • Quali sono i (dis-) vantaggi di ciascun tipo di server?
  • Esistono linee guida di base su quale tipo scegliere in base alle condizioni?
  • Ci sono grandi differenze di prestazioni tra i due?
55
Aron Rotteveel

Come dicono i documenti, è necessario utilizzare prefork MPM se è necessario evitare il threading per la compatibilità con le librerie non thread-safe. In genere, qualsiasi modulo Apache non banale (mod_php - o, più precisamente, la miriade di estensioni e librerie a cui si collega - essendo l'esempio canonico) ha una sorta di libreria non thread-safe (o ha un codice non thread-safe al suo interno), quindi a meno che tu non stia usando un'installazione Apache piuttosto disponibile, preferirei il prefork MPM.

40
womble

La soluzione classica per eseguire estensioni non sicure mentre serve un numero elevato (> 100) di connessioni simultanee è eseguire PHP su fastCGI (mod_fcgid, un modulo Apache nativo) e inviare richieste dinamiche a questo da un Apache istanza che esegue Worker MPM.

Ciò consentirebbe di scalare da poche centinaia fino a> 1000 connessioni simultanee con una modesta quantità di memoria (4 ~ 8 GB) quando si serve un mix di contenuti statici e dinamici.

Ovviamente, dovresti anche studiare le soluzioni di memorizzazione nella cache front-end come parte della tua distribuzione generale (memcached, vernice).

In alternativa, esegui l'upgrade ad Apache 2.4 e al suo nativo evento MPM, che gestisce la concorrenza in modo molto migliorato (i thread vengono attivati ​​al momento della connessione, non aspettando di essere sottoposti a polling).

13
adaptr

Sono passati circa 3 anni da quando la domanda è stata pubblicata, ma ti consiglio di andare con MPM lavoratore invece di pre-fork anche se usi PHP, per ottenere prestazioni migliori.

Per quanto riguarda le differenze, il pre-fork è senza thread, quindi il server esegue un processo per ogni richiesta del client (pre-forchette in previsione di nuove richieste in modo che il fork non passi i tempi di risposta). Dal momento che le richieste sono server in un processo separato, questo di solito impone di più alla memoria e alla CPU. Il lavoratore porta il multi-threading che è più leggero e ha un migliore utilizzo della memoria.

6
aleemb

Questo è qualcosa di molto particolare per quello che stai servendo. Se stai facendo molte piccole connessioni statiche, i thread sarebbero più leggeri e veloci. Se hai solo poche grandi app generate costantemente, prefork potrebbe avere un Edge a causa della sua maturità e stabilità. Perché non semplicemente impostare ciò di cui hai bisogno, testarne uno, scambiare il modulo MPM, riprovare, vedere quale ti soddisfa meglio?

2
Marcin

che necessita del tipo e del tipo di traffico che avrai. E anche prima devi capire la differenza principale tra prefork e worker. Spero che l'articolo qui sotto ti aiuti a capire! http://slashroot.in/how-is-nginx-different-from-Apache

1
sarath