Berdasarkan deskripsi untuk Prefork dan Worker MPM, sepertinya tipe prefork agak ketinggalan jaman, tetapi saya tidak dapat menemukan perbandingan yang tepat dari kedua tipe tersebut.
Apa yang ingin saya ketahui:
- Apa perbedaan antara kedua versi?
- Apa kelebihan (dis-) dari setiap jenis server?
- Apakah ada pedoman dasar tentang jenis mana yang harus dipilih berdasarkan kondisi?
- Apakah ada perbedaan kinerja yang besar di antara keduanya?
apache-2.2
mpm-worker
mpm-prefork
Aron Rotteveel
sumber
sumber
Jawaban:
Seperti yang dikatakan oleh dokumen, Anda harus menggunakan MPM prefork jika Anda perlu menghindari threading untuk kompatibilitas dengan pustaka non-thread-safe. Biasanya, setiap modul Apache non-sepele (
mod_php
- atau, lebih tepatnya, banyak sekali ekstensi dan pustaka yang ditautkannya - menjadi contoh kanonik) memiliki semacam pustaka non-utas-aman (atau memiliki non-utas- kode aman di dalamnya), jadi kecuali jika Anda menggunakan menginstal Apache cukup stok, saya akan pergi untuk MPM prefork.sumber
php-fpm
via FastCGI. Maka MPM pekerja baik-baik saja - maka fpm akan menjalankan setiap permintaan PHP dalam proses sendiri sementara Apache dapat menjalankan threaded. Masalah keamanan PHP-Thread hanya mencegah Anda menggunakanmod_php
, yang menjalankan PHP di dalam proses Apache.Solusi klasik untuk menjalankan ekstensi tidak aman sambil melayani koneksi konkurensi dalam jumlah besar (> 100) adalah menjalankan PHP pada fastCGI (mod_fcgid, modul apache asli) dan permintaan dinamis proksi untuk itu dari instance apache yang menjalankan MPM Pekerja.
Ini akan memungkinkan Anda untuk menskala dari beberapa ratus hingga> 1000 koneksi bersamaan dengan jumlah memori yang sederhana (4 ~ 8GB) saat menyajikan campuran konten statis dan dinamis.
Tentu saja, Anda juga harus menyelidiki solusi caching front-end sebagai bagian dari penerapan Anda secara keseluruhan (memcached, varnish).
Atau, tingkatkan ke apache 2.4 dan MPM acara aslinya , yang menangani konkurensi dengan cara yang jauh lebih baik (utas terputus saat tersambung, tidak menunggu untuk disurvei.)
sumber
Sudah sekitar 3 tahun sejak pertanyaan diposting tetapi saya akan merekomendasikan Anda pergi dengan MPM pekerja daripada pra-garpu bahkan jika menggunakan PHP, untuk mendapatkan kinerja yang lebih baik.
Mengenai perbedaannya, pre-fork adalah non-threaded maka server melakukan fork proses untuk setiap permintaan klien (pre-fork untuk mengantisipasi permintaan baru sehingga forking tidak memakan waktu respon). Karena permintaan adalah server dalam proses terpisah, ini biasanya membebani memori dan CPU Anda lebih banyak. Pekerja membawa multi-threading yang lebih ringan dan memiliki pemanfaatan memori yang lebih baik.
sumber
Ini adalah sesuatu yang sangat khusus untuk apa yang Anda layani. Jika Anda melakukan banyak koneksi statis kecil, utas akan lebih ringan dan lebih cepat. Jika Anda hanya memiliki beberapa aplikasi besar yang terus-menerus muncul, prefork mungkin memiliki keunggulan karena kematangan dan stabilitasnya. Mengapa tidak mengatur apa yang Anda butuhkan, uji satu, tukar modul MPM, coba lagi, lihat mana yang lebih cocok untuk Anda?
sumber
yang perlu pada jenis dan jenis lalu lintas yang akan Anda miliki. Dan juga pertama-tama Anda harus memahami perbedaan utama antara prefork dan pekerja. Semoga artikel di bawah ini akan membantu Anda mencari tahu! http://slashroot.in/how-is-nginx-different-from-apache
sumber