0 0
Read Time:14 Minute, 10 Second

Giriş

JavaScript’in artan popülaritesi beraberinde birçok değişiklik getirdi ve bugün web geliştirmenin çehresi önemli ölçüde farklı. JavaScript’in sunucuda ve tarayıcıda çalıştığı günümüzde web’de yapabileceğimiz şeyler, birkaç yıl önce hayal etmek zordu veya Flash veya Java Applet’ler gibi korumalı ortamlarda kapsüllenmişti.

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 faydalarını okumak isteyebilirsiniz . Bu, özellikle Node.js’den daha çok JavaScript’in bir avantajı olduğu için, burada fazla tartışmayacağız. Ancak, Node’u yığınınıza dahil etmenin önemli bir avantajı.

Wikipedia’nın belirttiği gibi: “Node.js, Google’ın V8 JavaScript motoru, libuv platformu soyutlama katmanı ve kendisi de esas olarak JavaScript’te yazılmış olan 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 belirtmek gerekir . Node.js’de, geliştiricilere engellemesiz, olaya dayalı G / Ç paradigmasında çalışmak için bir araç verdi.

Vatansız 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ımız var.

Tek bir cümleyle: Node.js, web yuvaları üzerinden itme teknolojisi kullanan gerçek zamanlı web uygulamalarında parlıyor. 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, nihayet hem istemcinin hem de sunucunun iletişimi başlatarak serbestçe veri alışverişi yapmalarına olanak tanıyan gerçek zamanlı, iki yönlü bağlantılara sahip web uygulamalarımız var . Bu, istemcinin her zaman iletişimi başlattığı tipik web yanıtı paradigmasının tam tersidir. Ek olarak, hepsi standart bağlantı noktası 80 üzerinden çalışan açık web yığınına (HTML, CSS ve JS) dayanır.

Buna yıllardır Flash ve Java Uygulamaları biçiminde sahip olduğumuz iddia edilebilir – ancak gerçekte bunlar, web’i istemciye teslim edilecek bir aktarım protokolü olarak kullanan korumalı ortamlardı. Ayrıca, izolasyonda çalıştırıldılar ve genellikle standart olmayan bağlantı noktaları üzerinden çalıştırıldılar, bu da ekstra izinler ve benzeri gerektirebilir.

Tüm avantajlarıyla Node.js artık benzersiz avantajlarına bağlı olan birçok yüksek profilli şirketin teknoloji yığınında kritik bir rol oynuyor. Node.js Vakfı, işletmelerin neden Node.js’yi dikkate almaları gerektiğine dair en iyi düşünceleri, Node.js Vakfı’nın Örnek Olayları sayfasında bulunan kısa bir sunumda birleştirdi .

Bu Node.js kılavuzunda, yalnızca bu avantajların nasıl başarıldığını değil, aynı zamanda neden Node.js kullanmak isteyebileceğinizi ve neden olmasın, bazı klasik web uygulama modellerini örnek olarak kullanarak tartışacağım .

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 engellemesiz, olay odaklı G / Ç kullanın.

Bu bir ağız dolusu.

Ya gerçekten anlamı node.js olmasıdır değil web geliştirme dünyaya hakim olacak bir gümüş kurşun yeni platform. Bunun yerine, belirli bir ihtiyacı karşılayan bir platformdur.

