Framework

Node.js Nedir?

Node.js  Nedir?

Bugün hakkında bir çok güzel yazının bulunduğu bir konudan bahsetmek istiiyorum. Nedir bu konu?

Node.js tanımsal anlamda, açık kaynaklı, sunucu tarafında çalışan ve ağ bağlantılı uygulamalar için geliştirilmiş bir çalıştırma ortamıdır. Node.js uygulamaları genelde istemci tarafı betik dili olan JavaScript kullanılarak Server side(Back-end) uygulamalar yazabileceğimiz, Javascript Runtime platformudur.

Geliştirici:

Javascript ile Joyent Firması (Joyent ABD’nin San Fransisco kenti merkezli yazılım firması. Firma, özellikle uygulama sanallaştırma ve bulut bilişim alanında hizmet vermektedir) tarafından 2009 yılında geliştirilmeye başlanmış ve hala geliştirilmeye devam etmektedir.


Geliştirilme Amacı?

Günlük hayatta zaten kullanılan birçok back-end teknolojisi var. Buna neden ihtiyaç olsun gibi bir soru aklımıza gelmiyor değil. Bu sorunun cevabını az biraz işletim sistemi bilgisi vererek başlamak istiyorum.

İşletim sistemi kendisine verilen bir işi iki faklı şekilde yürütebilir. İlki işlemleri(process) sıraya koyar ve birisi bitirince diğerine geçer. İkinci tasarım şekli ise işi büyük küçük demeden “divide and conquer” mantığı ile “Thread” adı verilen iş parçacıklarına böler ve bu iş parçacıklarını eş zamanlı olarak çalıştırarak kısa sürede daha fazla işi bitirmesini sağlar(Aynı kola bağlı olan parmaklar ile klavyede yazı yazmaya benzetilebilmektedir). Açıkça görülüyor ki threadlere bölerek çalışması daha avantajlı bir yapı olduğunu gösteriyor. Detaylı anlatımı burada bakabilirsiniz: http://bilgisayarkavramlari.sadievrenseker.com/2010/03/22/thread-iplik/


Peki bunun node.js ile ne alakası var?

Günümüzde çoğu uygulama, zamanının çoğunu veritabanlarına veya internetteki çeşitli servislere istek yapıp gelen sonuçları beklemekle geçirir. Node.js, yapısı gereği asenkrondur. Beklemeyi hiç sevmez. İstekleri teker teker yapmak yerine paralel olarak yapar. İstekler bittikleri zaman Node’u “geri ararlar” (callback). Bu sayede anlık olarak çok sayıda istek hızlı bir şekilde işlenebilir.

Yukarıda anlatılan olayın bize getirmiş olduğu iki temel kavram bulunmaktadır. Bu kavramlar kısaca şu şekilde özetlenebilir:

Blocking I/O:

Bir kullanıcının sunucudan isteği doğrultusunda cevap olarak gönderilecek veriler tamamlanmadan başka bir kullanıcının isteği alınmaz. Bu durum JavaScript’in çok iş parçacıklı işler için uygun olmadığından kayaklanmaktadır.

Non – Blocking I/O:

Öte yandan non-blocking  kısımda ise; ister  ilk kullanıcının bağlı olduğu sunucudan yaptığı birden fazla istekler listesi olsun, isterse başka bir kullanıcının yaptığı istekler olsun tüm istekler paralel olarak başlatılabilir.

İlk paragrafta bulunan bazı özelliklerinin detaylarına da bakalım:

  •     Eşzamansız ve Olay Taraflı Sürücü

Node.js kütüphanesinin tüm API’leri eşzamansız, yani engelleyici değildir. Temel olarak, Node.js tabanlı bir sunucunun hiçbir zaman bir API’nin veri döndürmesini beklememesi anlamına gelir. Sunucu çağırdıktan sonra bir sonraki API’ye taşınır ve Node.js olaylarının bildirim mekanizması, sunucunun önceki API çağrısından yanıt almasına yardımcı olur.

  •   Tek Dişli ama Çok Ölçeklenebilir

Node.js, olay döngüsüyle birlikte tek bir dişli model kullanır. Olay mekanizması, sunucunun engelleyici olmayan bir şekilde yanıt vermesine yardımcı olur ve sunucuyu istekleri işlemek için sınırlı iş parçacığı oluşturan geleneksel sunucuların aksine oldukça ölçeklenebilir kılar. Node.js tek bir iş parçacığı programı kullanıyor ve aynı program Apache HTTP Sunucusu gibi geleneksel sunuculardan çok daha fazla sayıda istekte hizmet sunabiliyor.

  •     Tamponlama Yok

Node.js uygulamaları hiçbir zaman veriyi tamponlamaz. Bu uygulamalar verileri basitçe yığın halinde verir.

İşte burası node,js i diğer teknolojilere göre avantajlı olduğu kısımdı.


Biraz Daha Teknik Detaylardan Bahsedelim:

V8 denilen javascript motoru üzerinde çalışır. V8 Google tarafından geliştirilen, Chrome web browserlarının da üzerinde çalıştığı C, C++ ve javascript dilleri ile kodlanan bir enginedir. Tek amacı javascript kodunu makine koduna çevirmektir.

I/O ve network işlemlerini non-blocking olarak çalıştıran node.js, zaman ve kaynak konusunda çok cimri. Yani örnek verilmek istenir ise çok yüksek trafikli sitelerde anlık işlemler, kullanıcı sorgulamadan aynı signalR’da olduğu gibi web socket kullanılarak client’ın ekranına çok kısa zamanda ve az kaynak tüketilerek gönderilebilir. Mesela bir servisten çekilen borsa bilgilerinin tüm clientlara gönderilmesi gibi. Bu işlemi kullanıcı sorgulamadan borsa bilgileri değiştikçe yapılacaktır. Gerçek zamanlı (real time) uygulamalar web soket teknolojisi kullanılarak node.js ile performanslı bir şekilde yapılabilir.


V8 Engine Çalışma Prensibi:

 

Kabaca bu şekildedir. Bu konuya ilerleyen yazılarımızda daha detaylı şekilde bahsedeceğiz.


Kimler Node js Kullanıyor?

Node.js’e geçen popüler firmalardan biri Linkedin’dir. Mobil sunucu tarafında Node.js ’e geçmeden önce Rails kullanıyordu. Node.js ’e geçtikten sonra server maliyeti 1/10 düşmüştür. Bazı işlemlerde 20 kata varan hız artışı olmuştır. Daha yakın tarihli. Paypall çalışma paltformunu riske etmemek için, direkt Node js’e geçişi yerine Java ve Node.js olarak 2 plaftormda paralel olarak geliştirme yapmıştır. Sonuçta Node js java uygulamasına göre 2 kat daha fazla saniyelik istemi karşılamıştır. Üstelik Node js tek çekirdekli bir işlemci üzerinden çalışırken java uygulaması beş çekirdekli işlemci üzerinde çalışmaktadır. Yani Node.js maliyeti 1/5’e indirmiştir. Ayrıca response time’ı %35 hızlanmıştır. Bunların yanına şunlarıda ekleyebiliriz:

  • Netflix
  • Trello
  • Uber
  • Medium
  • Ebay
  • NASA
  • Yahoo şeklinde oldukça yaygın bir kullanımı bulunmaktadır.

Bir sonraki yazıda (ECMAScript’te) görüşmek üzere…

 

 

Yazar Hakkında

Furkan Alp Esen

Yorumlar

Yorum Ekle