Tüm Sistemler Çalışıyor
Network Durumu
Ana Sayfa Blog Python WSGI ve ASGI Sunucuları (Gunicorn, Uvicorn) 2026’da Nasıl Seçilir ve Performans Artırılır?

Python WSGI ve ASGI Sunucuları (Gunicorn, Uvicorn) 2026’da Nasıl Seçilir ve Performans Artırılır?

Python WSGI ve ASGI Sunucuları (Gunicorn, Uvicorn) 2026’da Nasıl Seçilir ve Performans Artırılır?

WSGI ve ASGI Nedir? Temel Kavramlar ve Farklar

WSGI ve ASGI Nedir? Temel Kavramlar ve Farklar - Python WSGI ve ASGI Sunucuları (Gunicorn, Uvicorn)
WSGI ve ASGI Nedir? Temel Kavramlar ve Farklar

Python dünyasında web uygulamaları iki temel protokol üzerinden çalıştırılır: WSGI (Web Server Gateway Interface) ve ASGI (Asynchronous Server Gateway Interface). WSGI, 2003 yılında PEP 3333 ile standartlaştırılmıştır ve senkron (blocking) bir model sunar. Bu modelde her istek bir iş parçacığı ya da süreç tarafından tek tek işlenir; bu da basit uygulamalar için yeterli olsa da yüksek eşzamanlılık gerektiren senaryolarda sınırlı kalır.

ASGI ise 2018 yılında PEP 544 ile tanıtılmıştır ve asenkron (non‑blocking) programlamayı destekler. Bu sayede tek bir süreç içinde binlerce aynı anda gelen isteği işleyebilir, WebSocket, Server‑Sent Events gibi gerçek‑zamanlı iletişim protokollerini doğal olarak destekler. Dolayısıyla FastAPI, Starlette, Quart gibi modern framework’ler ASGI’ye yönelmiştir.

WSGI ve ASGI arasındaki farkı anlamak, doğru sunucu seçimi için kritiktir. Örneğin, klasik Django projeniz django==4.x ile WSGI uyumludur, ancak django[async] eklentileriyle ASGI’ye geçiş yapabilirsiniz. Bu geçiş sırasında Gunicorn gibi WSGI‑optimised sunucular yerine Uvicorn gibi ASGI‑optimised sunucular tercih edilmelidir. Bu farkı göz ardı etmek, %40’a varan performans kaybına ve kaynak israfına yol açabilir.

Gunicorn: WSGI Sunucusunun Gücü ve Kullanım Senaryoları

Gunicorn (Green Unicorn), Python’un en popüler WSGI sunucularından biridir. “Pre‑fork” mimarisi sayesinde birden fazla işçi (worker) süreci başlatır; her worker bir istek alır ve tamamlayana kadar bloklanır. Bu model, CPU‑intensive (CPU‑ağır) uygulamalarda yüksek verim sağlar çünkü her worker ayrı bir CPU çekirdeği üzerinde çalışır.

Gunicorn’un en büyük avantajı basit konfigürasyon ve çoklu worker tipi (sync, gevent, eventlet) desteğidir. Örneğin, --worker-class=gevent seçeneğiyle greenlet‑tabanlı asenkron bir model elde edebilir, ancak bu tam ASGI eşdeğeri değildir; sadece I/O‑bound işlemlerde iyileşme sağlar. Ayrıca, --workers=4 gibi bir parametreyle worker sayısını uygulamanın CPU çekirdeği sayısına göre ayarlayarak %30 daha düşük gecikme elde edebilirsiniz.

Gunicorn, web hosting paketleri içinde sıkça kullanılan bir bileşen olduğundan, VPS ya da AMD Ryzen VDS sunucular üzerinde sorunsuz çalışır. Özellikle Django, Flask ve Pyramid gibi klasik WSGI framework’leriyle uyumludur; bu yüzden mevcut bir projeyi yeniden yapılandırmadan dağıtmak isteyen ekipler için ideal bir seçimdir.

Uvicorn: ASGI’nin Hafif ve Hızlı Yüzü

Uvicorn, ASGI‑compatible bir sunucudur ve tamamen asenkron bir mimariye sahiptir. uvloop ve httptools gibi yüksek performanslı kütüphanelerle derinlemesine entegre olduğu için, aynı anda binlerce istek işleyebilir. Bu özellik, FastAPI, Starlette ve Sanic gibi modern framework’lerde gerçek zamanlı API ve WebSocket uygulamaları geliştiren ekipler için vazgeçilmezdir.

Uvicorn’un bir diğer güçlü yönü çapraz platform desteği ve Docker‑friendly olmasıdır. Tek bir komutla uvicorn app:app --host 0.0.0.0 --port 8000 --workers 4 çalıştırarak çoklu worker (process) modelini de elde edebilirsiniz. Ancak burada dikkat edilmesi gereken nokta, her worker’ın aynı event loop’u paylaştığı için CPU‑intensive işlerde --workers artırmak yerine Gunicorn + Uvicorn workers kombinasyonu tercih edilmelidir.

Uvicorn, Intel i9 VDS sunucular gibi yüksek çekirdek sayısına sahip ortamlarla birleştiğinde, 3 kat düşük gecikme ve yüksek eşzamanlılık sağlar. Bu da özellikle mikro servis mimarilerinde, her servis ayrı bir ASGI uygulaması olarak çalıştığında kritik bir avantajdır.

Gunicorn ve Uvicorn’u Birlikte Kullanmak: En İyi Pratikler

Gunicorn ve Uvicorn’u Birlikte Kullanmak: En İyi Pratikler - Python WSGI ve ASGI Sunucuları (Gunicorn, Uvicorn)
Gunicorn ve Uvicorn’u Birlikte Kullanmak: En İyi Pratikler

