Neden sunucu tarafında Javascript yazayım ki ? (node.js)

Her geçen gün internet kullanan kişilerin sayısı artıyor ve bu süreç klasik teknolojiler ve yaklaşımlarla yazılan uygulamaları ölçeklenebilirlik sorunu ile karşı karşıya bırakıyor.

Node.js ile ölçeklenebilirlik gayet basittir. Yani aynı anda binlerce kişinin eriştiği sistemlerin geliştirilmesi  için  node.js iyi bir tercih olabilir. Peki klasik teknolojilerle (Java, PHP, .NET vb ..) ile ölçeklenebilirlik sorununu çözülemez mi ?

Çözülür ama daha maliyetli olur, en basitinden eş zamanlılık (concurrency) problemlerinin üstesinden gelmeniz gereklidir. Ayrıca klasik teknolojilerde uygulamayı ölçeklenebilir bir şekilde yazmakta son derece dikkat isteyen (Thread kullanımı) bir konudur.

Node.js tek kelimeyle anlatmak yanlış olur ama çok özetlersek Javascript’ın sunucu tarafında çalışan hali diyebiliriz. Evet farkındayım ilk duyanlar için biraz anlamsız geliyor. O kadar  teknoloji varken neden Javascript dili ile sunucu tarafında uygulama geliştirilsin ki ? Cevabı basit ve hızlı ölçeklenebilirlik.  Kısacası Node.js bir fantezi proje olarak değil, gerçek bir problemi çözmek için ortaya çıkmıştır.

Node.js’ın alt yapısında Chrome tarayıcısının için tasarlanan yüksek performanslı V8 Javascript motorun kullanmaktadır. Yani Node.js tüm alt yapısını Chrome için yazılan V8 Javascipt motorunu üzerinde inşa etmiştir.

Mevcut teknolojiler ile (Java, .NET, PHP, Ruby ) aynı anda binlerce kişiye hizmet vermek I/O yapılarından dolayı kolay değildir. Bunun detayları diğer yazılarda ele almayı hedefliyorum.

Neden popüler ?

Popüler olmasında elbette ki Node.js’ın en başta ölçeklenebilirlik sorununa çok iyi çare bulmasının yanı sıra bence diğer bir faktörde Microsoft’un bu teknolojiyi hemen benimsemesidir. Microsoft’un açık kaynak kodlu bir projeye verdiği destek insanlarda burada birşeyler oluyor dur bakayım demelerine sebep olduğuna inanıyorum. En azından bana öyle oldu 🙂

Bu proje sadece Microsoft tarafında değil daha bir çok büyük ölçekli firma tarafından başarıya kullanılmaktadır. Türkiye’de ise 8digits node.js teknolojisini başarıya kullanan firmalar arasındadır. 8digits ile yaptığımız röportajı buradan erişebilirsiniz.

Node.js şu anda Windows, Mac ve Linux ortamlarına kurulum paketleri mevcut. Kurulum detayları için http://nodejs.org/ adresini ziyaret edebilirsiniz.

Avantajları nedir ?

Neden sunucu tarafında Javascipt yazayayım ki diyenler halen olabilir. O zaman olayları farklı bir şekilde anlatmayı deneyelim. Starbucks, McDonalds veya buna benzer yerlere gittiniz mi ? Tezgahın arkasında hizmet veren çalışanları dikkatli bir şekilde gözlemlerseniz hiç bloklanmadan çalıştıklarını görürsünüz.

Yani sıradaki kişiye ne sipariş vereceği sorulur ve sonra alınan bu siparişi arka tarafa aktarılır ve hemen sıradaki diğer müşteriyle ilgilenir; Cafe Latte hazırlanınca kahveyi müşteriye verir (callback). Bu noktada Cafe Latte’nin hazırlanması bloklayıcı bir işlemdir  ama bu bloklanma diğer müşterileri kabul etmeMEye neden olmaMAktadır. Bu akışta 1 çalışan birden çok kişiye bloklanmadan hızlı bir şekilde cevap verebilir.

 

