Ada sejumlah modul MPM (Multi-Processing Modules), tetapi sejauh ini yang paling banyak digunakan (setidaknya pada platform * nix) adalah tiga yang utama: prefork
, worker
, dan event
. Pada dasarnya, mereka mewakili evolusi dari server web Apache, dan berbagai cara server telah dibangun untuk menangani permintaan HTTP dalam batasan komputasi waktu selama sejarahnya yang panjang (dalam istilah perangkat lunak).
mpm_prefork
adalah .. yah .. itu kompatibel dengan semuanya. Ini memutar sejumlah proses anak untuk melayani permintaan, dan proses anak hanya melayani satu permintaan pada suatu waktu. Karena ada proses server yang duduk di sana, siap untuk bertindak, dan tidak perlu berurusan dengan marshaling, itu sebenarnya lebih cepat daripada MPM berulir yang lebih modern ketika Anda hanya berurusan dengan satu permintaan pada satu waktu - tetapi permintaan bersamaan menderita, karena mereka dibuat untuk mengantri sampai proses server gratis. Selain itu, mencoba meningkatkan dalam proses anak prefork, Anda akan dengan mudah menyedot beberapa RAM serius.
Mungkin tidak disarankan menggunakan prefork kecuali Anda membutuhkan modul yang tidak aman.
Gunakan jika: Anda memerlukan modul yang rusak ketika utas digunakan, misalnya mod_php
. Bahkan kemudian, pertimbangkan untuk menggunakan FastCGI dan php-fpm
.
Jangan gunakan jika: Modul Anda tidak akan pecah dalam threading.
mpm_worker
menggunakan threading - yang merupakan bantuan besar untuk konkurensi. Pekerja memutar beberapa proses anak, yang pada gilirannya spin off thread anak; mirip dengan prefork, beberapa thread cadangan tetap siap jika memungkinkan, untuk melayani koneksi yang masuk. Pendekatan ini jauh lebih baik pada RAM, karena jumlah thread tidak memiliki pengaruh langsung pada penggunaan memori seperti jumlah server di prefork. Ini juga menangani konkurensi jauh lebih mudah, karena koneksi hanya perlu menunggu utas gratis (yang biasanya tersedia) daripada server cadangan di prefork.
Gunakan jika: Anda menggunakan Apache 2.2, atau 2.4 dan Anda menjalankan terutama SSL.
Jangan gunakan jika: Anda benar-benar tidak bisa salah, kecuali Anda membutuhkan prefork untuk kompatibilitas.
Namun, perhatikan bahwa tapak terpasang ke koneksi dan bukan permintaan - yang berarti bahwa koneksi yang tetap hidup selalu menahan utas sampai ditutup (yang bisa lama, tergantung pada konfigurasi Anda). Itulah sebabnya kami memiliki ..
mpm_event
sangat mirip dengan pekerja, secara struktural; itu baru saja dipindahkan dari status 'eksperimental' ke 'stabil' di Apache 2.4. Perbedaan besar adalah bahwa ia menggunakan utas khusus untuk menangani koneksi yang tetap hidup, dan menyerahkan permintaan ke utas anak hanya ketika permintaan telah benar-benar dibuat (memungkinkan utas tersebut untuk membackup kembali segera setelah permintaan selesai). Ini bagus untuk konkurensi klien yang tidak selalu aktif pada satu waktu, tetapi membuat permintaan sesekali, dan ketika klien mungkin memiliki batas waktu keep-live yang panjang.
Pengecualian di sini adalah dengan koneksi SSL; dalam hal ini, ia berperilaku identik dengan pekerja (menempelkan koneksi yang diberikan ke utas yang diberikan sampai koneksi ditutup).
Gunakan jika: Anda menggunakan Apache 2.4 dan menyukai utas, tetapi Anda tidak suka utas menunggu koneksi yang menganggur. Semua orang suka utas!
Jangan gunakan jika: Anda tidak menggunakan Apache 2.4, atau Anda perlu prefork untuk kompatibilitas.
Dalam dunia slowloris , AJAX, dan browser saat ini yang suka multiplex 6 koneksi TCP (dengan tetap-hidup, tentu saja) ke server Anda, concurrency adalah faktor penting dalam membuat skala dan skala server Anda dengan baik. Sejarah Apache telah mengikatnya dalam hal ini, dan sementara itu benar-benar masih tidak sebanding dengan orang-orang seperti nginx atau lighttpd dalam hal penggunaan sumber daya atau skala, jelas bahwa tim pengembangan bekerja untuk membangun server web yang masih relevan di dunia konklusi permintaan tinggi saat ini.