Bir analiz paketi hazırlıyorum ve proje gereksinimleri günde 1 milyar isabeti desteklemem gerektiğini söylüyor. Evet, "milyar". Başka bir deyişle, saniyede 12.000'den az isabet devam etmedi ve tercihen patlayacak bir yer vardı. Bunun için birden fazla sunucuya ihtiyacım olacağını biliyorum, ama "daha fazla donanım atmadan" önce her düğümden maksimum performans elde etmeye çalışıyorum.
Şu anda, hit izleme bölümünü tamamladım ve iyi optimize ettim. Hemen hemen istekleri doğrudan Redis'e kaydediyorum (daha sonra Hadoop ile işlem yapmak için). Uygulama ağ geçidi için bir gunicorn ile Python / Django olduğunu.
2 GB Ubuntu 10.04 Rackspace sunucum (bir üretim makinesi değil) saniyede yaklaşık 1200 statik dosya sunabilir (tek bir statik varlığa karşı Apache AB kullanılarak karşılaştırılmıştır). Karşılaştırma yapmak için, statik dosya bağlantısını izleme bağlantımla değiştirirsem, yine de saniyede yaklaşık 600 istek alıyorum - bence bu, izleyicimin iyi optimize edildiği anlamına geliyor, çünkü aynı statik varlığa hizmet etmekten sadece 2 kat daha yavaş bir faktör defalarca.
Ancak, milyonlarca isabetle karşılaştırdığımda birkaç şey fark ettim -
- Disk kullanımı yok - bu bekleniyor, çünkü tüm Nginx günlüklerini kapattım ve özel kodum istek ayrıntılarını Redis'e kaydetmekten başka bir şey yapmıyor.
- Sabit olmayan bellek kullanımı - Muhtemelen Redis'in bellek yönetimi nedeniyle, bellek kullanımım yavaş yavaş artacak ve sonra geri düşecek, ancak bir zamanlar darboğazım olmadı.
- Sistem yükü 2-4 civarında seyrediyor, sistem en ağır ölçütlerimde bile hala duyarlı ve yine de http://mysite.com/tracking/pixel'i az görünür gecikmeyle manuel olarak görüntüleyebilirken (diğer) sunucum ikinci.
- Kısa bir test yaparsam, örneğin 50.000 vuruş (yaklaşık 2m sürer), saniyede düzenli, güvenilir bir 600 istek alırım. Daha uzun bir test yaparsam (şu ana kadar 3,5 m'ye kadar denedim), r / s değerim yaklaşık 250 değerine düşer.
Sorularım --
a. Henüz bu sunucuyu azamıyorum. 1.200 / sn'lik statik dosyalar nginx performansı diğerlerinin deneyimleriyle karşılaştırılabilir mi?
b. Bu tür yüksek hacimli uygulamalar için ortak nginx ayarları var mı? 64'e ayarlanmış işçi iş parçacıkları ve 8'e ayarlanmış gunicorn iş parçacıkları var, ancak bu değerleri değiştirmek bana çok yardımcı ya da zarar vermiyor gibi görünüyor.
c. Gelen bağlantılarımı sınırlandırabilecek linux düzeyinde ayarlar var mı?
d. Uzun süreli testlerde performansımın 250r / s'ye düşmesine ne neden olabilir? Yine, bu testler sırasında bellek maksimum düzeyde değildir ve HDD kullanımı sıfırdır.
Şimdiden teşekkürler, hepsi :)
EDIT İşte benim nginx yapılandırma - http://pastie.org/1450749 - çoğunlukla vanilya, belirgin yağ kesilmiş.