Blok SERVER

NOKTA.plus

2019.11.23

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.

Devamı kodcu.com