Bu örneği yazılım dünyasına uyarlarsak; Cafe Latte’nin hazırlanmasını veritabanından veri çekmeye
benzetebiliriz; veritabanı işlemleri uygulama açısından bloklayıcı bir işlemlerdir. Eğer uygulamayı node.js ile yazarsanız, veritabanındaki bloklanma diğer kullanıcılara hizmet vermenizi etkilemeyecektir. Javascript ‘ın Callback yaklaşımı işte bu noktada çok iyi çözüm olmaktadır.

Node.js aynı starbucks çalışanı gibi bir hareket eder. Javascript’ın sunduğu ‘event driven‘ yapı sayesinde akışın bloklanma problemi ortadan kalkar. Buradaki en iyi nokta ise bu işlerin sadece BİR  iş parçacığı (thread)  ile gerçekleştirilmesidir.

Peki aksini düşünelim; starbucks ‘ın klasik teknolojilerde yazılan bir uygulama gibi işletildiğini hayal edin; Sıradaki müşteri Cafe Latte istiyor ve o müşterinin Cafe Latte’si hazırlanmadan başka hiç bir müşteri ile ilgilenilmiyor. Çok sıkıcı olurdu değil mi ?

Elbette Thread yapılarıyla klasik teknolojilerde bu sorunun üstesinden gelinebilir ama maliyetine katlanmak şartıyla. Ne kadar çok iş parçacığı (thread) o kadar risk ve yerine göre performans kaybı demektir. Node.js ‘ın tek bir iş parçacığı (thread) ile bloklanmadan çalışabilme imkanı sunması, onun getirdiği en büyük avantajlardan bir tanesidir.

Örnek

Node.js hafif ve etkin olmasının sebeplerinden bir tanesi aşağıdaki yaklaşımdır.

var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello Worldn');
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');

Node.js ‘ın şaşırtıcı diğer bir yanı daha. Tomcat yok, Glassfish yok, IIS yok, Apache yok. Yukarıdaki kod 127.0.0.1 üzerinden 8124 nolu portdan dinlemeye başlıyor. Javascript’ın callback yaklaşımı 2. satırda  örebilirsiniz.

Dezavantajları nedir ?

Node.js henüz çok genç bu yüzden klasik teknolojilerde ki gibi uygulama geliştirme rahatlığı node.js dünyasında henüz yok. Benim gördüğüm en iyi kod editörü yani IDE Intellij’nin WebStorm ürünü. WebStorm’da node.js ile entegrasyon, debug ve kod tamamlama özellikleri bana gayet kullanışlı geldi.

 

