Apache HTTP Sunucusu Sürüm 2.4
Bu belgede Çok Süreçlilik Modülü denince ne anlaşıldığı ve bunların Apache HTTP Sunucusu tarafından nasıl kullanıldıkları açıklanmıştır.
Apache HTTP Sunucusu çok çeşitli platformlar üstünde farklı ortamlarda çalışabilen güçlü ve esnek bir HTTP sunucusu olarak tasarlanmıştır. Farklı platformlar ve farklı ortamlar çoğunlukla farklı özellikler veya aynı özelliğin en yüksek verimlilikle gerçeklenmesi için farklı yöntemler gerektirir. Apache httpd, geniş ortam çeşitliliğini daima modüler tasarımı sayesinde uzlaştırmıştır. Bu tasarım, site yöneticilerine, sunucularında bulunmasını istedikleri özellikleri derleme sırasında veya çalışma anında gerekli modülleri yüklemek suretiyle seçebilme imkanı verir.
Apache HTTP Sunucusu 2.0, bu modüler tasarımı sunucunun en temel işlevlerine kadar indirmiştir. Sunucu, Çok Süreçlilik Modülleri adı verilen ve makine üzerindeki ağ portlarının bağlanmasından, isteklerin kabul edilmesinden ve bu istekleri yanıtlayacak çocuklara dağıtmaktan sorumlu olan modüllerin seçimine imkan verecek bir yapılanma ile gelir.
Sunucunun modüler tasarımının bu seviyede genişletilmesi iki önemli yarar sağlar:
mpm_winnt
modülü, Apache httpd 1.3’te kullanılan POSIX
katmanının yerine işletim sistemine özgü özellikleri
kullanabildiğinden, Apache HTTP Sunucusunun Windows sürümü artık çok
daha verimli bir duruma gelmiştir. Aynı fayda özelleştirilmiş MPM’lerle
diğer işletim sistemlerine de sağlanmıştır.prefork
modülünü
kullanabilirken, daha geniş ölçeklenebilirlik gerektiren siteler
worker
veya event
gibi evreli MPM
modüllerinden birini seçebilmektedir.Kullanıcı açısından MPM’lerin diğer Apache httpd modüllerinden görünüşte bir farkı yoktur. Asıl fark sunucuya yüklenebilecek azami MPM modülü sayısının bir ve yalnız bir olarak sınırlanmış olmasıdır. Mevcut MPM modülleri modül dizini sayfasında listelenmiştir.
Aşağıdaki tabloda çeşitli işletim sistemlerinde öntanımlı olan MPM’ler listelenmiştir. Derleme sırasında başka bir seçim yapmadığınız takdirde bu işletim sistemlerinde bu MPM’ler seçilmiş olacaktır.
Netware | mpm_netware |
OS/2 | mpmt_os2 |
Unix | Platformun yapabildiklerine bağlı olarak,
prefork , worker veya
event |
Windows | mpm_winnt |
'Unix' burada Unix benzeri işletim sistemleri anlamında kullanılmıştır (örn, Linux, BSD, Solaris, Mac OS X, vb.
Unix durumunda, hangi MPM'nin kurulacağı kararı şu 2 soruya verilecek yanıta bağlıdır:
1. Sistem evreleri destekliyor mu?
2. Sistem evreleri "thread-safe polling" anlamında destekliyor mu (özellikle kqueue ve epoll işlevlerini)?
Her iki soruya da verilen yanıt 'evet' ise, öntanımlı MPM'niz
event
modülüdür.
Birincinin yanıtı 'evet' ikincinin 'hayır' ise öntanımlı MPM'niz
worker
modülüdür.
Yanıtların her ikisi de 'hayır' ise öntanımlı MPM'niz
prefork
modülüdür.
Uygulamada, günümüzdeki işletim sistemlerinin tümü bu iki özelliği
desteklediğinden öntanımlı MPM'niz hemen hemen daima
event
modülü olacaktır.
MPM'ler tüm platformlarda duruk (static) modüller olarak derlenebilir. Derleme sırasında tek bir modül seçilir ve sunucu ile ilintilenir. MPM değiştirilmek istenirse sunucunun yeniden derlenmesi gerekir.
Öntanımlı MPM seçimin değiştirmek için configure
betiğinin --with-mpm=AD
seçeneği kullanılır.
Buradaki AD istenen MPM'in ismidir.
Sunucu bir kere derlendi mi, hangi MPM'in seçilmiş olduğunu
./httpd -l
komutuyla öğrenebilirsiniz. Bu komut, içerilen
MPM dahil, sunucu içinde derlenmiş bütüm modülleri listeler.
Unix ve benzeri platformlarda, MPM'ler DSO modülleri olarak derlenebilir
ve diğer DSO modülleri gibi sunucuya devingen olarak yüklenebilir. DSO
modülü olarak derlenen MPM'ler, sunucunun yeniden derlenmesini
gerektirmeden LoadModule
yönergesi
güncellenerek değiştirilebilir.
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule
yönergesini birden
fazla MPM için kullanmak sunucunun başlatılması sırasında aşağıdaki
hatanın oluşmasına sebep olur.
AH00534: httpd: Configuration error: More than one MPM
loaded.
Bu özellik configure
betiğinin
--enable-mpms-shared
seçeneği ile etkinleştirilebilir.
all
değeri belirtilerek platform için
kullanılabilen tüm modüller kurulur. İstenirse, değer olarak bir MPM
listesi de belirtilebilir.
Özdevinimli olarak seçilerek veya configure
betiğine
--with-mpm
seçeneğiyle belirtilerek seçilen öntanımlı MPM
üretilen sunucu yapılandırma dosyasıyla yüklenir. Farklı bir MPM seçmek
için MPM'i LoadModule
yönergesinde
belirtin.