Ne gerçekten anlamı node.js olmasıdır değil web geliştirme dünyaya hakim olacak bir gümüş kurşun yeni platform. 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ı geçersiz kılacaktır. Node’un gerçekten parladığı yer hızlı, ölçeklenebilir ağ uygulamaları oluşturmaktır, çünkü yüksek ölçeklenebilirlik anlamına gelen yüksek verimle çok sayıda eşzamanlı bağlantıyı yönetebilmektedir.

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 aldığı ve sonunda mevcut RAM miktarında maksimuma çıktığı geleneksel web hizmeti teknikleriyle karşılaştırıldığında, Node.js, engellemesiz G / Ç 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 beraberinde 2 MB bellek olduğunu varsayarsak, 8 GB RAM içeren bir sistemde çalıştırmak, teorik olarak maksimum 4.000 eşzamanlı bağlantıya ulaşmamızı sağlar (Michael Abernethy’nin “Just what is Node .js? ”, IBM developerWorks’te 2011’de yayınlandı; maalesef makale artık mevcut değil) ve iş parçacıkları arasında bağlam değiştirme maliyeti . Geleneksel web sunma tekniklerinde tipik olarak uğraştığınız senaryo budur. Tüm bunlardan kaçınarak, Node.js, 1 milyonun üzerinde eşzamanlı bağlantı ve 600.000’den fazla 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ığı paylaşma sorusu vardır ve bu, Node.js uygulamalarını yazmanın potansiyel bir tuzağıdır. İlk olarak, yoğun hesaplama, Node’un tek iş parçacığını boğabilir ve tüm istemciler için sorunlara neden olabilir (bu konuda daha fazlası), çünkü gelen istekler söz konusu hesaplama tamamlanana kadar engellenecektir. İkinci olarak, geliştiricilerin, Node.js örneğinin sonlanmasına (programı etkin bir şekilde çökmesine) neden olacak çekirdek (en üstteki) Node.js olay döngüsüne kadar bir istisna köpürmesine izin vermemeye gerçekten dikkat etmeleri gerekir.

İstisnaların yüzeye çıkmasını önlemek için kullanılan teknik, hataları geri çağırma parametreleri olarak arayana geri iletmektir (diğer ortamlarda olduğu gibi atmak yerine). Bazı işlenmemiş istisnalar ortaya çıkmayı başarsa bile, Node.js sürecini izlemek ve çökmüş bir örneğin gerekli kurtarmasını gerçekleştirmek için araçlar geliştirilmiştir (muhtemelen kullanıcı oturumunun mevcut durumunu kurtaramayacaksınız), en yaygın olarak Sonsuza modül veya harici sistem araçları ile farklı bir yaklaşım kullanarak sonradan görme ve monit , hatta sadece sonradan görme .

NPM: Node Package Manager

Node.js tartışılırken, kesinlikle ihmal edilmemesi gereken bir şey, her Node.js kurulumunda varsayılan olarak gelen bir araç olan NPM kullanarak paket yönetimi için yerleşik destektir . NPM modülleri fikri Ruby Gems’inkine oldukça benzer : sürüm ve bağımlılık yönetimi ile çevrimiçi bir havuz aracılığıyla kolay kurulum yoluyla erişilebilen, herkese açık, yeniden kullanılabilir bileşenler kümesi.

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 havuzunda listelenecek kendi modülünü yayınlayabilir.

Bugün en kullanışlı npm modüllerinden bazıları şunlardır:

  • express – Express.js – veya kısaca Express – Node.js için Sinatra’dan esinlenen 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 servis uygulamaları oluşturmak için çok modüler ve kullanımı basit bir konfigürasyon merkezli çerçeve
  • connect – Connect, ara yazılım olarak bilinen yüksek performanslı “eklentiler” koleksiyonu sağlayan, Node.js için genişletilebilir bir HTTP sunucu çerçevesidir; Express için temel bir temel görevi görür.
  • socket.io ve sockjs – Bugün piyasada bulunan en yaygın iki websockets bileşeninin sunucu tarafı bileşeni.
  • pug (eski adıyla Jade ) – Express.js’de varsayılan olan HAML’den esinlenen popüler şablon oluşturma motorlarından biri.
  • Mongodb ve mongojs – Node.js’deki MongoDB nesne veritabanları için API sağlamak üzere MongoDB sarmalayıcıları.
  • redis – Redis istemci kitaplığı.
  • lodash (alt çizgi, lazy.js) – JavaScript yardımcı kayışı. Underscore oyunu başlattı, ancak esas olarak daha iyi performans ve modüler uygulama nedeniyle iki muadilinden biri tarafından devrildi .
  • sonsuza kadar – Muhtemelen, belirli bir düğüm komut dosyasının sürekli olarak çalışmasını sağlamak için en yaygın yardımcı programdır. Beklenmedik arızalar karşısında Node.js işleminizin üretimde devam etmesini sağlar.
  • bluebird – Olağanüstü iyi performansa sahip tam özellikli bir Promises / A + uygulaması
  • moment – Tarihleri ​​ayrıştırmak, doğrulamak, değiştirmek ve biçimlendirmek için bir JavaScript tarih kitaplığı.