115 Comments
  • Cesur Kedi
    Posted at 12:24, 28/04/2015

    Yazı güzel. Ancak JS’de callback özelliği I/O gibi blocking işlemlerde çözüm olurken CPU ağılıklı blocking işlemlerde pek bir çözüm olmuyor. Mesela içine callback fonksiyon atılan bir fonksiyonda for i=0 to 1000000000 {}; eklediğinizde bu loop tamamlanmadan, sizin tabirinizle “latte” hazırlanmaya başlamıyor. Bunun için child process gibi bir çözüm düşünülmüş ama o zaman da işler gittikçe komplike hale geliyor. Node’un “basit ve hızlı” yaklaşımı sorgulanır oluyor. Bu ve buna benzer limitasyonlar sebebiyle node.js’in JXCORE adında hem multithreading hem de spidermonkey ile de çalışan versiyonunu geliştiren bir grup var. İşin ilginci bu işin başındaki kişi bir Türk.

    http://jxcore.com/home/

  • Posted at 13:08, 17/06/2016

    “O kadar teknoloji varken neden Javascript dili ile sunucu tarafında uygulama geliştirilsin ki?” sorusuna verdiğiniz cevaba ek olarak hem istemci hem de sunucu tarafında javascript yazmanın getireceği avantajlar söylenebilir. Eskiden basit html formlarının validationlarının yapıldığı ve statik sitelere hafif bir interaktivite getiren bir dil iken, jQuery, extjs, yui vs ile başlayan, angular, react gibi arkasında dev firmaların olduğu frameworklerle an parlak dönemini yaşayan javascriptin client tarafında da önemi son derece arttı. Gönderilen datanın formatı çoğunlukla json (javascript object notation) olduğunda hem önde hem de arkada js kullanmak çok daha avantajlı hale geliyor, çünkü data mapping veya conversion yapma ihtiyacı hemen hemen yok oluyor. DB’ye json olarak kaydet (mongodb), sunucu tarafında json olarak işle ve clienta gönder (nodejs), client tarafında da json datayı renderla (react, extjs vs.).

  • Posted at 21:32, 02/08/2016

    Güzel anlatmışsınız, teşekkürler.

  • Ümit
    Posted at 20:51, 27/08/2016

    Hocam php mysql ikilisi ile geliştirilen uygulamalı Web sayfalarını tamamıyla node.js mysql ikilisi geliştirmek mantıklı mı yoksa node.js destek olacak şekilde kullanmak mı mantıklı

  • Posted at 14:25, 15/09/2016

    ölçeklenebilirlik ne demektir?

  • Posted at 15:45, 16/08/2017

    Ön yargı ile yaklaşmayıp, birazda siz araştırsanız dünya çok daha güzel bir yer olabilir. 🙂

    Ölçeklenebilirlik: Bir sistemin, ağın veya sürecin artan iş yükünü yönetebilmek veya büyümeyi karşılamak için kaynakların esnetilerek/arttırılarak kullanılmasıdır. (https://en.wikipedia.org/wiki/Scalability)

  • Posted at 12:32, 12/09/2017

    Büyük ölçekli kurumsal projelerde Java veya . Net gibi alternatifler varken node.js kullanmak macera aramaya benziyor. Yüksek performans almak için donanım tarafını iyileştirmek ilk iş olmalıdır

  • Emin ahadi
    Posted at 19:44, 10/11/2017

    Öyle ve ya boyle JavaScript kesinlikle hızlı bir dil deyildir, aksine çok yavaş bir dil. Her ne kadar kolay gibi görülsede modulleri yuzunden karishik bir teknoloji. Gerchi opensource larin hepsi oglede ama geleceyin bir tercihi olurmu bilmem. MongoDB ve NodeJs guvenliyine olan bazi kushkulardan dolayi shuan ichin pek tercih edilmiyor sanirim.

  • Cihangir
    Posted at 21:26, 14/11/2017

    Oncelikle Node.js, mongoDB, ve Json beraber kullanmasi cok kolay. Hepsi birbirinin parcasi gibi dogal geliyor. Front-end ve back-end calisan bir ekibin anlasmasi ve ortak calismasi kolaylasiyor. Sonucda JavaScript ortak dil olmus oluyor. Bence bunlar Node.js arti yanlari. Ve tabiyki Real-time olarak tabir edilen canli uygulamalarda ki hizi. Ben eger surekli baglantida kalan bir ve kullaniciyi an ve anlik bilgilendiren bir uygulama olusturacak olsaydim kesisinlikle NODE.js kullanirdim. Bunun disindaki klasik bir site icin olmasada olur derim. Ben bir forum sitesi yaptim Node.js ile kolay bir ecosistemi var. Karmasik hic bir yani yok bence.

  • bayram
    Posted at 11:34, 14/03/2018

    Konuya giriş güzel, sorular yerinde. Elinize sağlık. Sanki Türkçe’nizin biraz düzene ihtiyacı var. Pek çok yerde ısrarlı dil hataları mevcut ve okumayı zorlaştırıyor. Kolaylıklar dilerim.

  • Posted at 19:20, 27/10/2018

    wh0cd127410 vardenafil

  • Posted at 23:36, 29/10/2018
  • Posted at 22:42, 03/11/2018
  • Posted at 11:31, 05/11/2018
  • Posted at 23:37, 13/11/2018

    buy cialis

    buy cialis

  • Posted at 17:45, 15/11/2018

    tadalafil generic

    tadalafil generic

  • Posted at 19:32, 15/11/2018

    sildenafil citrate

    sildenafil citrate

  • Posted at 21:08, 15/11/2018

    sildenafil 100mg coupon

    sildenafil 100mg coupon

  • Posted at 04:48, 04/12/2018

    buy viagra

    buy viagra

  • Posted at 16:43, 04/12/2018

    cialis

    cialis

  • Posted at 20:28, 04/12/2018

    viagra

    viagra

  • Posted at 01:22, 05/12/2018

    sildenafil 100mg

    sildenafil 100mg

  • Posted at 03:39, 05/12/2018

    cialis generic

    cialis generic

  • Posted at 09:35, 05/12/2018

    cialis coupon

    cialis coupon

  • Posted at 13:06, 05/12/2018

    cialis 20mg

    cialis 20mg

  • Posted at 14:20, 05/12/2018

    levitra

    levitra

  • Posted at 16:07, 05/12/2018

    generic cialis

    generic cialis

  • Posted at 17:10, 05/12/2018

    cialis online

    cialis online

  • Posted at 18:16, 05/12/2018

    tadalafil 5mg

    tadalafil 5mg

  • Posted at 20:40, 05/12/2018

    tadalafil 20mg

    tadalafil 20mg

  • Archiemeact
    Posted at 21:27, 05/12/2018
  • Posted at 02:28, 06/12/2018

    viagra tablets

    viagra tablets

  • Alvindum
    Posted at 04:01, 06/12/2018
  • Archiemeact
    Posted at 04:09, 06/12/2018
  • Posted at 04:51, 07/12/2018

    sildenafil

    sildenafil

  • Posted at 11:22, 07/12/2018

    tadalafil

    tadalafil

  • Posted at 13:00, 07/12/2018

    cialis dosage

    cialis dosage

  • Posted at 14:38, 07/12/2018

    cialis prices

    cialis prices

  • Posted at 15:47, 07/12/2018

    cialis tablets

    cialis tablets

  • Posted at 17:21, 07/12/2018

    viagra vs cialis

    viagra vs cialis

  • Posted at 18:48, 07/12/2018

    generic viagra

    generic viagra

  • Posted at 19:39, 07/12/2018

    viagra connect

    viagra connect

  • Posted at 20:59, 07/12/2018

    viagra without doctor prescription

    viagra without doctor prescription

  • Posted at 00:45, 08/12/2018

    viagra natural

    viagra natural

  • Alvindum
    Posted at 07:37, 11/12/2018
  • Posted at 11:01, 11/12/2018

    cialis vs viagra

    cialis vs viagra

  • Posted at 13:08, 11/12/2018

    tadalafil 20 mg

    tadalafil 20 mg

  • Posted at 02:52, 12/12/2018

    cialis 20 mg

    cialis 20 mg

  • Posted at 04:34, 12/12/2018

    cialis 5 mg

    cialis 5 mg

  • Posted at 06:52, 12/12/2018

    cialis pills

    cialis pills

  • Posted at 07:38, 12/12/2018

    cheap cialis

    cheap cialis

  • Posted at 08:15, 12/12/2018

    cialis coupons

    cialis coupons

  • Posted at 09:11, 12/12/2018

    cialis canada

    cialis canada

  • Alvindum
    Posted at 18:17, 12/12/2018
  • Alvindum
    Posted at 06:37, 13/12/2018
  • Alvindum
    Posted at 18:40, 13/12/2018
  • Alvindum
    Posted at 00:55, 14/12/2018
  • Alvindum
    Posted at 06:54, 14/12/2018
  • Posted at 11:11, 14/12/2018

    viagra pills

    viagra pills

  • Posted at 11:41, 14/12/2018

    viagra 100mg

    viagra 100mg

  • Posted at 19:40, 14/12/2018

    viagra online

    viagra online

  • Posted at 04:44, 15/12/2018

    viagra prices

    viagra prices

  • Posted at 05:49, 15/12/2018

    viagra generic

    viagra generic

  • Posted at 06:30, 15/12/2018

    generic viagra 100mg

    generic viagra 100mg

  • Posted at 07:32, 15/12/2018

    viagra coupons

    viagra coupons

  • Posted at 07:51, 15/12/2018

    cheap viagra

    cheap viagra

  • Posted at 08:39, 15/12/2018

    generic viagra available

    generic viagra available

  • Posted at 09:21, 15/12/2018

    buy viagra online

    buy viagra online

  • Posted at 10:32, 15/12/2018

    viagra tablet

    viagra tablet

  • Posted at 11:42, 15/12/2018

    sildenafil 20 mg

    sildenafil 20 mg

  • Posted at 14:30, 15/12/2018

    sildenafil 100

    sildenafil 100

  • Posted at 01:57, 17/12/2018

    buy biaxin

    buy biaxin

  • Posted at 03:09, 17/12/2018

    buy ceftin

    buy ceftin

  • Posted at 05:32, 17/12/2018

    buy chloromycetin

    buy chloromycetin

  • Posted at 14:51, 17/12/2018

    buy biaxin online

    buy biaxin online

  • Posted at 15:29, 17/12/2018

    buy ceftin online

    buy ceftin online

  • Posted at 16:50, 17/12/2018

    chloromycetin

    chloromycetin

  • Posted at 20:09, 17/12/2018

    buy cordarone

    buy cordarone

  • Posted at 07:26, 20/12/2018

    cialis 20mg generic

    cialis 20mg generic

  • Posted at 09:16, 20/12/2018

    generic cialis 20mg

    generic cialis 20mg

  • Posted at 09:43, 20/12/2018

    generic cialis available

    generic cialis available

  • Posted at 11:06, 20/12/2018

    generic cialis tadalafil

    generic cialis tadalafil

  • Posted at 20:09, 30/12/2018

    female viagra

    female viagra

  • Posted at 20:19, 30/12/2018

    sildenafil tablets

    sildenafil tablets

  • Posted at 08:06, 31/12/2018

    prednisone 20 mg

    prednisone 20 mg

  • Posted at 08:39, 31/12/2018

    buy sildenafil

    buy sildenafil

  • Posted at 23:26, 04/01/2019

    sildenafil generic

    sildenafil generic

  • Posted at 02:14, 05/01/2019

    viagra doctor prescription

    viagra doctor prescription

  • Posted at 02:46, 05/01/2019

    sildenafil 50 mg

    sildenafil 50 mg

  • Posted at 06:38, 05/01/2019

    sildenafil coupons

    sildenafil coupons

  • Posted at 06:53, 05/01/2019

    sildenafil 100 mg

    sildenafil 100 mg

  • Posted at 08:37, 05/01/2019

    sildenafil citrate 100mg

    sildenafil citrate 100mg

  • Posted at 09:17, 05/01/2019

    buy cialis online

    buy cialis online

  • Posted at 11:05, 05/01/2019

    cialis tadalafil

    cialis tadalafil

  • Posted at 12:13, 05/01/2019

    sildenafil citrate tablets

    sildenafil citrate tablets

  • Posted at 13:18, 05/01/2019

    sildenafil citrate pricing

    sildenafil citrate pricing

  • Posted at 01:12, 07/01/2019

    fluoxetine 20 mg

    fluoxetine 20 mg

  • Posted at 01:34, 07/01/2019

    prozac generic

    prozac generic

  • Posted at 02:03, 07/01/2019

    bactrim ds

    bactrim ds

  • Posted at 02:37, 07/01/2019

    biaxin antibiotic

    biaxin antibiotic

  • Posted at 03:12, 07/01/2019

    ceftin antibiotic

    ceftin antibiotic

  • Posted at 03:27, 07/01/2019

    cephalexin 500mg

    cephalexin 500mg

  • Posted at 04:15, 07/01/2019

    ciprofloxacin 500mg

    ciprofloxacin 500mg

  • Posted at 04:55, 07/01/2019

    fluconazole 150 mg

    fluconazole 150 mg

  • Posted at 05:43, 07/01/2019

    levofloxacin 500 mg

    levofloxacin 500 mg

  • Posted at 08:35, 07/01/2019

    cefdinir 300 mg

    cefdinir 300 mg

  • Posted at 04:49, 08/01/2019

    bactrim antibiotic

    bactrim antibiotic

  • Posted at 06:16, 08/01/2019

    azithromycin 250 mg

    azithromycin 250 mg

  • Posted at 10:33, 19/01/2019

    baclofen

    baclofen

  • Posted at 22:43, 01/02/2019
  • Posted at 08:49, 02/02/2019
  • Posted at 05:16, 03/02/2019
  • Posted at 15:04, 03/02/2019
  • Posted at 00:59, 04/02/2019
  • Posted at 22:27, 04/02/2019

Post a Comment

Comment
Name
Email
Website