Bu bir Kanonik Soru Doğru Apache httpd MPM'yi seçme hakkında.
Apache - 'worker', 'event', 'prefork', vb. Tarafından sunulan farklı MPM'ler arasında biraz kafam karıştı.
Aralarındaki büyük farklar nelerdir ve belirli bir dağıtım için hangisinin en iyi olacağına nasıl karar verebilirim?
Bir dizi var MPM modülleri (Çok İşlem Modülleri), ancak en yaygın olarak kullanılan (en azından on nix platformları) üç ana modeldir:
prefork,
worker, ve
event. Esasen, Apache web sunucusunun evrimini ve sunucunun, uzun (yazılım açısından) tarih boyunca, zamanın hesaplama kısıtlamaları içinde HTTP isteklerini ele almak için oluşturulduğu farklı yolları temsil eder.
mpm_prefork ... iyi .. her şeyle uyumlu. Taleplerin sunulması için bir dizi çocuk sürecini başlatır ve çocuk süreçleri bir seferde yalnızca bir istekte bulunur. Orada oturan sunucu süreci var, eylem için hazır ve iş parçacığı marshaling ile uğraşmaya gerek yok aslında Daha hızlı Bir kerede yalnızca tek bir istekle uğraşırken daha modern iş parçacıklı MPM'lerden daha fazladır - ancak eşzamanlı istekler acı çeker, çünkü bir sunucu işlemi ücretsiz oluncaya kadar beklemek için üretilirler. Ek olarak, prefork çocuk süreçleri sayısında artmaya çalışırken, bazı ciddi RAM'leri kolayca emeceksiniz.
İplik güvenli olmayan bir modüle ihtiyacınız olmadıkça, prefork kullanmak muhtemelen tavsiye edilmez.
Kullanın: İplik kullanıldığında kırılan modüllere ihtiyacınız var,
mod_php. O zaman bile, FastCGI kullanmayı düşünün ve
php-fpm.
Eğer kullanmayın: Modüllerin diş açmada kırılmaz.
mpm_worker iş parçacığı kullanır - bu eşzamanlılık için büyük bir yardımcıdır. Çalışan bazı alt süreçleri kapatır; prefork'a benzer şekilde, bazı yedek dişler, mümkünse, gelen bağlantılara hizmet etmek için hazır tutulur. Bu sayının RAM üzerinde çok güçlü olması, iş parçacığı sayısının ön bellekte sunucu sayısı gibi bellek kullanımı üzerinde doğrudan bir yatağa sahip olmamasıdır. Ayrıca, eşzamanlılığı çok daha kolay bir şekilde gerçekleştirir, çünkü bağlantıların, önkurulumda bir yedek sunucu yerine, (genellikle mevcut olan) ücretsiz bir iş parçacığı beklemesi gerekir.
Kullanın: Apache 2.2 veya 2.4'tesiniz ve öncelikle SSL kullanıyorsunuz.
Eğer kullanmayın: Uyumluluk için önkoşuma ihtiyacınız olmadıkça, gerçekten yanlış gidemezsiniz.
Ancak, basamakların eklendiğine dikkat edin. bağlantıları ve yok istekler - Bu, canlı bir bağlantının, kapalı olana kadar her zaman bir iş parçacığı tuttuğunu (yapılandırmanıza bağlı olarak uzun sürebilir) anlamına gelir. İşte bu yüzden ..
mpm_event yapısal olarak işçi için çok benzer; Apache 2.4'te 'deneysel' den 'durağan' durumuna taşındı. Büyük fark, canlı-canlı bağlantılarla uğraşmak için ayrılmış bir iplik kullanmasıdır ve eller, sadece bir istek yapıldığında (sadece iş parçacığı, istek tamamlandıktan sonra hemen geri serbest bırakılmasına izin verilmesi) çocuk iş parçacığı istemlerini istemektedir. Bu, bir seferde mutlaka aktif olmayan istemcilerin eşzamanlılığı için harikadır, ancak ara sıra isteklerde bulunur ve istemciler uzun süre hayatta kalma zaman aşımına sahip olabilirler.
Burada istisna SSL bağlantıları ile; Bu durumda, işçiye aynı şekilde davranır (bağlantı kapanana kadar belirli bir iş parçacığına verilen bir bağlantıyı yapıştırma).
Kullanın: Apache 2.4'tesiniz ve iş parçacıklarını seviyorsunuz, ancak boş bağlantılarını bekleyen iş parçacıklarını sevmiyorsunuz. Herkes konuları sever!
Eğer kullanmayın: Apache 2.4'te değilsiniz ya da uyumluluk için prefork'a ihtiyacınız var.
Bugünün dünyasında Yavaş loris, AJAX ve 6 TCP bağlantılarını (elbette hayatta kalmaya devam ederek) sunucunuza çoğaltmaktan hoşlanan tarayıcılar, eşzamanlılık, sunucu ölçeğinizin oluşturulması ve ölçeklendirilmesinde önemli bir faktördür. Apache'nin tarihi, bu bağlamda bu konuya bağlıydı ve kaynak kullanımı ya da ölçeği açısından nginx ya da lighttpd gibileriyle hala uyuşmuyor olsa da, geliştirme ekibinin hala alakalı bir web sunucusu oluşturma yolunda ilerlediği açık. günümüzün yüksek talep-eşzamanlılık dünyasında.
Çoğunlukla kullanmak istediğiniz Apache modüllerine bağlıdır. Bence işçi genellikle varsayılan seçimdir, ancak bazı (daha eski) modüller forfor gerektirir ve prefork'a bağlıdır.
Tercihleriniz yoksa, OS dağıtımınızdan tercih edilen bağımlılığı kullanmanızı öneririm. Örneğin Ubuntu, Apache2'yi yüklediğinizde varsayılan olarak mpm-worker'ı kuracaktır.
İşte gif ile nasıl çalıştığına dair iyi bir açıklama:
https://www.datadoghq.com/blog/monitoring-apache-web-server-performance/
Kısaca: eğer varsa 2.4 ve httpd olarak bir ters proxy (dispatcher) bu yüzden seçiminiz bir Etkinlik MPM'si
Şubat 2018'den itibaren, Apache 2.4 belgelerine ilişkin Etkinlik MPM'si, Apache'yi bir proxy olarak kullanmanın, 2.4.24'ten beri tasarlanan şekilde çalışmasından "gelişmiş bağlantı işlemlerini" sürdüreceğini belirtiyor. Bakın Sınırlamalar Bölüm.
Mesele, bir vekil olarak, işçinin cevabın sonunun nerede olduğunu söyleyememesi ve kontrolün dinleyiciye geri gönderilmesinden önce bütün cevabı görene kadar beklemeye zorlanmasıdır.
Bu nedenle, Apache'nin bir proxy olarak kullanıldığı zaman, Worker modelinin kullanılması en iyi sonuç olabilir. Vekil bir ortamda etkinlik modeline getirilen avantajlar varsa, belki de tam olarak belli değil.