Nginx ve memcached birlikte ne kadar iyi çalışır?


14

Glassfish uygulama sunucusu kümesinde çalışan Java EE tabanlı bir web uygulamamız var . Gelen trafik esas olarak uygulama kaynaklarımızın XML tabanlı gösterimleri için RESTful istekleri olacaktır, ancak trafiğin% 5'i JSON veya XHTML / CSS tabanlı gösterimler için olabilir.

Şimdi gelen trafiği kümedeki Glassfish örnekleri arasında dağıtmak için yük dengeleme çözümlerini araştırıyoruz. Ayrıca, anahtarları REST kaynak adları (ör. "/ User / bob", "/ grup / jazzlovers") olan ve değerleri karşılık gelen XML gösterimleri.

Umut vaat eden bir yaklaşım, her iki kuşu bir taşla öldürmek ve hafif, hızlı nginx HTTP sunucusu / ters proxy kullanmaktır. Nginx, önceden var olmayan bir XML gösterimi olup olmadığını görmek için önce URI'sini memcached'de arayarak gelen her isteği ele alır. Değilse, nginx isteği Glassfish örneklerinden birine gönderir. Nginx memcached modülü bu kısa yazıda açıklanmaktadır .

Nginx ve memcached ile bu şekilde kullanılan genel izleniminiz nedir, onlarla ne kadar mutlusunuz? Bunları öğrenmek için en çok hangi kaynakları buldunuz? Onları denediyseniz ve amaçlarınıza uymuyorsa, neden olmasın ve bunun yerine ne kullandınız?

Not: İşte ilgili bir soru . ServerFault hakkında bilmeden önce bunu StackOverflow üzerinde sordum .

Düzenleme: Doğrudan bir deneyim olmasa da, şimdiye kadar burada tüm cevaplar oldukça yararlı olmuştur. Bu cevap sonunda StackOverflow'da ortaya çıktı ve nginx / memcached kurulumunda oldukça yükseldi.


Güzel, yapacak. Muhtemelen önümüzdeki ay bunu deneyeceğiz
Jim Ferrans

Yanıtlar:


6

Gerçekten web sunucularınızın önünde bir önbellek sunucusu kullanmalısınız. Vernik önbellek öneririm. İskandinavya'nın en büyük ve en yoğun web sitesi ile işte kullanıyoruz. 13 adet aşırı yüklü Squid kutusunu 1 Vernik kutusu ve 1'i yedek olarak değiştirdik.

Özel web sitemde basit bir uygulamayı karşılaştırdım ve 9 istekten bir saniyeden 2000'e çıktı.

Ne kadar süre bellekte tutacağına siz karar verirsiniz, zamanın sonuna kadar bir süre yapabilir ve ardından veri değiştiğinde önbellek sunucusuna bir http temizleme isteği gönderebilirsiniz.


1
Ancak nginx önbellek Vernik'ten açıkça daha hızlıdır .
VBart

4

Benim kişisel görüşüm, deneyime göre, bir yük dengeleyici kullanıyorsanız, bu kutuyu tamamen yük dengeleme fonksiyonları ile sınırlamak istediğinizdir. Yük dengeleyicinizin önbellekten bile içeriğe sunulması, yüksek yük durumlarında yük dengeleme işlevini bozar (daha fazla bağlantı daha uzun süre aktif kalır, toplam kapasiteyi ve verimi azaltır).

Ben uygulamanın kendisi arama yapmak ve önbellek içeriği hizmet ve yük dengeleyici işini yapmasını tavsiye ediyorum. Bununla birlikte, yük dengeleme söz konusu olduğunda nginx mükemmel değildir - sadece çok basit bir yuvarlak robin algoritması sunar. Bunun yerine haproxy öneriyoruz. SSL şifre çözme hizmetlerine ihtiyaç duyuyorsanız, nginx benim deneyimime göre, iyi bir şekilde haksinin önünde otururken çalışır.


1

Yük dengeleme, yüksek kullanılabilirlik vb.Gibi şeylere ihtiyacınız olması durumunda çıkmaza gireceğinizi düşünüyorum.

Ayrıca, bu durumu göz önünde bulundurun: kullanıcı yetkilendirildiğinde sayfa farklı görünür, her kullanıcı için mevcut ve kişiselleştirilmiş ek özellikler bulunur. URL'ler bağlanma vb. İçin aynıdır. Örneğin, yetkilendirilmiş kullanıcının yorum yapmak için adını / captcha'sını girmesi gerekmeyen site, u giriş yaptığınızda kullanıcı adınızı en üstte görüntüler (sunucu hatası gibi). Bu gibi durumlarda, nginx kullanılamaz olacaktır, çünkü yetkilendirilmiş kullanıcıyı yetkisizden ayırt edemezsiniz.

SSL'ye ihtiyacınız yoksa, Varnish'i çalıştırmanızı öneririm. Web sunucusu veya proxy olarak değil, HTTP Hızlandırıcı olarak tasarlanmıştır. SSL'ye ihtiyacınız varsa, SSL hızlandırıcı olarak üstte nginx ve düz HTTP hızlandırıcı olarak vernik çalıştırın, çünkü Vernik SSL ile ilgilenemez.

Önbellek sunucusu seçiminin uygulamaya özel olduğunu ve uygulamanın derinlemesine analizi olmadan bu konuda genel yorum yapamayacağınızı düşünüyorum.


1

benim seçimim alkoksidir. Çok küçük ve çok hızlı ters proxy, ancak önbellek proxy değil! Önbellek sistemim için "Squid Web Proxy" kullanıyorum

CACHE /squid/ -> Load-balancing /Haproxy/ -> WEB I /lighttpd/
                                          -> WEB II /lighttpd/
                                          -> WEB III /lighttpd/

Bu çalışma web sistemim için mükemmel

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.