Çalışma mantığı ve yaklaşım farkları :
Bir saniyede cevap verilen request sayısının grafiği
CSS dosyasına erişim (bootstrap.min.css)Nginx Ve Apache
Tek bir istek için karşılaşılan sonuç :
Toplu isteklerde
Salt PHP (“Merhaba Dünya”) Testi
Bu test ile en basit PHP kodunun çalıştırılıp istemciye ulaştırılmasında Apache ve Nginx’ in başarımlarının nasıl olduğunu öğreniyoruz. tek bir istek için : Toplu istekler için sonuç:
Symfony 3.1 (“Merhaba {name}”) Testi
Bu test ile en basit Symfony kodunun çalıştırılıp client’a ulaştırılmasında Apache ve Nginx’ in başarımlarının nasıl olduğunu öğreniyoruz. Tek istek için
Toplu istekler için Apache2 ve Nginx’ten aldığımız requests/second değerleri:
Veritabanına 10 yeni kayıt gir
Doctrine ORM ile çok basit bir entity ’nin art arda oluşturulan 10 instance’ ının veritabanına kaydedilmesine ait kodun çalıştırılıp “işlem başarılı” mesajının istemciye ulaştırılmasında Apache ve Nginx’in başarımlarının nasıl olduğunu değerlendirdim. Bir tane istek için aşağıdaki karşılaştırmayı alıyoruz: Toplu istekler için Apache2 ve Nginx’ten aldığımız requests/second değerleri:
Veritabanından 1000 kayıt oku ve görüntüle
Doctrine ORM ile çok basit bir entity’ye ait veritabanında 1000 kaydın sorgulanması, Object olarak hydrate edilmesi ve Basit bir twig döngüsü içinde kullanıcıya gösterilmesi Adımlarını içeren kodun çalıştırılıp istemciye ulaştırılmasında Apache ve Nginx’in başarımlarının nasıl olduğunu görüyoruz. Bir tane istek için aşağıdaki karşılaştırmayı alıyoruz: Toplu istekler için Apache2 ve Nginx’ten aldığımız requests/second değerleri:
Apache Multithread çalışıyor. ( Her bir domain ve/veya projeniz için ayrı bir apache process’i yaratıldığını düşünün. )
Nginx Singlethread ve yanısıra Worker desteği ile çalışıyor. ( Her bir isteğin tek bir thread karşılandığını ancak duruma göre farklı bir Worker üzerine aktarıldığını düşünebilirsiniz. )
Lighttpd Singlethread çalışıyor. ( Tüm istekleri tek bir thread üzerinden alıp aynı thread ile işleyip yine geriye aynı yol üzerinden cevap veriyor. )
İhtiyaç duydukları donanım türüne göre performans sıralaması :
Ram Kullanımı : Lighttpd < Nginx < Apache
Burda en çok ram kullanımı apache de en az lighttpd
Cpu Kullanımı : Nginx < Lighttpd < Apache
En çok cpu yu apache kullanıyor yine en az cpu kullanan nginx.
Sunucuya göre;
Eğer sunucumda cpu ve ram problemim yoksa her an herşeye çözüm üretmem gerekecekse ve geniş destek içeriğine ihtiyacım varsa Apache.
Eğer sunucum bir VPS ise özellikle cpu kullanım oranı benim için problem olacaksa Nginx .
Eğer sunucum bir VPS ise özellikle ram kullanımı benim için sıkıntı oluyorsa Lighttpd.
tavsiye ediliyor.
Projemde çok fazla istek yapılmıyor ( çok fazla ziyaretçim yoksa, ajax, rpc gibi diğer isteklerin cevapları önemli miktarda değil ise ) ancak çok fazla yazılımsal iş yükü varsa Apache.
Projemde istek ve sayfa gösterim oranları çok yüksek yazılımsal iş yükü ağır ve projelerimde bol dinamik içerik varsa Nginx.
Projemde yazılımsal iş yükü fazla yoksa, dinamik içerikden ziyade statik içeriği aşırı yoğun ziyaretçi yüküne karşı hatasız sunmam gerekiyorsa Lighttpd.
tavsiye ediliyor.
Nginx Apache ve lighttp arasında ram kullanım grafiği
Bir saniyede cevap verilen request sayısının grafiği
CSS dosyasına erişim (bootstrap.min.css)Nginx Ve Apache
Tek bir istek için karşılaşılan sonuç :
Toplu isteklerde
Bu test sonucunda, Nginx’in statik içerikleri sunma noktasında “toplu isteklerde” Apache2’ den en az 3 kat daha performanslı olduğu sonucuna ulaşıyoruz.
Salt PHP (“Merhaba Dünya”) Testi
Bu test ile en basit PHP kodunun çalıştırılıp istemciye ulaştırılmasında Apache ve Nginx’ in başarımlarının nasıl olduğunu öğreniyoruz. tek bir istek için : Toplu istekler için sonuç:
Bu test ile; en basit PHP kodunun işletilmesi ve istemciye iletilmesinde, Nginx’in 1 request için %25 daha performanslı olduğunu; istek sayısı arttıkça bu farkın %100’e yaklaştığını gözlemliyoruz.
Symfony 3.1 (“Merhaba {name}”) Testi
Bu test ile en basit Symfony kodunun çalıştırılıp client’a ulaştırılmasında Apache ve Nginx’ in başarımlarının nasıl olduğunu öğreniyoruz. Tek istek için
Toplu istekler için Apache2 ve Nginx’ten aldığımız requests/second değerleri:
Önceki testin bulgusu olan, Nginx’in en basit PHP kodu işletimi ve istemciye iletimindeki %25’lik performans farkı; aynı işi Symfony3 ile yaptığımızda yaklaşık %30’luk bir performans farkına dönüşüyor ve fark daha da artıyor.
Veritabanına 10 yeni kayıt gir
Doctrine ORM ile çok basit bir entity ’nin art arda oluşturulan 10 instance’ ının veritabanına kaydedilmesine ait kodun çalıştırılıp “işlem başarılı” mesajının istemciye ulaştırılmasında Apache ve Nginx’in başarımlarının nasıl olduğunu değerlendirdim. Bir tane istek için aşağıdaki karşılaştırmayı alıyoruz: Toplu istekler için Apache2 ve Nginx’ten aldığımız requests/second değerleri:
Bir istek için Nginx, Apache2’den %100 daha performanslı olsa da, istek sayısı arttıkça aradaki farkın kapandığını görüyoruz. Ancak bu seviyede INSERT yaparken halâ Nginx kayda değer ölçüde daha performanslı.
Veritabanından 1000 kayıt oku ve görüntüle
Doctrine ORM ile çok basit bir entity’ye ait veritabanında 1000 kaydın sorgulanması, Object olarak hydrate edilmesi ve Basit bir twig döngüsü içinde kullanıcıya gösterilmesi Adımlarını içeren kodun çalıştırılıp istemciye ulaştırılmasında Apache ve Nginx’in başarımlarının nasıl olduğunu görüyoruz. Bir tane istek için aşağıdaki karşılaştırmayı alıyoruz: Toplu istekler için Apache2 ve Nginx’ten aldığımız requests/second değerleri:
Neredeyse bütün testler Nginx, Apache2’yi ezmiş olsa da; bu testin sonucu Apache2’nin tartışılmaz galibiyeti ile sonuçlandı. Bu durum dikkat çekici.Test Sonuçları — Toplu olarak