Node JS Mimarisi

Ali KARABAY
3 min readSep 2, 2022

--

Node.js, ölçeklenebilir uygulamaları çalıştırmak için tasarlanmış açık kaynaklı bir JavaScript çalışma zamanı ortamıdır. Node.js, geliştiricilerin server-side olarak komut dosyası oluşturma için JavaScript’te kod yazmasına olanak tanır. Ayrıca Node.js, asenkron I/O yapabilen, event driven’a dayalı bir mimariye sahiptir.

Bu ortam web uygulamaları geliştirmek için kullanılan Google Chrome’un V8 Motoru üzerine kurulmuştur. Bu yazıda Node.js mimarisini bakacağız ve Node.js içindeki daha küçük component’lete ineceğiz.

Node.js mimarisini V8 motoru ve LIBUV olarak iki ana component’e ayırabiliriz. Her component’in işlevlerini ayrı ayrı görelim.

V8 Motoru

V8 motoru, Node.js mimarisinin temel parçasıdır. V8 motoru, JavaScript kodunun makineler tarafından anlaşılabilen C++ koduna ve ardından makine koduna dönüştürülmesine yardımcı olur.

LIBUV

LIBUV, asenkron I/O güçlü bir şekilde odaklanan açık kaynaklı bir kütüphanedir. Bu kütüphane, bir bilgisayar işletim sistemi, dosya sistemi ve Ağ Oluşturma olarak Node.js’ye erişim sağlar. Aşağıda LIBUV’un bazı özellikleri bulunmaktadır.

  • Asenkron TCP (net modülü) ve UDP (dgram modülü)
  • Asenkron DNS çözümlemesi (kısmen DNS modülü için kullanılır)
  • Asenkron dosya, dosya sistemi işlemleri ve olayları (fs modülü)
  • ANSI kaçış kodu kontrollü TTY
  • Thread pool ve Sinyal işleme
  • Child process
  • Yüksek çözünürlüklü saat
  • Thread oluşturma ve senkronizasyon.
  • Soketler ve Unix domain soketleri kullanarak İşlemler Arası İletişim (Windows)

Event Queue, Event Loop ve Thread Pool , LIBUV’deki en önemli component’lerdir.

Event Queue

Gelen istemci isteğini event queue’ ya atar ve bunları sırayla event loop’a iletir.

Event Loop

Event loop, callback fonksiyonlarını veya ağ I/O’ işlemlerinin yürütülmesi küçük görevlerin yerine getirilmesinden sorumludur. Bunlar, main thread non-blocking engelleyici olmayan görevlerdir. Gelen tüm olaylarla ilgilenir ve daha ağır görevleri thread havuzuna boşaltarak ve daha basit görevleri kendi başına yaparak dengeleme kısmını gerçekleştirir. Aşağıda olay döngüsünün bazı özellikleri verilmiştir

  • Event loop, görevleri bekleyen, yürüten ve daha fazla görev alana kadar uyuyan sonsuz bir döngüdür.
  • Event loop, yalnızca devam eden bir görev olmadığında, event queue görevlerini yürütür.
  • Event loop, callback ve promises kullanmamıza izin verir.
  • Event loop, ilk oluşturulan görevden başlayarak işlemleri yürütür.

Thread Pool

Thread pool bize 4 ayrı thread verir. Event loop, uzun sürecek bir işlemir otomatik olarak thread pool’ verir. Thread pool, aşağıdakiler gibi uzun sürecek görevlerin yerine getirilmesinden sorumludur.

  • Dosya erişimi
  • Kriptografi ile ilgili şeyler
  • Dosya Sıkıştırması
  • DNS aramaları

Diğer Kütüphaneler

Yukarıdaki component’lerin dışında, Node.js mimarisinde başka amaçlar için aşağıdaki kütüphaneler de kullanılmaktadır.

  • HTTP Parser — HTTP ayrıştırma
  • C-ARES — DNS sorguları
  • OpenSSL — kriptografi
  • Zlib — dosya sıkıştırma

Node.js Mimarisi akışı

  1. İstemci, sunucuya istek gönderir. İstek engelleyici veya engelleyici olmayabilir.
  2. Node.js gelen isteği alır ve event queue’ya ekler.
  3. Event queue her isteği event loop’a tek tek iletir.
  4. Event loop, isteğin kendi içinde yürütülecek kadar küçük olup olmadığını kontrol eder ve küçük istekse kensidisi işler aksi takdirde isteği thread pool’a iletir
  5. Thread pool bir istek alındığında, isteği yürütür ve yanıtı tekrar event loop’a iletir.

Node.js Mimarisinin Avantajları

  • Birden çok eşzamanlı istemci isteğini işlemek hızlı ve kolaydır
  • Birden çok thread oluşturmaya gerek yok
  • Daha az kaynak ve bellek gerektirir

Originally published at https://www.karabayyazilim.com on September 25, 2022.

--

--