Node.js aslında ölçeklenebilirliği arttırıyor mu?


21

C10K Problemi hakkında okumuştum ve asıl nota asenkron sunucu giriş / çıkışını ifade eden kısım. http://www.kegel.com/c10k.html#aio

Bunun Node.js'nin sunucuda ne yaptığını çok fazla özetlediğine inanıyorum, iş parçacığı işinden sorumlu olmak yerine I / O kesmelerine (olaylara) dayanarak iş parçacıklarının kullanıcı isteklerini işleme koymasına izin vererek iş parçacıklarının sorumlu olduğunu bildirmek yerine tam işlemci işi. İş parçacığı başka şeylerle (tıkanmasız) devam edebilir ve bir işin ne zaman yapıldığı (örneğin bir dosya bulunduğunda veya bir video sıkıştırıldığında) haberdar edilebilir.

Bu daha sonra bir iş parçacığının soketler ve dolayısıyla sunucudaki kullanıcılar için daha "uygun" olduğu anlamına gelir.

Sonra bunu buldum: http://teddziuba.com/2011/10/straight-talk-on-event-loops.html

Buradaki yazar, olay odaklı çerçeve (kesintili iş parçacığı), iş parçacığı serbest bıraksa da, aslında bir CPU'nun yapması gereken iş miktarını azaltmadığını iddia ediyor! Buradaki mantık, eğer bir kullanıcı yüklediği bir videoyu sıkıştırmak isterse, CPU'nun hala bu işi yapması gerekiyor ve bunu yaparken engelliyor olacak (sadelik uğruna, burada paralelliğin unutacağı şekilde) daha iyi bilmek!).

Ben basit bir kodlayıcıyım, sunucu yöneticisi veya benzeri bir şey değil. Sadece bilmek istiyorum: Node.js 'bulut bilişim' tanrılarından bir hediye mi yoksa hepsi sıcak hava mı ve ölçeklenebilirliği artırarak şirketlerin zamandan ve / veya paradan tasarruf etmesini sağlamaz mı?

Çok teşekkürler.


12
Birincisi ted bir trol, ikincisi node.js CPU'ya bağlı olmayan uygulamalar değil IO'ya bağlı uygulamalar içindir. İstediğiniz şey, ikisinin birleşimidir. CPU'ya bağlı herhangi bir şey yeni bir iş parçacığına / sürecine girer. IO'ya bağlı her şey bir olay döngüsünde gider.
Raynos

1
+! Bu adam kesinlikle bir trol.
Patrick Hughes

Karşılaştığınız şeye bağlıdır - eğer hala Apache kullanıyorsanız (bazı nedenlerden dolayı) - o zaman Düğüm tanrıların armağanıdır, ancak Nginx ile karşılaştırırsanız - iyileştirmeler çok daha az şiddetlidir ve Düğüm daha da yavaşlar. (10 kez daha yavaş, 2 ms ile 20 ms arasında bir yanıt oluşturmak için, BUT , bizim testlerimizde, Nginx orta derecede ağır yük altında 504 veriyordu ve Node normal tepkiler veriyordu).
c69

Şimdi siz bahsettiniz, troll adam açıkça bir trol. @ c69 bu iyi bilgi, çok teşekkürler.
Alex,

"Olay döngülerindeki düz konuşma" bağlantınız artık çalışmıyor.
Robert Harvey,

Yanıtlar:


20

Elbette herhangi bir CPU'ya bağlı iş CPU'yu kullanacak. İşlemciyi yazdığınız dil veya çerçevede ne olursa olsun engelleyecektir.

Node.js, CPU bağlı değil, G / Ç bağlantılı işiniz için idealdir. Yapabileceğim halde, Düğümde ağır kaldırma yapmazdım. Node.js , fibonacci sayı sunucuları gibi kurgusal olmayan veya hayal edilenleri değil gerçek sorunları çözer . “Sıcak hava” değil.


Sadece bazı kriterleri kontrol ediyorum ve gerçekten de sayfalara hizmet vermek çok daha hızlı gözüküyor: zgadzaj.com/… .. Sanırım peşimde olan şey bu ...
Alex

3
@AlexW: Bu kriterler hakkında iyi bir nokta, temelde statik içerik sunduğunuzdur. Benim Bkz Hit Milyonlarca a Day parçası. Bunun için PHP tercümanını çevirmek israftır. Dosya dizinlerini sunarken düğüm-statik gibi bir şeye bakın .
Josh K

@AlexW, Sadece zgadzaj.com/… 'nin şu anda eski olan node.js 0.1.103' ü kullandığını hatırlatmak için !!
Samyak Bhuta

4

C10K makalesi uygulama detayları konusunda biraz güncel olmasa da, olaya dayalı eşzamanlılık (reaktör modeli) hala önleyici programlamaya göre bazı yönlerden üstündür. Örneğin, önleyici bir programlama modeli, GÇ engellenmiş durumdayken konuları programlayabilir. Bu, düğümün (ve Ruby'nin Etkinlik Makinesi ve Python's Twisted gibi diğer araçlarının) gerçek iş yaparken daha fazla zaman harcayarak ve daha az zaman engellemeyle daha iyi kullanılabilir döngüleri kullanmasını sağlar.


-1

Çoklu okuma hala performansı artırıyor. Orijinal açıklama, çok çekirdekli varlığını göz önünde bulundurmadığından aptalcadır. Birden fazla çekirdeğiniz olduğu an, yivler artık yiv değildir. Onlar köprüler. Yoğun işleyen her uygulama, tek bir dişli uygulamadan daha fazla fayda sağlayacak.


2
Bu gerçekten de Node.JS endişesini açıklamıyor. Node.JS'nin birincil faydası, cevabınızın yanıtlamadığı ağır arkaplan iş yüklerini etkin bir şekilde ele almamak için tek bir iş parçacığından birden fazla isteği hızlıca işleme ve gönderme yeteneğidir.
Robert Harvey,

Node.js dosyasının birincil yararı, ön ve arka uç için tek bir dile sahip olmaktır. Tüm bu diğer iddialar, daha önemli görünmesini sağlamak için kabartıyor.
whatsisname,

2
@whatsisname, tek iş parçacıklı eşzamanlılık bence tek bir dilden çok daha büyük bir avantajdır.
plise
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.