Neden Node.js Kullanmalıyım? Her Duruma Özel Eğitim

Yayınlanan: 2022-03-11

Tanıtım

JavaScript'in artan popülaritesi beraberinde birçok değişiklik getirdi ve bugün web geliştirmenin yüzü önemli ölçüde farklı. JavaScript'in sunucuda ve tarayıcıda çalıştırılmasıyla günümüzde web'de yapabileceğimiz şeyleri, birkaç yıl önce hayal etmek zordu veya Flash veya Java Applet'leri gibi korumalı ortamlar içine alındı.

Node.js çözümlerini incelemeden önce, dil ve veri biçimini (JSON) birleştiren ve geliştirici kaynaklarını en iyi şekilde yeniden kullanmanıza olanak tanıyan yığın genelinde JavaScript kullanmanın yararlarını okumak isteyebilirsiniz. Bu, JavaScript'in özellikle Node.js'den daha fazla bir avantajı olduğundan, burada fazla tartışmayacağız. Ancak, yığınınıza Düğüm eklemek önemli bir avantajdır.

Wikipedia'nın belirttiği gibi: "Node.js, Google'ın V8 JavaScript motorunun, libuv platformu soyutlama katmanının ve kendisi de öncelikle JavaScript ile yazılmış bir çekirdek kitaplığın paketlenmiş bir derlemesidir." Bunun ötesinde, Node.js'nin yaratıcısı Ryan Dahl'ın, "Gmail gibi uygulamalardan ilham alan", itme özelliğine sahip gerçek zamanlı web siteleri oluşturmayı hedeflediğini belirtmekte fayda var. Node.js'de geliştiricilere engellemesiz, olay güdümlü I/O paradigmasında çalışmak için bir araç verdi.

Durum bilgisi olmayan istek-yanıt paradigmasına dayanan 20 yılı aşkın durumsuz web'den sonra, nihayet gerçek zamanlı, iki yönlü bağlantılara sahip web uygulamalarına sahibiz.

Tek cümleyle: Node.js, web yuvaları üzerinden itme teknolojisini kullanan gerçek zamanlı web uygulamalarında parlar. Bunda bu kadar devrimci olan ne? Durum bilgisi olmayan istek-yanıt paradigmasına dayanan 20 yılı aşkın bir süredir durumsuz web'den sonra, sonunda hem istemcinin hem de sunucunun iletişimi başlatabileceği ve özgürce veri alışverişi yapmalarına olanak tanıyan gerçek zamanlı, iki yönlü bağlantılara sahip web uygulamalarına sahibiz. . Bu, müşterinin her zaman iletişimi başlattığı tipik web yanıtı paradigmasının tam tersidir. Ek olarak, tümü standart 80 numaralı bağlantı noktası üzerinden çalışan açık web yığınını (HTML, CSS ve JS) temel alır.

Buna yıllardır Flash ve Java Uygulamaları biçiminde sahip olduğumuz iddia edilebilir - ancak gerçekte bunlar, istemciye iletilmek üzere web'i bir aktarım protokolü olarak kullanan korumalı ortamlardı. Ayrıca, yalıtılmış olarak çalıştırıldılar ve genellikle ek izinler ve benzeri gerektirebilecek standart olmayan bağlantı noktaları üzerinden çalıştırıldılar.

Tüm avantajlarıyla Node.js, benzersiz faydalarına bağlı olan birçok yüksek profilli şirketin teknoloji yığınında artık kritik bir rol oynamaktadır. Node.js Vakfı, kuruluşların Node.js'yi neden dikkate alması gerektiğine dair en iyi düşünceleri Node.js Vakfı'nın Vaka Çalışmaları sayfasında bulunabilecek kısa bir sunumda bir araya getirdi.

Bu Node.js kılavuzunda, yalnızca bu avantajların nasıl elde edildiğini değil, aynı zamanda neden Node.js'yi kullanmak isteyebileceğinizi ve neden kullanmayacağınızı da tartışacağım - bazı klasik web uygulaması modellerini örnek olarak kullanarak.

O nasıl çalışır?

Node.js'nin ana fikri: dağıtılmış cihazlarda çalışan veri yoğun gerçek zamanlı uygulamalar karşısında hafif ve verimli kalmak için engellemeyen, olaya dayalı G/Ç kullanın.

Bu bir ağız dolusu.

