Apache'yi Node.js ile değiştirebilir miyim?


151

Ben her zamanki şüpheliler (Apache, MySQL ve PHP) kullanarak CentOS üzerinde çalışan bir web sitesi var. Bu web sitesinin ilk açılışından bu yana biraz gelişti ve şimdi onunla daha gerçek şeyler yapmak istiyorum - yani gerçek zamanlı bildirimler. Okuduğum kadarıyla Apache bunu kötü işliyor. Ben sadece Apache Node.js ile değiştirip değiştiremeyeceğini merak ediyorum (" LAMP " yerine "LNMP" olurdu).

Çevrimiçi olarak bir çözüm aramayı denedim, ancak bir çözüm bulamadım. Okuduğum şeyleri doğru bir şekilde yorumluyorsam, çoğu insan Node.js'nin Apache ve PHP'yi birlikte değiştirebileceğini söylüyor. Ben mevcut PHP kodu bir sürü olsa da, bu yüzden tutmak istiyorum.

Zaten açık değilse, oldukça kafam karıştı ve biraz aydınlanma kullanabilirim. Çok teşekkürler!


Maymun sunucusu bakmaya değer olabilir.
TryHarder

Yanıtlar:


86

PHP'nizi JavaScript'te yeniden yazmaya hazırsanız, evet, Node.js Apache'nizin yerini alabilir.

Sunucularınız ve istemcileriniz arasında ters proxy modunda çalışan bir Apache veya NGINX örneği yerleştirirseniz, tüm PHP'nizi tamamen değiştirene kadar Node.js üzerindeki JavaScript'te bazı istekleri ve Apache'de barındırılan PHP'nizdeki bazı istekleri işleyebilirsiniz. JavaScript kodu ile. Bu mutlu bir ortam olabilir: WebSockets'iniz Node.js'de çalışıyor mu, Apache + PHP'de daha sıradan çalışıyor.


1
Hızlı cevabı takdir ediyorum! Nginx Apache'den büyük ölçüde üstün mü? Zaten yerinde bir .htaccess dosyam var ve onu saklamak güzel olurdu. Ayrıca, Apache'nin Node.js'ye iletme isteklerinin olmasının anlamsız olduğunu okudum, çünkü o zaman hala Apache'den geçtiğiniz için Node.js'nin avantajlarını kaybediyorsunuz. Node.js'nin "nodejs" adlı bir alt klasördeki herhangi bir şeyi 80 numaralı bağlantı noktasında dinlemesi daha iyi olur ve bu alt klasörde olmayan bir şey Node.js tarafından Apache'ye aktarılabilir mi? Apache 8000 gibi başka bir limanda dinleyebilir.
Rick

21
@Rick, kendi cevabımı silmeye oldukça yakınım; Düğüm kullanabilirsendfile ve FastCGI desteği için PHP'nizi Düğüm üzerinden de sunmayı kolaylaştıracak bir modül vardır . Nginx vs Apache'ye gelince, iş parçacığı veya çok işlemcili sunucular üzerinde async tarzı sunucular için her zaman enayi oldum :) ama Apache belgelerini bulmayı ve okumayı daha kolay buldum. Şaşırtıcı rakamlarla ölçeklendirmeniz gerekmedikçe bu kişisel tercihi olarak adlandırırım. :)
sarnold

3
@Rick Ne olduğunu ve nasıl çalıştığını anlamadan önce üretim malzemelerini Düğüme taşımak istemezsiniz. Düğüm, işleri daha hızlı hale getirmek için sihirli bir hap değildir. Olay güdümlü / eşzamansız paradigma yeni değildir ve neden her şey için kullanılmadığının nedenleri vardır. en.wikipedia.org/wiki/Asynchronous_I/O
Øyvind Skaar

1
@Rick Sahip olduklarınızı değiştirmeyi düşünmek yerine, Düğüm'ü ayrıca çalıştırmak daha iyi olabilir. Her şeyi düğümden (?) Geçirmenin bir nedeni olduğunu düşünmeyin, kulağa kötü bir fikir gibi geliyor. Düğümü başka bir bağlantı noktasında veya ana bilgisayarda çalıştırmanız yeterlidir.
Øyvind Skaar