Birçok gerçek dünya senaryosunda, hem WSGI hem de ASGI avantajlarından yararlanmak gerekir. Örneğin, bir Django projesi içinde klasik HTML sayfaları WSGI ile, API uç noktaları ise FastAPI ile ASGI üzerinden sunulabilir. Bu durumda Gunicorn’u bir reverse proxy (ör. Nginx) arkasında, Uvicorn workers ile birlikte çalıştırmak en verimli mimaridir.

Bu konfigürasyonu adım adım kurmak:

  1. Sunucuda nginx kurun ve 80/443 portlarını yönlendirin.
  2. Gunicorn’u --worker-class=sync ile başlatın ve Django uygulamasını yönlendirin.
  3. Uvicorn’u --workers 2 ile başlatın ve FastAPI uygulamasını /api/ altına yönlendirin.
  4. Nginx içinde location /api/ { proxy_pass http://127.0.0.1:8000; } gibi bir blok ekleyin.

Bu yapı, yük dengeleme ve hata izolasyonu sağlar; bir servis çökse bile diğeri çalışmaya devam eder. Ayrıca, SLA hizmeti kapsamında uptime garantisi vermek isteyen firmalar bu mimariyi tercih eder.

Performans Karşılaştırma Tablosu

ÖzellikGunicorn (WSGI)Uvicorn (ASGI)
İşlem ModeliPre‑fork, sync/greenletEvent‑loop, async
En İyi KullanımCPU‑intensive, klasik Django/FlaskI/O‑bound, FastAPI, WebSocket
Worker SayısıCPU çekirdeği sayısına göre ayarlanırCPU çekirdeği + async workers
Gecikme (Latency)~30‑40 ms (sync)~10‑15 ms (async)
Kaynak KullanımıHer worker ayrı proses, yüksek RAMTek event‑loop, düşük RAM
Docker UyumluluğuİyiÇok iyi (uvicorn‑workers)
WebSocket DesteğiSınırlı (gevent)Doğal

Gerçek Dünya Senaryosu: E‑Ticaret Platformunda ASGI’ye Geçiş

Bir e‑ticaret sitesi, e‑ticaret hosting paketinde Django‑based bir monolitik uygulama ile çalışıyordu. Yoğun alışveriş dönemlerinde yüksek eşzamanlı istek ve WebSocket tabanlı canlı stok takibi gereksinimi ortaya çıktı. Geleneksel Gunicorn‑sync yapı %200 gecikme artışı ve CPU %80’e kadar çıkma sorunu yarattı.

Çözüm olarak, ürün listesi ve ödeme API’lerini FastAPI’ye taşıdık, Uvicorn’u --workers 4 ile çalıştırdık ve Nginx üzerinden yönlendirdik. Sonuç: ortalama yanıt süresi 0.12 s’den 0.045 s’ye düştü, CPU kullanımı %45 azaldı ve aynı anda 10.000+ eşzamanlı kullanıcı sorunsuz hizmet verdi. Bu örnek, ASGI’nin gerçek zamanlı veri akışı ve yüksek eşzamanlılık gerektiren iş modellerinde ne kadar etkili olduğunu gösteriyor.

Sıkça Sorulan Sorular

Gunicorn ve Uvicorn aynı anda bir projede kullanılabilir mi?

Evet. Nginx gibi bir reverse proxy ile istekleri yönlendirerek, bir kısmını Gunicorn (WSGI) diğer kısmını Uvicorn (ASGI) üzerinden çalıştırabilirsiniz. Bu, hem klasik sayfalar hem de asenkron API’ler için ideal bir çözüm sunar.

ASGI sunucusunda worker sayısını artırmak performansı artırır mı?

ASGI’de her worker ayrı bir proses olduğu için, CPU çekirdeği sayısına paralel olarak artırmak genellikle faydalıdır. Ancak I/O‑bound işlemler zaten event‑loop içinde yönetildiği için, aşırı worker eklemek RAM tüketimini artırabilir ve ters etki yaratabilir.

Gunicorn’da hangi worker class en iyi performansı verir?

CPU‑intensive uygulamalar için sync en stabil seçenektir. I/O‑bound işlemler için gevent veya eventlet tercih edilebilir, fakat tam asenkronluk gerektiren durumlar için ASGI sunucusu (Uvicorn) önerilir.

Uvicorn’u production’da güvenli bir şekilde nasıl yapılandırırım?

Uvicorn’u --host 0.0.0.0 --port 8000 ile çalıştırdıktan sonra Nginx/Traefik gibi bir ters proxy ile SSL termination yapın, HTTP/2 ve WAF güvenlik duvarı ekleyin. Ayrıca --limit-concurrency ve --timeout parametreleriyle kaynak tüketimini kontrol edin.

Sonuç: Hangi Sunucu Sizin İçin En Uygun?

Karar verirken uygulamanızın iş yükü tipi, gerçek zamanlı gereksinimleri ve sunucu altyapısı göz önünde bulundurulmalıdır. Eğer sadece klasik HTML sayfaları ve düşük eşzamanlılık gerekiyorsa, Gunicorn ve kurumsal hosting paketleri yeterli olacaktır. Ancak API‑first, WebSocket ya da mikro servis mimarileriyle çalışıyorsanız, Uvicorn ve VDS sunucu paketleri en iyi performansı sunar.

İlk adım olarak, mevcut projenizin WSGI mi yoksa ASGI mi olduğunu kontrol edin; ardından uygun sunucuyu kurun, Nginx ile ters proxy yapılandırın ve performans testlerini (wrk, locust) yaparak ayarları ince ayarla optimize edin. Doğru seçim, %40’a varan hız artışı ve maliyet tasarrufu demektir.