Bunun gerçekten anlamı, Node.js'nin web geliştirme dünyasına hükmedecek gümüş kurşun yeni bir platform olmadığıdır . Bunun yerine, belirli bir ihtiyacı karşılayan bir platformdur.
Cıvıldamak

Bunun gerçekten anlamı, Node.js'nin web geliştirme dünyasına hükmedecek gümüş kurşun yeni bir platform olmadığıdır . Bunun yerine, belirli bir ihtiyacı karşılayan bir platformdur . Ve bunu anlamak kesinlikle gereklidir. Node.js'yi CPU yoğun işlemler için kesinlikle kullanmak istemezsiniz; aslında, onu ağır hesaplama için kullanmak, neredeyse tüm avantajlarını ortadan kaldıracaktır. Node'un gerçekten parladığı yer, hızlı, ölçeklenebilir ağ uygulamaları oluşturmaktır, çünkü çok sayıda eşzamanlı bağlantıyı yüksek aktarım hızıyla yönetebilir, bu da yüksek ölçeklenebilirliğe eşittir.

Kaputun altında nasıl çalıştığı oldukça ilginç. Her bağlantının (isteğin) yeni bir iş parçacığı oluşturduğu, sistem RAM'ini kapladığı ve nihayetinde kullanılabilir RAM miktarını maksimuma çıkardığı geleneksel web hizmeti teknikleriyle karşılaştırıldığında, Node.js, engellemeyen I/ kullanarak tek bir iş parçacığı üzerinde çalışır. O çağrıları, olay döngüsünde tutulan on binlerce eşzamanlı bağlantıyı desteklemesine izin verir.

Geleneksel ve Node.js sunucu iş parçacığının şeması

Hızlı bir hesaplama: Her bir iş parçacığının potansiyel olarak beraberinde 2 MB belleğe sahip olduğunu varsayarsak, 8 GB RAM'e sahip bir sistemde çalışmak bizi teorik olarak maksimum 4.000 eşzamanlı bağlantıya götürür (hesaplamalar Michael Abernethy'nin “Just what is Node” makalesinden alınmıştır. .js?”, 2011'de IBM DeveloperWorks'te yayınlandı; ne yazık ki makale artık mevcut değil) artı iş parçacıkları arasında bağlam değiştirme maliyeti. Geleneksel web hizmeti tekniklerinde genellikle uğraştığınız senaryo budur. Tüm bunlardan kaçınarak Node.js, 1 milyonun üzerinde eşzamanlı bağlantı ve 600 binin üzerinde eşzamanlı web yuvası bağlantısının ölçeklenebilirlik düzeylerine ulaşır.

Elbette, tüm istemci istekleri arasında tek bir iş parçacığının paylaşılması sorunu vardır ve bu, Node.js uygulamaları yazmanın olası bir tuzağıdır. İlk olarak, ağır hesaplama, Node'un tek iş parçacığını tıkayabilir ve tüm istemciler için sorunlara neden olabilir (bundan sonra daha fazlası), çünkü söz konusu hesaplama tamamlanana kadar gelen istekler engellenir. İkinci olarak, geliştiricilerin, Node.js örneğinin sonlandırılmasına (programın etkin bir şekilde çökmesine) neden olacak çekirdek (en üstteki) Node.js olay döngüsüne kadar köpüren bir istisnaya izin vermemek için gerçekten dikkatli olmaları gerekir.

İstisnaların yüzeye çıkmasını önlemek için kullanılan teknik, hataları geri arama parametreleri olarak (diğer ortamlarda olduğu gibi atmak yerine) arayana geri iletmektir. İşlenmeyen bazı istisnalar ortaya çıkmayı başarsa bile, Node.js sürecini izlemek ve kilitlenen bir örneğin gerekli kurtarma işlemini gerçekleştirmek için araçlar geliştirilmiştir (muhtemelen kullanıcı oturumunun mevcut durumunu kurtaramayacak olsanız da), en yaygın olanı Forever modülüdür veya harici sistem araçları upstart ve monit ile farklı bir yaklaşım kullanmak, hatta sadece upstart.

NPM: Düğüm Paket Yöneticisi

Node.js'yi tartışırken, kesinlikle atlanmaması gereken bir şey, her Node.js kurulumunda varsayılan olarak gelen bir araç olan NPM'yi kullanan paket yönetimi için yerleşik destektir. NPM modülleri fikri, Ruby Gems'in fikrine oldukça benzer: sürüm ve bağımlılık yönetimi ile çevrimiçi bir depo aracılığıyla kolay kurulum yoluyla erişilebilen, halka açık, yeniden kullanılabilir bir dizi bileşen.

