JavaScript’in Olaylısı: Node.js
2009 Kasım’ında Berlin’de JavaScript yazılımcıları toplanmış. Ryan Dahl, Google’ın V8’i üzerine kurguladığı non-blocking, olay bazlı framework’ünü anlatacak. O gün belki katılanlar için Ryan’ın sunumu, diğerleri gibi sıradandı. Burun büken de çok oldu belki.
Ama zamanın kuralları işledi. Şimdi 2014’teyiz. Node.js tüm web geliştirme dünyasını tokatlıyor. Kendi sahasında dev bir imparatorluk kurdu.
Paket yöneticilerinin rakamları gerçeği gözler önüne seriyor. Node.js suyun yönünü değiştirdi.
Neden? Beraber deşelim biraz.
Dünyada dolaşım hâlinde olan bir geliştirici kolonisi var. Bu koloni, sürekli arayış hâlinde ve en verimli üretim yapabilecekleri istasyonun peşindeler. Bulduklarına inanırlarsa, o istasyona kümelenip, devasa üretimlere başlıyorlar. Sonra, bir çığlık, bir ıslık, bir güvercin… göçmen kuşlar gibi başka diyarlara sürükleniyorlar.
Bu maharetli, yüksek işler yapan adamları göz ardı edemeyiz. Geminin dümeninde onlar ve onların alışkanlıkları var.
Web programlama, bundan 15 sene öncesinde bu kişilerin ilgi alanında olmadığı için çok toy kalan bir alandı. Javascript ile yapılan en faydalı şeyler, belki hatırlarsınız, birçok stilde kayabilen yazılar ve mouse imleci etrafında gezinen grafiklerdi.
Aradaki döneme çok girmeyelim. Ruby on Rails ile web’in zevkini çıkartmaya başlayan bu maharetli koloni, sıra performansa ve verimliliğe geldiğinde inovatif bir şeyler aramaya başladı.
Apache yılların web sunucusuydu. İnternetin bel kemiğiydi. Ama thread temelli concurrency ile ölçeklenebilirliği zorluyordu. Nginx, olay bazlı, non-blocking karakteri ile kabul edebildiği eş zamanlı istek sayısında ve kaynak verimliliğinde Apache’ye nal toplatıyordu:
Ryan Dahl ise tam bu noktada kendine şu soruyu soruyordu. Javascript doğal olarak tek thread’li ve olay tabanlı bir dil. V8, Google’ın mühendislerinin üzerinde yoğunlaştığı performanslı, platform bağımsız motor. Bloklama yapmayan bir I/O kütüphanesi yazsam ben de yanına. Bünyesinde HTTP sunucusu da olsa. Harika olmaz mı?
Node.js işte bunun adı. Ryan’ın Nginx’ten öğrendiği ve Javascript’le birleştirdiği prensipler, derli toplu, cross-platform bir ortama dönüştü.
Javascript ve giriş bariyeri: Javascript’in programlamada ana diller arasına girdiği çağa geldik. Herkes, bu dile âşina. Web’ciler dünden âşina. Node.js, Javascript’e dayandığı için giriş bariyeri oldukça düşük. Zıplaması kolay. Prototipleme hızlı. Yine de Javascript sevilen bir dil değil. CoffeeScript veya TypeScript gibi soyutlamalar, reddiyeler dikkat çekiyor. Ama iş dönüp dolaşıp, Jeff Attwood’un sözüne geliyor: “Javascript’le yazılabilen bir şey, bir gün mutlaka Javascript’le yazılacak.” Ya da Hanselman’ın tespiti: “Javascript, web’in assembly dili.”
Camia ve paket avantajı: Burada mı yersiniz paket mi olsun? Node.js’te her şeyi pakette alabilirsiniz. NPM, paket yöneticisi, yukarıda da bahsettiğim gibi ihtiyacınız olan her şey bir karşılık sunuyor. Çünkü arkasındaki topluluk, kımıl kımıl. Hani demiştik, istasyona kümelenmişler. Üretim yapıyorlar. Bu demek oluyor ki sırtınız sağlam. Bir derdiniz mi var? There is a package for that!
Performans ve kârlılık: Evet, farkı zaten orada. Adam sunucu kaynaklarını verimli kullanıyor. Her istek başına bir thread açıp da işletim sisteminin concurrency sınırlarını test etmiyor. Bu nedenle daha düşük konfigurasyonlu makinelerde, diğer sunucu taraflı teknolojilere göre daha büyük kitlelere hizmet verebiliyorsunuz.
Google ve V8: Node.js’in en büyük avantajı, Google tarafından ilerletilen ve doğal olarak çapraz platform ilerleyen Javascript motoru. Yani Node.js, çaprazlığını Google’dan alıyor. O işle Google ilgileniyor. Chrome sürekli gelişiyor ve her işletim sisteminde aynı hızda, beceride ilerliyor. V8, JVM seviyesinde yaygınlığa ulaştı. Daha aktif ilerliyor. Ve Google’ın kendi hayali olan işletim sistemi’nin de arka tarafı olarak duruyor. V8, Node.js’in kendi işine odaklanmasını sağlıyor.
Bulut vatandaşlığı: Node.js, size uçtukça mil kazandırıyor. Tüm bulut sağlayıcılar, Node.js’e gönülden destek veriyor. Kayıtsız şartsız her platforma giriyor. Ayrıca Javascript ile barışık olan MongoDB ve Redis ile tercümansız konuşabiliyor.
Bir kere yaz, her yerde…: O meşhur söylem. Node.js bunu şöyle düzeltiyor: bir kere yaz; hem internet tarayıcısında hem de sunucu ortamında çalışsın. Javascript iki yakada da ortak dil olunca aynı iş mantığını, aynı business domain nesnelerini el sürmeden kullanabiliyorsunuz. Fantastik değil mi? AngularJS gibi güçlü istemci tarafı altyapı kullanırsanız, Node.js zaten yağ gibi servis akıtıyor. Modeller ortak. Belki basit iş kuralları da ortak kodla yürüyor. Bu Microsoft’un JScript adlı (sunucuda ASP ile çalışan) teknolojisini bilenler için çok yeni bir imkan değil ama günümüzde hâlâ heyecan yaratma potansiyeli var. Özellikle gelişen, zenginleşen ve dahi SOLID’leşen Javascript paradigmaları düşünüldüğünde, kod paylaşımı nimet.js oluyor.
Node.js’e, yüksek eş zamanlılık isteyen uygulama parçaları için giriş yapabilirsiniz. Canlı oyunlar, finansal ekranlar, anlık iletişim ağları… bunlar güzel uygulama alanları. İllaki web sayfaları değil, native mobil uygulamalar da Node.js’in tüketicisi olabilir.
MEAN stack diye bir bohça da var. MongoDB, Express, AngularJS ve Node.js. Express, Node.js’in REST servisleri geliştirme paketi. Güçler birleşmiş ve sizin üretkenliğinizi bekliyor.
Node.js, web dünyasında artık kaçışın olmadığı bir koridor. Bereketli bir sofrası var. Çok yoğurt yeme şekli var. Akil insanlar, oturup araştıracak. Kendine ve işine en uygununu bulup, belki de harikalar yaratacak.
Olaylara bir de böyle bakın.
3 Comments
Sef
11 Mart 2015 at 19:01Merhabalar, yazılarınızı zevkle okudum mongodb’de birden çok proje geliştirdiğimizdr müdürüm bana bu işin javascript ile olmayacağını söylemişti(oldu) bu yazıyıda görünce özellikle alt yapıda nodejs kullandığım için bir kez daha sevindim elinize sağlık zevkle okudum.
Abdurrahman Güngör
18 Temmuz 2015 at 17:26Kesinlikle keyifle okunasi bir yazi olmus. Javascriptin gucu inanilmaz. Tesekkurler
Ömer
15 Temmuz 2016 at 14:43Harika bir yazı…