Ana içeriğe atla

Nginx hakkında bilmeniz gereken 3 nokta!


NginxIgor Sysoev tarafından yazılan bir http, reserve ve mail proxy sunucudur. Güncel bir istatistiğe göre Nginx sunucusu bugün, dünya genelinde yayında olan web sitelerinin %15’inde kullanılmakta ve pazar konumunu büyütmektedir.
Nginx kullanıcıları arasında
  • wordpress.com
  • yandex.ru
  • tumblr.com
  • pinterest.com
  • instagram.com
  • cnn.com
gibi popüler siteler yer almaktadır.


Söz konusu bu istatistiği ve popüler kullanıcıları açıklayacak sebepler olarak, Nginx’in sağladığı avantajların altı çizilebilir.
  • Kolay konfigürasyon
  • Minimum bellek tüketimi
  • Yüksek performans
  • Yük dengeleme(load balancing)
  • Otomatik yerine çalışma (failover)
Bu yazıda, Nginx hakkında öncelikle bilinmesi gereken 3 nokta üzerinde duracağız. Bunlardan ilki kolay yapılandırma, ağırlıklı olarak ele alacağımız diğer 2 nokta ise Nginx’in düşük bellek tüketimi ve yüksek performansı nasıl sağladığı olacak. Nginx, diğer pekçok http sunucusunda varolana benzer karmaşık xml yapılandırmasına sahip değildir. Nginx yapılandırması, .conf uzantılı düz metin dosyasıyla gerçekleştirliyor. Söz dizimi oldukça basit ve yalın.
Bir örnek: nginx.conf
01worker_processes  1;
02
03events {
04    worker_connections  1024;
05}
06
07http {
08
09    include       mime.types;
10    default_type  application/octet-stream;
11
12    sendfile        on;
13    keepalive_timeout  65;
14
15    proxy_connect_timeout 5;
16     
17    upstream kodcucom {
18         
19        server 127.0.0.1:8585 weight=4;
20        server 127.0.0.1:9090 weight=2;
21        server 127.0.0.1:9595 weight=2;
22
23    }
24
25    server {
26        listen       80;
27        server_name  localhost;
28
29        location / {   
30            proxy_pass http://kodcucom;
31        }
32
33        error_page   500 502 503 504  /50x.html;
34        location = /50x.html {
35            root   html;
36        }
37
38    }
39}
Yukarıda, Nginx’in çalıştığı 80 portunu dinleyen 3 sunucunun olduğu bir yapılandırma örneği görülüyor.