Paketlenmiş modüllerin tam listesi npm web sitesinde bulunabilir veya Node.js ile otomatik olarak yüklenen npm CLI aracı kullanılarak erişilebilir. Modül ekosistemi herkese açıktır ve herkes npm deposunda listelenecek kendi modülünü yayınlayabilir.

Günümüzün en kullanışlı npm modüllerinden bazıları şunlardır:

  • express - Express.js—veya basitçe Express— Node.js için Sinatra'dan ilham alan bir web geliştirme çerçevesi ve bugün piyasada bulunan Node.js uygulamalarının çoğu için fiili standart.
  • hapi - web ve hizmet uygulamaları oluşturmak için çok modüler ve kullanımı basit yapılandırma merkezli bir çerçeve
  • connect - Connect, Node.js için genişletilebilir bir HTTP sunucusu çerçevesidir ve ara katman yazılımı olarak bilinen yüksek performanslı "eklentiler" koleksiyonu sağlar; Express için temel bir temel olarak hizmet eder.
  • socket.io ve sockjs - Günümüzde en yaygın iki websocket bileşeninin sunucu tarafı bileşeni.
  • pug (eski adıyla Jade ) - Express.js'de varsayılan olan HAML'den ilham alan popüler şablonlama motorlarından biri.
  • mongodb ve mongojs - Node.js'deki MongoDB nesne veritabanları için API sağlamak için MongoDB sarmalayıcıları.
  • redis - Redis istemci kitaplığı.
  • lodash (alt çizgi, lazy.js) - JavaScript yardımcı program kemeri. Oyunu Underscore başlattı, ancak esas olarak daha iyi performans ve modüler uygulama nedeniyle iki muadilinden biri tarafından devrildi.
  • sonsuza kadar - Belirli bir düğüm komut dosyasının sürekli çalışmasını sağlamak için muhtemelen en yaygın yardımcı program. Beklenmeyen hatalar karşısında Node.js sürecinizi üretimde tutar.
  • bluebird - Olağanüstü iyi performansa sahip tam özellikli bir Sözler/A+ uygulaması
  • moment - Tarihleri ​​ayrıştırmak, doğrulamak, işlemek ve biçimlendirmek için bir JavaScript tarih kitaplığı.

Liste devam ediyor. Dışarıda herkesin kullanabileceği tonlarca gerçekten faydalı paket var (burada atladıklarım için kusura bakmayın).

Node.js'nin Kullanılacağı Yerlere Örnekler

SOHBET ETMEK

Sohbet, en tipik gerçek zamanlı, çok kullanıcılı uygulamadır. IRC'den (eskiden), standart olmayan bağlantı noktalarında çalışan birçok özel ve açık protokol aracılığıyla, standart bağlantı noktası 80 üzerinden çalışan web yuvaları ile bugün her şeyi Node.js'de uygulama becerisine kadar.

Sohbet uygulaması gerçekten Node.js için en iyi örnektir: dağıtılmış cihazlarda çalışan hafif, yüksek trafikli, veri yoğun (ancak düşük işleme/hesaplama) bir uygulamadır. Ayrıca, basit olduğu için öğrenme için de harika bir kullanım örneğidir, ancak tipik bir Node.js uygulamasında şimdiye kadar kullanacağınız paradigmaların çoğunu kapsar.

Nasıl çalıştığını tasvir etmeye çalışalım.

En basit örnekte, web sitemizde insanların gelip bire çok (aslında hepsi) şekilde mesaj alışverişinde bulunabilecekleri tek bir sohbet odamız var. Örneğin, web sitesinde mesaj panomuza bağlı üç kişi olduğunu varsayalım.

Sunucu tarafında, iki şeyi uygulayan basit bir Express.js uygulamamız var:

  1. Yeni mesaj girişini başlatmak için hem mesaj panosu hem de 'Gönder' düğmesi içeren web sayfasına hizmet veren bir GET / istek işleyicisi ve
  2. Websocket istemcileri tarafından yayılan yeni mesajları dinleyen bir websockets sunucusu.

