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
Yorum Yap