Çok sayıda kullanıcısı olan JSON verilerini döndüren bazı web hizmetleri yazıyorum.
Sadece go http sunucusuna kıyasla Nginx'i sunucumun önünde kullanmanın faydaları nelerdir?
Çok sayıda kullanıcısı olan JSON verilerini döndüren bazı web hizmetleri yazıyorum.
Sadece go http sunucusuna kıyasla Nginx'i sunucumun önünde kullanmanın faydaları nelerdir?
Yanıtlar:
Değişir.
Kutunun dışında, ters proxy olarak nginx'i öne koymak size şunları sağlayacaktır:
Go HTTP sunucusu çok iyidir, ancak bunlardan bazılarını yapmak için tekerleği yeniden icat etmeniz gerekecek (ki bu iyi: bu herkesin her şeyi yapması anlamına gelmez).
Her zaman nginx'i öne koymayı daha kolay bulmuşumdur - ki iyi olan budur - ve "web sunucusu" işini yapmasına izin ver. My Go uygulamam, uygulama işlerini yapar ve yalnızca minimum başlık / vb. ihtiyacı var. Nginx'in önüne "kötü" bir şey olarak bakmayın.
log
paketi kullanarak ). IP adresini, kaynak erişimini vb. Kaydetmek istiyorsanız, bunu yazmanız gerekir. Aynı şey, temel bilgilerin ötesinde başlıkları ayarlamak için de geçerli. Somut verilerim olmasa da, Go'nun önündeki nginx gerçekten Go'dan daha yavaş olmamalı: aslında gzip ve kendi optimizasyonları sayesinde daha hızlı olabilir. "Maliyet" daha fazla bellek / CPU kullanımı olacaktır, ancak nginx bu cephede de çok etkilidir.
Go'nun standart http sunucusu gayet iyi. Uygulamanız çoğunlukla / yalnızca "dinamik" istekler / yanıtlarsa, bu gerçekten en iyi yoldur.
Statik varlıkları sunmak için nginx kullanabilirsiniz, ancak büyük olasılıkla standart Go one bunun için de uygundur. Daha yüksek performansa ihtiyacınız varsa, Varnish ile olabildiğince çok CDN veya önbellek kullanmalısınız (örneğin).
Aynı IP adresinden farklı uygulamalar sunmanız gerekiyorsa, nginx, istekleri farklı uygulamalar arasında dağıtmak için bir proxy için iyi bir seçimdir; yine de bu tür şeyler için alet kutusundan daha sık Varnish veya HAProxy alırdım.
Gorilla web araç sahibi olursunuz
schema
paketi, form değerlerini bir yapıya dönüştürür.Bu, Go'nun net/http
ve NGINX gibi HTTP sunucuları arasındaki büyük boşluğu doldurur .
Şahsen, net/http
bunun yerine bir CDN takabileceğimi bilirsem , başka bir HTTP sunucusu kurmaktan ve yapılandırmaktan kaçınırdım.
net/http
Herhangi bir standart kitaplıkta en güçlü HTTP sunucusuna sahip olduğunu düşünüyorum .
Gönderen https://blog.gopheracademy.com/caddy-a-look-inside/ Git Gzip işleyebilir gibi Middleware'i kullanarak ve http başlıkları yönlendirme, hataları, statik dosyaları arar. Blogdaki aşağıdaki satır, böyle bir talebi nasıl ele alacağınızı gösterir.
logHandler(gzipHandler(fileServer))
Hata kayıtlarını gerçekten ilginç bir şekilde ele alırlar. Ara yazılımınız bir hata kodu (int) döndürdüğü sürece, hata işleme ara yazılımı bunu otomatik olarak işler. Nginx'in yapacağı gibi Go'da tüm siteyi yapılandıracak kadar ileri gittiler. "Tüm Gopher Academy web siteleri için nginx.conf dosyası 115 satırın üzerindeydi. Eşdeğer Caddyfile yalnızca 50 satırdır."