2
@ Øyvind Skaar katılıyorum. Ayrıca, çoğu web sitesi için (örneğin Wordpress), gerçek darboğaz, dosya erişimi değil veritabanıdır. Ve dosya erişimi bir sorunsa, önbellek her zaman geçerli bir çözümdür. Her neyse, gerçek performans için PHP-APC çok ucuz bir numara.
magallanes

26

Node.js, olaylı / engellemeyen mimarisi sayesinde Apache'den daha hızlı olabilir, ancak bazı Apache işlevlerinin yerine geçen modülleri / kitaplıkları bulmada sorun yaşayabilirsiniz.

Node.js'nin kendisi, sunucu uygulamalarını ve web uygulamalarınızın gerçek zamanlı kısımlarını nispeten hızlı bir şekilde oluşturmanıza olanak tanıyan hafif, düşük düzeyli bir çerçevedir, ancak Apache çok daha geniş yapılandırma seçenekleri ve "klasik" web sunucusu odaklı özellikler sunar.

PHP'yi express.js gibi node.js tabanlı web uygulama çerçevesiyle değiştirmek istemiyorsanız, Apache ile kalmanız gerektiğini (veya performans sorunlarınız varsa Nginx'e geçmeyi düşünmeniz gerektiğini) söyleyebilirim.


11

Node.js'nin web sunumunda gelecek olduğuna inanıyorum, ancak çok fazla PHP kodunuz varsa, Apache / MySQL sizin için en iyi seçenektir. Apache, Node.js'ye proxy istekleri için yapılandırılabilir veya Node.js, Apache'ye istekleri proxy yapabilir, ancak her iki durumda da, özellikle de birincisinde bazı performansların kaybolduğuna inanıyorum. Çok yüksek bir trafik web sitesi olsa çalışmıyorsa büyük bir anlaşma.

Stackoverflow'a yeni kaydoldum ve henüz kabul edilen cevap hakkında yorum yapamam, ancak bugün HTTP protokolü üzerinden dosya sunmak için aslında sendfile () kullanan basit bir Node.js komut dosyası oluşturdum. (Kabul edilen yanıtın bağlandığı mevcut örnek, dosyayı göndermek için yalnızca çıplak TCP protokolü kullanıyor ve HTTP için bir örnek bulamadım, bu yüzden kendim yazdım.)

Birisinin bunu faydalı bulabileceğini düşündüm. Sendfile () OS çağrısı ile dosya sunumu, verilerin "kullanıcı arazisi" üzerinden kopyalanmasından daha hızlı olmak zorunda değildir, ancak CPU ve RAM'i daha az kullanır ve böylece klasik yoldan daha fazla sayıda bağlantıyı işleyebilir.

Bağlantı: https://gist.github.com/1350901


2
Her ne kadar çok doğru olsa da, apache'yi çıkardığınızda açıkladığınız şeyi yapmaya devam ederseniz, düğüm olarak hızlı ve değilse, daha hızlı çalışacağına inanıyorum. Apache, insanların görmediği veya gerçekten anlamadığı birçok şey yapar ve bu web sunucularının tüm işlevlerini node.js'ye eklerseniz, onlar kadar yavaş çalışır. Basit bir örnek olarak, mynode.js / getfile? File = / etc / shadow
Rahly

8

Ne demek istediğini açıklayan önceki SO yazı (php + socket.io + node)

Bazı düğümlere bir düğüm sunucusu koyabileceğinizi düşünüyorum: socket.io ile 8000 ve socket.io istemci kodunu etiketlere tokatlayın ve minimum çalışma ile mevcut uygulamanızı bir sürü iş olmadan socket.io (gerçek zamanlı bebek) ile sallayın.

Düğüm tek arka uç sunucunuz olsa da, düğümün adına kadar yaşamayı ve bir düğüm haline gelmeyi sevdiğini unutmayın. Bir süre önce Ryan Dahl'ın bir PHP Kullanıcıları grubuna verdiği bir konuşmaya baktım ve iş yapan ve birbirleriyle konuşan birkaç düğüm sürecinin vizyonuyla ilgili isim düğümünden bahsetti.


2

LAMBA günümüzde ORTAYA karşı. Doğrudan karşılaştırma için bkz. Http://tamas.io/what-is-the-mean-stack .

Elbette M, E ve A biraz değişkendir. Örneğin, daha yeni koa (E) xpress'in yerini alabilir.

Ancak, Apache'yi Node.js ile değiştirmek, muhtemelen web yığınınızı modernleştirmenin doğru yolu değildir.

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.