İstemci tarafında, biri giriş mesajını alan ve web yuvasına gönderen 'Gönder' düğmesi tıklama olayı için ve diğeri yeni gelen mesajları dinleyen birkaç işleyicinin ayarlandığı bir HTML sayfamız var. websockets istemcisinde (yani, sunucunun artık istemcinin görüntülemesini istediği diğer kullanıcılar tarafından gönderilen iletiler).

Müşterilerden biri bir mesaj gönderdiğinde şunlar olur:

  1. Tarayıcı bir JavaScript işleyicisi aracılığıyla 'Gönder' düğmesini yakalar, giriş alanındaki değeri alır (yani mesaj metni) ve sunucumuza bağlı websocket istemcisini kullanarak bir websocket mesajı yayar (web sayfası başlatıldığında başlatılır).
  2. Websocket bağlantısının sunucu tarafı bileşeni mesajı alır ve bunu yayın yöntemini kullanarak diğer tüm bağlı istemcilere iletir.
  3. Tüm istemciler, yeni mesajı, web sayfasında çalışan bir websockets istemci tarafı bileşeni aracılığıyla bir push mesajı olarak alır. Daha sonra mesaj içeriğini alırlar ve yeni mesajı panoya ekleyerek web sayfasını yerinde güncellerler.

Node.js uygulamasında istemci ve sunucu web yuvalarının şeması

Bu en basit örnek. Daha sağlam bir çözüm için Redis mağazasına dayalı basit bir önbellek kullanabilirsiniz. Veya daha da gelişmiş bir çözümde, mesajların istemcilere yönlendirilmesini işlemek için bir mesaj kuyruğu ve geçici bağlantı kayıplarını veya çevrimdışı olduklarında kayıtlı istemciler için mesajları depolamayı kapsayabilecek daha sağlam bir dağıtım mekanizması. Ancak yaptığınız iyileştirmelerden bağımsız olarak, Node.js aynı temel ilkeler altında çalışmaya devam edecektir: olaylara tepki verme, birçok eşzamanlı bağlantıyı yönetme ve kullanıcı deneyiminde akışkanlığı koruma.

BİR NESNE DB ÜZERİNDEKİ API

Node.js, gerçek zamanlı uygulamalarda gerçekten öne çıksa da, nesne DB'lerinden (örn. MongoDB) gelen verileri açığa çıkarmak için oldukça doğal bir seçimdir. JSON'da depolanan veriler, Node.js'nin empedans uyuşmazlığı ve veri dönüşümü olmadan çalışmasına izin verir.

Örneğin, Rails kullanıyorsanız, JSON'dan ikili modellere dönüştürür, ardından veriler Backbone.js, Angular.js vb. tarafından veya hatta düz jQuery AJAX tarafından tüketildiğinde bunları HTTP üzerinden JSON olarak gösterirsiniz. aramalar. Node.js ile, istemcinin kullanması için JSON nesnelerinizi bir REST API ile kolayca kullanıma sunabilirsiniz. Ek olarak, veritabanınızdan okurken veya yazarken (MongoDB kullanıyorsanız) JSON ile başka herhangi bir şey arasında dönüştürme konusunda endişelenmenize gerek yoktur. Özetle, istemci, sunucu ve veritabanı genelinde tek tip bir veri serileştirme formatı kullanarak birden çok dönüştürme ihtiyacını ortadan kaldırabilirsiniz.

KUYRUK GİRİŞLERİ

Yüksek miktarda eşzamanlı veri alıyorsanız, veritabanınız bir darboğaz haline gelebilir. Yukarıda gösterildiği gibi, Node.js eşzamanlı bağlantıları kendileri kolayca halledebilir. Ancak veritabanı erişimi engelleme işlemi olduğu için (bu durumda) sorun yaşarız. Çözüm, veriler gerçekten veritabanına yazılmadan önce müşterinin davranışını onaylamaktır.

