it-swarm-id.com

Yang menginstal: Apache Worker atau Prefork? Apa saja kekurangan masing-masing?

Berdasarkan uraian untuk Prefork dan Worker MPM, tampaknya 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 keuntungan (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?
55
Aron Rotteveel

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, segudang ekstensi dan pustaka yang ditautkan - menjadi contoh kanonik) memiliki semacam pustaka non-utas (atau memiliki kode non-utas-aman di dalamnya), jadi kecuali Anda menggunakan instalasi Apache yang cukup bagus, saya akan memilih MPM prefork.

40
womble

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 ke yang dari Apache contoh yang menjalankan MPM Pekerja.

Ini akan memungkinkan Anda untuk menskalakan 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 yang asli event MPM, yang menangani konkurensi dengan cara yang jauh lebih baik (utas diputus saat tersambung, tidak menunggu untuk disurvei.)

13
adaptr

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 perbedaan, 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 daripada. Pekerja membawa multi-threading yang lebih ringan dan memiliki pemanfaatan memori yang lebih baik.

6
aleemb

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 Edge 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?

2
Marcin

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

1
sarath