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.

 

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

Post a Comment

Comment
Name
Email
Website