Bu yaklaşımla sistem, yoğun bir yük altında yanıt verme özelliğini korur; bu, özellikle müşterinin başarılı bir veri yazma işleminin kesin onayına ihtiyaç duymadığı durumlarda kullanışlıdır. Tipik örnekler şunları içerir: gruplar halinde işlenen ve daha sonraki bir zamana kadar kullanılmayan kullanıcı izleme verilerinin günlüğe kaydedilmesi veya yazılması; ve nihai tutarlılığın (NoSQL dünyasında çok sık kullanılır) kabul edilebilir olduğu, anında yansıtılması gerekmeyen (Facebook'ta bir 'Beğeni' sayısını güncellemek gibi) işlemlerin yanı sıra.

Veriler, RabbitMQ veya ZeroMQ gibi bir tür önbelleğe alma veya mesaj kuyruğa alma altyapısı aracılığıyla kuyruğa alınır ve bu tür görevler için daha iyi performans gösteren bir platformda yazılan ayrı bir veritabanı toplu yazma işlemi veya hesaplama yoğun işleme arka uç hizmetleri tarafından sindirilir. Benzer davranış, diğer diller/çerçevelerle uygulanabilir, ancak aynı yüksek, korunan aktarım hızıyla aynı donanımda uygulanamaz.

Node.js'de mesaj kuyruğa sahip bir veritabanı toplu yazma şeması

Kısacası: Düğüm ile, veritabanı yazma işlemlerini bir kenara itebilir ve daha sonra, başarılı olmuş gibi ilerleyerek bunlarla ilgilenebilirsiniz.

VERİ AKIŞI

Daha geleneksel web platformlarında, HTTP istekleri ve yanıtları yalıtılmış olay olarak ele alınır; aslında, onlar aslında akışlardır. Bu gözlem, bazı harika özellikler oluşturmak için Node.js'de kullanılabilir. Örneğin, veriler bir akış yoluyla geldiğinden ve bunları çevrimiçi bir şekilde işleyebildiğimizden, dosyaları yüklenmeye devam ederken işlemek mümkündür. Bu, gerçek zamanlı ses veya video kodlaması ve farklı veri kaynakları arasında proxy oluşturma için yapılabilir (bir sonraki bölüme bakın).

vekil

Node.js, büyük miktarda eşzamanlı bağlantıyı engellemeden işleyebildiği bir sunucu tarafı proxy olarak kolayca kullanılabilir. Farklı yanıt sürelerine sahip farklı hizmetleri proxy yapmak veya birden çok kaynak noktasından veri toplamak için özellikle yararlıdır.

Bir örnek: üçüncü taraf kaynaklarla iletişim kuran, farklı kaynaklardan veri çeken veya görüntüler ve videolar gibi varlıkları üçüncü taraf bulut hizmetlerine depolayan bir sunucu tarafı uygulamasını düşünün.

Adanmış proxy sunucuları olsa da, proxy altyapınız yoksa veya yerel geliştirme için bir çözüme ihtiyacınız varsa, bunun yerine Node'u kullanmak yardımcı olabilir. Bununla demek istediğim, varlıklar ve proxy oluşturma/saplama API istekleri için Node.js geliştirme sunucusuna sahip bir istemci tarafı uygulaması oluşturabilirsiniz, üretimde ise bu tür etkileşimleri özel bir proxy hizmetiyle (nginx, HAProxy, vb.) .).

ARACILIK - HİSSE SENET TASARIMI

Uygulama düzeyine geri dönelim. Masaüstü yazılımının baskın olduğu, ancak gerçek zamanlı bir web çözümüyle kolayca değiştirilebileceği başka bir örnek, hisse senedi fiyatlarını izlemek, hesaplamalar/teknik analizler yapmak ve grafikler/tablolar oluşturmak için kullanılan broker ticaret yazılımıdır.

Gerçek zamanlı web tabanlı bir çözüme geçiş, komisyoncuların iş istasyonlarını veya çalışma yerlerini kolayca değiştirmesine olanak tanır. Yakında onları Florida'da veya İbiza'da veya Bali'de sahilde görmeye başlayabiliriz.

UYGULAMA İZLEME PANOSU

Web yuvalı düğümlerin mükemmel bir şekilde uyduğu başka bir yaygın kullanım durumu: web sitesi ziyaretçilerini izlemek ve etkileşimlerini gerçek zamanlı olarak görselleştirmek.

Kullanıcınızdan gerçek zamanlı istatistikler toplayabilir, hatta ziyaretçileriniz huninizde belirli bir noktaya geldiklerinde bir iletişim kanalı açarak hedefli etkileşimler sunarak onu bir sonraki seviyeye taşıyabilirsiniz. (İlgileniyorsanız, bu fikir zaten CANDDi tarafından üretiliyor.)

Ziyaretçilerinizin gerçek zamanlı olarak ne yaptığını bilseydiniz, etkileşimlerini görselleştirebilseydiniz, işinizi nasıl geliştirebileceğinizi hayal edin. Node.js'nin gerçek zamanlı, iki yönlü soketleriyle artık bunu yapabilirsiniz.

SİSTEM İZLEME PANOSU

Şimdi işin altyapı kısmına gelelim. Örneğin, kullanıcılarına GitHub'ın durum sayfası gibi bir hizmet izleme sayfası sunmak isteyen bir SaaS sağlayıcısı düşünün. Node.js olay döngüsüyle, hizmetlerin durumlarını eşzamansız bir şekilde kontrol eden ve web yuvalarını kullanarak istemcilere veri gönderen güçlü bir web tabanlı gösterge panosu oluşturabiliriz.

Bu teknoloji kullanılarak hem iç (şirket içi) hem de kamu hizmetlerinin durumları canlı ve gerçek zamanlı olarak raporlanabilir. Bu fikri biraz daha ileri götürün ve bir telekomünikasyon operatöründe, bulut/ağ/barındırma sağlayıcısında veya bazı finans kurumlarında, tümü Node.js ve websockets tarafından desteklenen açık web yığınında çalışan bir Ağ İşlemleri Merkezi (NOC) izleme uygulamalarını hayal etmeye çalışın. Java ve/veya Java Uygulamaları yerine.

Not: Node'da gerçek zamanlı katı sistemler oluşturmaya çalışmayın (yani, tutarlı yanıt süreleri gerektiren sistemler). Erlang, bu uygulama sınıfı için muhtemelen daha iyi bir seçimdir.

Node.js Nerede Kullanılabilir?

SUNUCU TARAFLI WEB UYGULAMALARI

Express.js ile Node.js, sunucu tarafında klasik web uygulamaları oluşturmak için de kullanılabilir. Ancak, mümkün olsa da, Node.js'nin işlenmiş HTML'yi taşıyacağı bu istek-yanıt paradigması, en tipik kullanım durumu değildir. Bu yaklaşımın lehinde ve aleyhinde ileri sürülecek argümanlar var. İşte dikkate alınması gereken bazı gerçekler:

Artıları:

  • Uygulamanızın CPU yoğun hesaplaması yoksa, MongoDB gibi JSON depolama Object DB kullanıyorsanız, bunu Javascript yukarıdan aşağıya, hatta veritabanı düzeyine kadar oluşturabilirsiniz. Bu, geliştirmeyi (işe alma dahil) önemli ölçüde kolaylaştırır.
  • Tarayıcılar, örneğin bir Tek Sayfa Uygulamasından veya Node.js üzerinde çalışan bir websockets uygulamasından çok daha fazla SEO dostu olan, tam olarak oluşturulmuş bir HTML yanıtı alır.

Eksileri:

  • Herhangi bir CPU yoğun hesaplama, Node.js'nin yanıt vermesini engelleyecektir, bu nedenle iş parçacıklı bir platform daha iyi bir yaklaşımdır. Alternatif olarak, [*] hesaplamasını ölçeklendirmeyi deneyebilirsiniz.
  • Node.js'yi ilişkisel bir veritabanıyla kullanmak hala oldukça acı vericidir (daha fazla ayrıntı için aşağıya bakın). Kendinize bir iyilik yapın ve ilişkisel işlemler gerçekleştirmeye çalışıyorsanız Rails, Django veya ASP.Net MVC gibi diğer ortamları seçin.
[*] Bu CPU yoğun hesaplamalara bir alternatif, istemci isteklerini eşzamansız olarak işlemek için Node'u öne bakan bir 'katip' olarak tutmak için arka uç işleme ile yüksek düzeyde ölçeklenebilir MQ destekli bir ortam oluşturmaktır.

Node.js'nin Kullanılmaması Gereken Yerlerde

SUNUCU YÖNÜ WEB UYGULAMASI W/ A İLİŞKİSEL DB ARKASINDAN

Örneğin, Node.js'yi Express.js ile Ruby on Rails'e kıyasla, PostgreSQL, MySQL ve Microsoft SQL Server gibi ilişkisel veritabanlarına erişim söz konusu olduğunda, ikincisi lehine net bir karar vardı.

Node.js için ilişkisel DB araçları henüz ilk aşamalarındaydı. Öte yandan, Rails, DB şema geçişleri destek araçları ve diğer Mücevherler (punto amaçlı) ile birlikte kutudan çıkar çıkmaz otomatik olarak veri erişim kurulumunu sağlar. Rails ve eş çerçeveleri, olgun ve kanıtlanmış Active Record veya Data Mapper veri erişim katmanı uygulamalarına sahiptir.[*]

Ama işler değişti. Sequelize, TypeORM ve Bookshelf, olgun ORM çözümleri olma yolunda uzun bir yol kat etti. GraphQL sorgularından SQL oluşturmak istiyorsanız Join Monster'a da göz atmaya değer olabilir.

[*] Rails arka ucunu ve ilişkisel bir DB'ye kolay erişimini korurken, Node'u yalnızca bir ön uç olarak kullanmak mümkündür ve nadir değildir.
İlgili: Arka Uç: Statik Site Güncellemeleri için Gatsby.js ve Node.js'yi Kullanma

AĞIR SUNUCU TARAFINDAN HESAPLAMA/İŞLEME

Ağır hesaplama söz konusu olduğunda, Node.js en iyi platform değildir. Hayır, kesinlikle Node.js'de bir Fibonacci hesaplama sunucusu oluşturmak istemezsiniz. Genel olarak, herhangi bir CPU yoğun işlem, olay güdümlü, engellemeyen G/Ç modeliyle Node'un sunduğu tüm verim avantajlarını iptal eder, çünkü iş parçacığı sizin sayı kırma işleminizle meşgulken gelen tüm istekler engellenecektir - deniyor olduğunuzu varsayarsak hesaplamalarınızı, isteklere yanıt verdiğiniz aynı Düğüm örneğinde çalıştırmak için.

Daha önce belirtildiği gibi, Node.js tek iş parçacıklıdır ve yalnızca tek bir CPU çekirdeği kullanır. Çok çekirdekli bir sunucuya eşzamanlılık eklemek söz konusu olduğunda, Düğüm çekirdek ekibi tarafından bir küme modülü biçiminde [ref: http://nodejs.org/api/cluster.html] yapılan bazı işler vardır. Ayrıca birkaç Node.js sunucu örneğini nginx aracılığıyla bir ters proxy arkasında oldukça kolay bir şekilde çalıştırabilirsiniz.

Kümeleme ile, tüm ağır hesaplamaları bunun için daha uygun bir ortamda yazılmış arka plan işlemlerine boşaltmalı ve RabbitMQ gibi bir mesaj kuyruğu sunucusu aracılığıyla iletişim kurmalarını sağlamalısınız.

Arka planda işlemeniz başlangıçta aynı sunucuda çalıştırılsa bile, böyle bir yaklaşım çok yüksek ölçeklenebilirlik potansiyeline sahiptir. Bu arka plan işleme hizmetleri, öne bakan web sunucularının yüklerini yapılandırmaya gerek kalmadan ayrı çalışan sunuculara kolayca dağıtılabilir.

Elbette, aynı yaklaşımı diğer platformlarda da kullanırsınız, ancak Node.js ile, her istek çok hızlı ve verimli bir şekilde ele alınan küçük bir görev olduğundan, bahsettiğimiz yüksek istek/sn aktarım hızını elde edersiniz.

Çözüm

Node.js'yi teoriden pratiğe kadar, hedefleri ve tutkularıyla başlayıp tatlı noktaları ve tuzaklarıyla biten tartıştık. İnsanlar Düğümle ilgili sorunlarla karşılaştığında, neredeyse her zaman, engelleme işlemlerinin tüm kötülüklerin kökü olduğu gerçeğine indirgenir - Düğüm kötüye kullanımlarının %99'u doğrudan bir sonuç olarak ortaya çıkar.

Düğüm'de, engelleme işlemleri tüm kötülüklerin köküdür; Düğüm kötüye kullanımlarının %99'u doğrudan bir sonuç olarak ortaya çıkar.
Cıvıldamak

Unutmayın: Node.js hiçbir zaman işlem ölçeklendirme sorununu çözmek için oluşturulmamıştır. Gerçekten iyi yaptığı G/Ç ölçekleme sorununu çözmek için oluşturuldu.

Node.js neden kullanılır? Kullanım durumunuz CPU yoğun işlemler içermiyorsa veya herhangi bir engelleme kaynağına erişmiyorsa, Node.js'nin avantajlarından yararlanabilir ve hızlı ve ölçeklenebilir ağ uygulamalarının keyfini çıkarabilirsiniz. Gerçek zamanlı web'e hoş geldiniz.