Liste devam ediyor. Herkese açık, gerçekten faydalı tonlarca paket var (burada atladığımlara aldırış etmeyin).

Node.js Nerelerde Kullanılmalı?

Sohbet, en tipik gerçek zamanlı, çok kullanıcılı uygulamadır. IRC’den (gün içinde), 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ıyla bugün her şeyi Node.js’de uygulama yeteneğine kadar.

Sohbet uygulaması, Node.js için gerçekten tatlı nokta örneğidir: dağıtılmış cihazlarda çalışan hafif, yüksek trafikli, veri yoğun (ancak düşük işlem / hesaplama) bir uygulamadır. Aynı zamanda, basit olduğu için öğrenmek için de harika bir kullanım durumu, ancak tipik bir Node.js uygulamasında 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 bulunabileceği tek bir sohbet odamız var. Örneğin, web sitesinde hepsi mesaj panomuza bağlı üç kişi olduğunu varsayalım.

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

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

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

Müşterilerden biri bir mesaj gönderdiğinde, şu şekilde olur:

  1. Tarayıcı, bir JavaScript işleyicisi aracılığıyla ‘Gönder’ düğmesini tıklar, giriş alanından değeri alır (yani, mesaj metni) ve sunucumuza bağlı websocket istemcisini kullanarak bir websocket mesajı gönderir (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 yayın yöntemini kullanarak diğer tüm bağlı istemcilere iletir.
  3. Tüm istemciler, yeni mesajı web sayfası içinde çalışan bir websockets istemci tarafı bileşeni aracılığıyla bir itme mesajı olarak alır. Daha sonra mesaj içeriğini alırlar ve yeni mesajı panoya ekleyerek web sayfasını yerinde güncellerler.

 

Bir Node.js uygulamasındaki 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 gelişmiş bir çözümde, mesajların istemcilere yönlendirilmesini işleyen bir mesaj kuyruğu ve geçici bağlantı kayıplarını veya çevrimdışıyken kayıtlı istemciler için mesajları depolamayı kapsayabilen daha sağlam bir teslim mekanizması. Ancak yaptığınız iyileştirmelerden bağımsız olarak, Node.js yine de aynı temel ilkeler altında çalışacaktır: olaylara tepki verme, birçok eşzamanlı bağlantıyı yönetme ve kullanıcı deneyimindeki akışkanlığı koruma.

BİR NESNE DB ÜZERİNDEKİ API

Node.js gerçek zamanlı uygulamalarla gerçekten parlasa da, nesne DB’lerinden (örneğin MongoDB) gelen verileri açığa çıkarmak için oldukça doğal bir seçimdir. JSON tarafından depolanan veriler, Node.js’nin empedans uyuşmazlığı ve veri dönüştürme olmadan çalışmasına izin verir.

Örneğin, Rails kullanıyorsanız, JSON’dan ikili modellere dönüştürme yaparsınız, ardından veriler Backbone.js, Angular.js, vb. Tarafından tüketildiğinde bunları HTTP üzerinden JSON olarak veya hatta düz jQuery AJAX olarak açığa çıkarırsınız. aramalar. Node.js ile, JSON nesnelerinizi istemcinin kullanması için bir REST API ile açığa çıkarabilirsiniz. Ek olarak, veritabanınızdan okurken veya yazarken (MongoDB kullanıyorsanız) JSON ile diğer şeyler 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.

KUYRUKLU 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ı kendi başlarına kolayca halledebilir. Ancak veritabanı erişimi bir engelleme işlemi olduğu için (bu durumda) sorun yaşıyoruz. Çözüm, veriler gerçekten veritabanına yazılmadan önce müşterinin davranışını onaylamaktır.

Bu yaklaşımla, sistem yanıt verebilirliğini ağır bir yük altında sürdürür; bu, özellikle müşterinin başarılı bir veri yazımı için kesin bir onaylamaya ihtiyacı olmadığında yararlıdır. Tipik örnekler şunları içerir: toplu olarak 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ılan) kabul edilebilir olduğu durumlarda anında yansıtılması gerekmeyen işlemler (Facebook’ta bir ‘Beğenme’ sayısını güncelleme gibi ).