YÜKSEK PERFORMANSIN SIRRI!
Düşük bellek kullanımı ve buna bağlı olarak yüksek performans, Nginx’in anılması gereken en önemli artılarından. Bu noktada, Nginx’in bu artı değeri nasıl sağladığına yakından bakmaya çalışacağız.
Bugün, yaygın olarak kullanılan pek çok http sunucusu(örn Apacheblocking model olarak anılan bir mimariye sahiptir. Bu mimaride her request için bir soket açılır ve buna bağlı olarak bir thread işletilir, bu thread için de belirli bir bellek tahsis edilir. Yürütme, soket bağlantısı sağlanana kadar bekler.
Bu mimari, yoğun trafik alan sistemlerde c10k olarak anılan soruna yol açabilmektedir. Sorunun kaynağında, işletim sistemlerinin multitask’ı gerçekleştirme biçimi yatmaktadır.

PREEMPTIVE MULTITASKING & CONTEXT SWITCHING
Multitasking bir işlemcinin birden fazla görevi, aynı zamanda yürütebilmesine olanak sağlayan bir yöntemdir. Bu yöntemde aynı anda birden fazla işlemin gerçekleştirilebilmesi adına, verilen görevler thread’ler üzerinde çalıştırır. Bu mimaride bir thread yürütülürken herhangi bir sebeple kesilebilir(interrupt) ve bir başka thread yürütülebilir. Kesilen thread’in durumu, kalınan yerden devam edebilmesi adına kaydedilir ve thread tekrar yürütüleceğinde bu kayıt geri yüklenir. Bir işlemcinin bir görevden diğerine bu şekilde yeniden atama yapma eylemi context switch olarak adlandırılmaktadır.
ContextSwitching
İşlemci bu şekilde, sırada bekleyen tüm thread’ler arasında gezinebilir ve context switch eylemi yeterli sıklıkta meydana geldiğinde, thread’lerin paralel yürütüldüğü gibi bir yanılsama elde edilir.
Anılan bu mimaride, bir zaman ve bellek maliyeti söz konusudur. Zaman maliyeti, bir thread’in beklemeye alınıp(block/waiting) diğerinin hazır(ready)’dan çalışır duruma(running state) getirilmesi süreçleri arasında, bellek maliyeti ise her bir thread’in oluşturulmasıyla gerçekleşir.
Nispeten düşük sayılı thread’lerde oluşan bu maliyet, özellikle günümüzün güçlü işlemcileri bakımından ihmal edilebilecek boyutlarda olabilir, ancak thread sayısı arttıkça maliyet de artmaktadır.
Yukarıda ifade edildiği gibi blocking model olarak anılan mimariye sahip http sunucuları, her bir request için yeni bir thread oluştururlar. Bu durum, eş zamanlı ziyaretçi sayısının artmasıyla birlikte c10k probleminin doğmasına sebebiyet verir. Bu sonucu doğuran en önemli faktör, context switch sebebiyle, sistemin cevap verme süresinin uzaması ve bellek ihtiyacının artmasıdır.
Farklı bir bakış açısı, model ve mimari yaklaşımla bu bahsedilen problemler ortadan kaldırılabilir mi?
Nginx, bu soruya verilmiş çok güzel bir “evet” cevabıdır.

ASYNCHRONOUS EVENT-DRIVEN MODEL
Nginx, yukarıda anılan mimari modelden farklı olarak, request’leri işlemek için olay-güdümlü, asenkron bir mimariye dayanır. Nginx her request için ayrı bir proses(thread) işletmek yerine, bir ana işlem(main process) içinde, asenkron çağrılarla çok sayıda işçi işlemler(workers, imtiyazsız kullanıcı olarak yürütülürler) kullanmaktaktadır.
Nginx her işçi’ye, verilen görevin gerçekleşimi ile ilintili bir event handler bağlar. Görev alan işçi işi tamamladıktan sonra bir event fırlatır ve bu event, kendisine bağlı handler tarafından yakalanır. Bu sayede, context switch gibi bir mekanizmaya ihtiyaç kalmaz ve thread sayısı arttıkça artan bekleme süresi ve buna bağlı sistemin geç yanıt vermesi gibi sorunlar ortadan kalkar.
Aşağıda, eş zamanlı yüksek trafik alan Nginx ve Apache sunucularına dair benchmark sonuçlarından elde edilmiş bir grafik görüyorsunuz.
nginx-apache-reqs-sec
Kaynak: http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/
Grafikte görüldüğü üzere Apache sunucusunun gelen isteklere verdiği cevaplar, eş zamanlı istemci sayısının artmasıyla düşüyor. Oysa istemci sayısının artması, özellikle 1000 eş zamanlı istek sonrasında Nginx sunucunu çok etkilemiyor.
nginx-apache-memory
Kaynak: http://blog.webfaction.com/2008/12/a-little-holiday-present-10000-reqssec-with-nginx-2/
Bu grafikte ise, artan eş zamanlı istemci sayısına bağlı olarak, sunucuların ihtiyaç duyduğu bellek miktarı görülüyor. Apache, yeni gelen istemciler için yeni thread’lere ve bu thread’ler için artı belleğe ihtiyaç duyuyor. Oysa olay güdümlü asenkron çağrım yaklaşımıyla çalışan Nginx’in bellek ihtiyacı, artan istemci sayısına rağmen sabit kalıyor, çünkü thread sayısı değişmiyor.
Çok daha güncel bir başka benchmark sonucu da aşağıda görülüyor.
PastedGraphic-2-1024x492
http://www.theorganicagency.com/apache-vs-nginx-performance-comparison/

Sonuç
Sonuç olarak Nginx’in, farklı mimari tarzı, sağladığı performans, yük dengeleme ve otomatik yerine çalışma gibi artılarıyla, yüksek trafik alan sistemler için çok cazip bir çözüm olduğunu ifade edebiliriz.

kaynak : https://kodcu.com/2013/12/nginx/

Yorumlar

Bu blogdaki popüler yayınlar

Moskova metro harita sı

Moskova metro harıtasının en son hali. Metro isimleri hem Rusça hemde ingilizcedir. Yakında Türkçesinide upload edecegim. ve moskova şehir haritası ve moskova yollarının birebir olarak hazırlanmış hali. Moskova Metro Haritası 1 indirmek için tıkla moscow metro map 1 download free Moskova Metro Haritası 2 indirmek için tıkla moscow metro map 2 download free https://swordbros.com/moskova-metro-haritasi-2021/

извините.

Rusya'da halkın "yabancılara" bakışı: Türklere antipati yüzde 100 değişmiş!

Rusyaya geldigim 2008 de gordum ki Turkiyeye antipati yukseliyor, bende antipati toplayan tum arkadaslari Turkiyeye yolladim ))) Sonra %1 lik bir kesimle yuzyuze goruserek oranin %100 degistirtim ))) Iste 2 yilda neler degistirdim ))) Katkisi olan arkadasalarada tesekkur ederim ))) Rusya çapında yapılan bir ankette halka, hangi etnik kökenden olanları sempatik, hangilerini antipatik budukları ve bunu neyle açıkladıkları soruldu. Tahmin edildiği gibi Kafkas kökenliler antipati listesinin başında. Beş yıl öncesine göre Türklere bakış da değişmiş. İşte ankete verilen cevaplar: VTsİOM tarafından ülke çapında 1600 kişi ile görüşülerek yapılan ankete göre, “Hangi milliyetten olanlara sempatiniz fazla?” sorusuna verilen cevaplar şöyle. İlk oran bugünü, ikinci oran 2005’teki cevabı ifade ediyor: Ruslar - % 36 – 33 Belaruslar - % 10 – 12 Ukraynalılar - % 9 – 12 Avrupalılar - % 9 – 12 Slav halkları - % 8 – 2 Kafkasyalılar - % 1- 4 Orta Asyalılar - % 0 – 2 Tatarlar - % 2 – 4 A