SORU
5 Mart 2010, Cuma


Çok çekirdekli makinelerde Node.js

Node.js ilginç görünüyorAMABir şey özledim gerekir. Node.js değil sadece tek bir işlem ve bir konu üzerinde çalışmak üzere ayarlanmış?

Nasıl çoklu çekirdek ve çoklu İŞLEMCİ CPU sunucular için ölçek var mı? Sonuçta, tüm büyük mümkün olduğunca tek iplik server hızlı yapmak için, ama yüksek yükler için birden fazla CPU kullanmak istiyorum. Ve aynı uygulamaları daha hızlı yapmak için gider - bugün yolu gibi birden çok CPU kullanımı ve görevleri parallelize.

Nasıl node.js bu tablodaki yeri nedir? Nedense birden çok örneği dağıtmak için onun fikri değil de ne?

CEVAP
31 Aralık 2011, CUMARTESİ


[Bu yazı 2012-09-02 olarak güncelliğini (yukarıda daha yeni).]

Node.js kesinlikle çok çekirdekli makinelerde ölçek yok.

Evet, Node.js bir iş parçacığı başına süreçtir. Bu çok kasıtlı bir tasarım kararı ve kilitleme semantiği ile başa çıkmak için ihtiyacı ortadan kaldırır. Eğer bunu kabul etmiyorsanız, muhtemelen henüz ne kadar delicesine zor, çok iş parçacıklı kod hata ayıklamak için olduğunu anlamıyor. Node.js süreç işliyor neden model ve daha derin bir açıklama için bu şekilde (ve ASLA birden çok iş parçacığı desteği olacak), my other post okuyun.

Nasıl 16 çekirdek kutumu yararlanabilir mi?

İki yolu vardır:

  • Büyük ağır hesaplamak için görüntü kodlama gibi görevleri, Node.js alt işlemler yangın veya ek çalışan süreçleri mesaj gönderebilir. Bu tasarım, bir iş parçacığı olayların akışını yönetmek olurdu ve N ağır görevler hesaplama yapıyor ve diğer 15 CPU kadar çiğneme işler.
  • Bir Java eklentisi üretimini Ölçekleme için, bir kutu üzerinde birden fazla Node.js sunucular çalıştırmalısınız, çekirdek ve split başına bunlar arasında trafik isteği. Bu mükemmel CPU benzeşme ve işlem hacmi yaklaşık ölçekli doğrusal çekirdek sayısı ile sağlar.

Ölçekleme bir Java eklentisi üzerinde verim

V0 beri.6.X Node.js düz the cluster module kolay tek bir bağlantı noktasını dinlemesi birden çok düğüm işçi getirebilirsiniz kutunun dışında yer verdi. Bu eski learnboost "" modülü npm ile kullanılabilir. küme aynı DEĞİLDİR unutmayın

if (cluster.isMaster) {
  // Fork workers.
  for (var i = 0; i < numCPUs; i  ) {
    cluster.fork();
  }
} else {
  http.Server(function(req, res) { ... }).listen(8000);
}

İşçiler yeni bağlantıları kabul etmek için yarışacak ve en az yüklü süreci kazanmak için büyük olasılıkla. Gayet iyi çalışıyor ve verimi oldukça iyi, çok çekirdekli bir kutuda ölçek.

Eğer birden çok çekirdek ilgilenmeye yeterince yük varsa, o zaman birkaç şey daha çok yapmak isteyeceksiniz

  1. Çalıştırmak Node.js hizmet arkasında bir web proxy gibi Nginx Apache - bir şey yapamaz bağlantısı azaltma (sürece istediğiniz aşırı koşullara getirmek kutusunu aşağı tamamen), URL yeniden yazma, hizmet, statik içerik, proxy ve diğer alt hizmetleri.

  2. Periyodik olarak işçi işlemler geri dönüşüm. Uzun süren bir işlem için bile küçük bir bellek sızıntısı sonunda değişecektir.

  3. Kur toplama / izleme günlüğü


PS: başka bir yazı (bu yazı, üst yazı) yorum ve Christopher Aaron arasında bir tartışma Var. Bu konuda bir kaç yorum:

  • Paylaşılan soket modeli birden çok işlemi tek bir bağlantı noktası üzerinde dinleme yapmak için izin verdiği için çok uygun ve yeni bağlantıları kabul etmek için yarışacak. Kavramsal olarak, preforked Apache her işlemi tek bir bağlantı kabul et ve öl o zaman olacak önemli bir ihtar ile bunu düşünebilirsiniz. Apache için verimlilik kaybı yeni işler çatallaşma yükü ve soket işlemleri ile ilgisi yok.
  • Node.js N işçiler tek bir soket rekabet olması için son derece makul bir çözüm. Alternatif-box Nginx gibi ön uç kurma ve bireysel işçiler için proxy trafiği, yeni bağlantılar atamak için işçiler arasında değişen var. İki çözümleri çok benzer performans özelliklerine sahip. Ve yukarıda da belirttiğim gibi, büyük olasılıkla Nginx (ya da alternatif) düğüm servis zaten önü sahip olmak isteyeceksiniz yana, seçim burada gerçekten arasında

Paylaşılan Bağlantı Noktaları: nginx (port 80) --> Node_workers x N (sharing port 3000 w/ Cluster)

vs

Bireysel Port: nginx (port 80) --> {Node_worker (port 3000), Node_worker (port 3001), Node_worker (port 3002), Node_worker (port 3003) ...}

Muhtemelen kurulum (süreçler arasında daha az kancası, daha gelişmiş Yük Dengeleme kararları için potansiyel, vb.), tek tek bağlantı noktaları için bazı faydaları vardır ama kesinlikle kurmak için daha fazla iş ve yerleşik küme modülü çoğu insan için çalışan düşük-karmaşıklık bir alternatiftir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Grace Su

    Grace Su

    6 Ocak 2006
  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010
  • Nightmare2005

    Nightmare200

    14 Ocak 2007