Veriler, RabbitMQ veya ZeroMQ gibi bir tür önbelleğe alma veya ileti kuyruğu oluşturma altyapısı aracılığıyla sıraya 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 yoğun hesaplama gerektiren arka uç hizmetleri tarafından sindirilir. Benzer davranış, diğer diller / çerçevelerle uygulanabilir, ancak aynı donanımda, aynı yüksek, sürdürülen verimle uygulanabilir.

 

Mesaj kuyruğuna sahip Node.js'de bir veritabanı toplu yazma diyagramı

 

Kısaca: Node ile veritabanı yazmalarını yana itebilir ve onlarla daha sonra başa çıkarak sanki başarılı olmuşlar gibi devam edebilirsiniz.

VERİ AKIŞI

Daha geleneksel web platformlarında, HTTP istekleri ve yanıtları ayrı bir olay gibi 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ı henüz yüklenirken işlemek mümkündür. Bu, gerçek zamanlı ses veya video kodlama ve farklı veri kaynakları arasında proxy oluşturma için yapılabilir (sonraki bölüme bakın).

PROXY

Node.js, büyük miktarda eşzamanlı bağlantıyı engellemeden bir şekilde idare edebildiği bir sunucu tarafı proxy olarak kolayca kullanılır. Farklı yanıt sürelerine sahip farklı hizmetlere proxy uygulamak veya birden çok kaynak noktasından veri toplamak için özellikle kullanışlı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ı mevcut olsa da, proxy altyapınız yoksa veya yerel geliştirme için bir çözüme ihtiyacınız varsa, bunun yerine Düğüm kullanmak yararlı olabilir. Bununla, varlıklar ve proxy oluşturma / saplama API istekleri için bir Node.js geliştirme sunucusuyla bir istemci tarafı uygulaması oluşturabileceğinizi ve üretim sırasında bu tür etkileşimleri özel bir proxy hizmetiyle (nginx, HAProxy, vb. .).

ARACILIK

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

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

UYGULAMA İZLEME KONTROL PANELİ

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

Kullanıcınızdan gerçek zamanlı istatistikler toplayabilir, hatta dönüşüm huninizdeki belirli bir noktaya ulaştıklarında bir iletişim kanalı açarak ziyaretçilerinizle hedefli etkileşimler sunarak bunu bir sonraki seviyeye taşıyabilirsiniz. (İlgileniyorsanız, bu fikir CANDDi tarafından zaten üretilmektedir .)

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

SİSTEM İZLEME KONTROL PANELİ

Şimdi işlerin altyapı tarafına bakalım. Örneğin, kullanıcılarına GitHub’ın durum sayfası gibi bir hizmet izleme sayfası sunmak isteyen bir SaaS sağlayıcısını hayal edin. Node.js olay döngüsü ile, hizmetlerin durumlarını eşzamansız bir şekilde kontrol eden ve verileri web yuvalarını kullanarak istemcilere aktaran güçlü bir web tabanlı gösterge tablosu oluşturabiliriz .

Hem dahili (şirket içi) hem de kamu hizmetlerinin durumları bu teknoloji kullanılarak canlı ve gerçek zamanlı olarak rapor edilebilir. 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 uygulamaları izleyen bir Ağ Operasyon Merkezi (NOC) hayal etmeye çalışın ; bunların tümü Node.js ve websockets tarafından desteklenen açık web yığını üzerinde çalışır. Java ve / veya Java Uygulamaları yerine.

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

Node.js Nerelerde Kullanılabilir?

SUNUCU TARAFINDAN 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 yapılacak tartışmalar var. İşte dikkate alınması gereken bazı gerçekler:

Artıları:

  • Uygulamanızda CPU yoğun hesaplama yoksa, MongoDB gibi JSON depolama Nesne DB’si kullanıyorsanız, onu Javascript’te yukarıdan aşağıya, hatta veritabanı düzeyinde bile oluşturabilirsiniz. Bu, gelişimi (işe alma dahil) önemli ölçüde kolaylaştırır.
  • Tarayıcılar, bir Tek Sayfa Uygulamasından veya Node.js üzerinde çalıştırılan bir web soket 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 yanıt vermesini engeller, bu nedenle iş parçacıklı bir platform daha iyi bir yaklaşımdır. Alternatif olarak, [*] hesaplamasını genişletmeyi deneyebilirsiniz.
  • Node.js’yi ilişkisel bir veritabanıyla kullanmak hala oldukça zahmetlidir (daha fazla ayrıntı için aşağıya bakın). İlişkisel işlemler yapmaya çalışıyorsanız, kendinize bir iyilik yapın ve Rails, Django veya ASP.Net MVC gibi diğer ortamları seçin.
[*] Bu CPU yoğun hesaplamaların bir alternatifi, Node’u istemci isteklerini eşzamansız olarak işlemek için önden bakan bir ‘tezgahtar’ olarak tutmak için arka uç işleme ile yüksek oranda ölçeklenebilir MQ destekli bir ortam oluşturmaktır.

Node.js Kullanılmaması Gereken Yerler

SUNUCU TARAFINDAKİ WEB UYGULAMASI ARKASINDA İLİŞKİLİ DB İLE

Örneğin, Node.js ile Express.js’yi Ruby on Rails ile karşılaştırmak, 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 İlişkisel DB araçları hâlâ ilk aşamalarındaydı. Öte yandan, Rails, DB şema geçişlerini destekleyen araçlar ve diğer Taşlar (amaçlanan) ile birlikte otomatik olarak veri erişim kurulumunu otomatik olarak sağlar. Rails ve eş çerçeveleri olgun ve kanıtlanmış Active Record veya Data Mapper veri erişim katmanı uygulamalarına sahiptir. [*]

Ancak 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 .

AĞIR SUNUCU TARAFLI BİLGİSAYAR / İŞLEME

Yoğun hesaplama söz konusu olduğunda, Node.js piyasadaki 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, Node’un olay odaklı, engellemeyen G / Ç modeliyle sunduğu tüm aktarım hızı avantajlarını geçersiz kılar, çünkü iş parçacığı sizin numara yoğunlaşmanızla meşgulken gelen tüm istekler engellenecektir – denediğiniz varsayılırsa hesaplamalarınızı isteklere yanıt verdiğiniz aynı Node ö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, Node çekirdek ekibi tarafından bir küme modülü [ref: http://nodejs.org/api/cluster.html] biçiminde bazı işler yapılmaktadır. Ayrıca , nginx aracılığıyla bir ters proxy arkasında birkaç Node.js sunucu örneğini 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 aktarmalı ve bunların RabbitMQ gibi bir mesaj kuyruğu sunucusu aracılığıyla iletişim kurmasını sağlamalısınız.

Arka planda işlemeniz başlangıçta aynı sunucuda çalıştırılsa bile, bu tür 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, diğer platformlarda da aynı yaklaşımı 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 / saniye verimini elde edersiniz.

Sonuç

Node.js’yi teoriden pratiğe, hedefleri ve tutkularıyla başlayıp tatlı noktaları ve tuzaklarıyla biten tartıştık. İnsanlar Node ile sorun yaşadığında, neredeyse her zaman engelleme operasyonlarının tüm kötülüklerin kökü olduğu gerçeğine varır . Düğüm kötüye kullanımlarının% 99’u doğrudan bir sonuç olarak gelir.

Happy
Happy
0 %
Sad
Sad
0 %
Excited
Excited
0 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
0 %