14 Aralık 2011 Çarşamba

Tornado'mu Node.js mi dedim kendi kendime...

Yeni ve artık son okul dönemi ile birlikte Lookremix projesinden ayrılmak zorunda kaldım. Bir startup içerisinde bulunmak oldukça eğitici oldu benim için. Hem bir sosyal medya aracının oluşturulurken ne gibi badireler atlattığını görmüş oldum. Hem de bir yazılım geliştirici olarak daha önce hiç el atmadığım meselelere el atmak durumunda kaldım. Bunun yanında venezuelalı kadınların nasıl çekilmez olabileceğini devamlı sizle nasıl dalga geçmeyi başarabileceğini öğrenmiş oldum :P. Benim için oldukça çetrefilli ama bir yandan da oldukça zevkli bir iş oldu. Keşke daha fazla devam edebilseydim diyorum ama belli olmaz belki ileride yollarımız tekrar kesişir.

Şu anda ise ilk göz ağrım bilsin'i tekrar ayağa kaldırmak için elime bir fırsat geçti. Geçerli sosyal medya araçlarının zayıflığı ve bilsin'in neden güçlü bir araç olacağı konusunda okuldaki jüriye yaptığım sunum oldukça ikna edici oldu ve şu bilsin resmi olarak bitirme projem haline dönüştü. Ancak çok çalışmam gerek çünkü şu anda her ne kadar kırık dökük de olsa çalışan bir alet (tool) görünümü verse de aslında kafamdaki ideolojiden ve sağlamlıktan uzak durumda.

Projeye daha önce başlarken yaptığım yanlış teknoloji seçimlerini ve kervan yolda düzülür diyip yolda yol değiştirmeleri (gerçekten çok fazla enerji ve kaybı oluyor) tekrar yaşamamak için mümkün olduğunca belgeli, planlı davranmaya çalışıyor. Çıkacak sorunları mümkün olduğunca ön görmeye çalışıyorum. Blog üzerinden çok fazla ayrıntı vermeyi uygun görmüyorum ama projenin %90'ının sağlam restFul api oluşturmaktan geçtiğini ve mümkün olduğunca akışkan bir yapıda olacağını söyleyebilirim. Tabi bu noktada Django kullanmak bir az saçma oluyor zira api yazmak için context processorlere ya da template sistemine ihtiyaç duymuyorum. Bunun yanında Django ile long pooling yapmak ya da websockets kullanmak deveyi at yarışına sokmak gibi bir şey olurdu.

Bu noktada Node.js gel beni kullan diye göz kırpıyor, diğer kolumda da Tornado var. Bunları kendimce karşılaştırmaya çalıştım ancak eğer yanlış bilgi verdiğimi, yanıldığımı düşünüyorsanız lütfen yorum bırakın.

Performans

Node.js Google beyin V8 adlı javascript motorunu kullanıyor. Javascript kodları derlenip makina diline çevriliyor. Bu da kallavi bir hız demek. Tornado ise bunu ta ki Python 3.3 çıkana kadar yapamayacak(mış). İzlediğim node.js sunumunda yapılan testte ki bu test sadece bir "hello world" testi. Node.js saniyede 4340 cevap verebilirken tornado ise sadece 2344 cevap verebilmiş. Sözün özü Node.js performans konusunda Tornado'yu ikiye katlıyor.

Dil Yapısı

Bu noktada Tornado golünü atıyor zira hiç bir programcının Python varken Javascript kullanmak isteyeceğini sanmıyorum. Javascript'in iğrenç bir syntax yapısı var. Bu Python sever birinin şahsi fikri olmakla beraber, pek çok kişinin de noktalı virgül ya da memeli parantezler ile boğuşmak isteyeceğini sanmıyorum. Hoş, syntax olayı CofeeScript sayesinde çözülebiliyor ancak yine de dahili standartlaşmış kütüphanelerin eksikliği hissediliyor. Bir each döngüsü yaratmak için bile harici bir kütüphaneye ihtiyaç duymak, bende huzursuzluğa yol açıyor. Yengeç burcu programcılar için önermiyorum. :)

İkinci olarak javascript ilk defa browser dışında bir mecrada iş görmeye başladığı için bir çok kütüphane olgunlaşmamış durumda. Halbu ki Python 1994 de 1.0 versiyonuna ulaştı yıllardır her konuda kütüphane geliştirilmekte kendisi için. Node.js nin şu anki versiyonu 0.4.1 Tornado'nun ise 2.1.1.

Üçüncü olarak, Javascript in doğal halinin etkinlik tabanlı (event-driven) bir dil olduğunu bu yüzden geliştirilen kütüphanelerin haliyle asenkron kütüphaneler olduğunu. Python ise aslında sıralı (satır satır) işlenen bir dil olması itibari ile Tornado ile kullanacağınız kütüphanelerin özel olarak asenkron olarak yazılmış kütüphaneler olması gerektiğini eklemem gerekiyor. Anlayacağınız Tornado içinde mysqllib'i direkt olarak import edip kullanamıyorsunuz. Bunun yerine asenkron çalışacak şekilde tasarlanmış mysql kütüphanesi ne ise onu bulup kullanmanız gerekiyor.

Ancak ilginçtir ki her ne kadar Tornado daha olgun olsa da içerisinde bir session management olayı bulundurmuyor. Bu bana çok garip geldi. Sanırım Django'da ki:

if user.is_authenticated():
   ...
   ...

Türevi sorular soramayacağımız manasına geliyor Tornado'ya. Belki authentication olayları başka türlü cookie tabanlı atraksiyonlarla (OAuth?) çözülüyordur bilemiyorum.

Topluluk

Node.js'in çok heyecanlı bir topluluk henüz bir velet olmasına rağmen inanılmaz ilgi görüyor. Aşağıdaki bu rakamlar söylediğimi kanıtlar nitelikte: (Fork, Takipçi ve İlgili Depo sayılarını Github'dan aldım)

Fork Takipçi İlgili Depo Eposta Listesi
Tornado 510 3,313 364 1779
Node.js 1,339 11,944 5842 6590

Sonuç

Sonuç olarak Node.js topluluk ve performans olarak Tornado'yu dövüyor gözüküyor. Ancak sanırım geliştiriciler arasında bir garip moda ya da trendin peşinden hızla gitme durumu var. Yeni bir teknoloji afili bir sunumla anlatılıp da bir kaç yerde yazılıp çizildiği zaman hurra herkes o tarafa gidiyor. Sonra herkes sakinleşiyor hangi dili rahat kullanıyorsa onu kullanmaya devam ediyor. Bu yüzden bu 7000 kişilik e-posta listelerini falan biraz şişirilmiş rakamlar olarak görüyorum. Ayrıca bu devasa kitleden kaç tanesi gerçek bir iş görebilmek üzere sizin ofisinize gelip çalışabilecek insanlardır bunu hesap etmek gerek. üç mü beş mi?

Bunun yanında Node.js teoride bu kadar ilgi görmesine rağmen, henüz kendisini savaş arenasında görmüş değiliz. Gerçek - büyük projelerde ne gibi problemler çıkaracağı konusunda pek fikrimiz yok. Tornado ise halihazırda Facebook'un ve FriendFeed'in ağır işlerini gören bir sistem.

Bütün bunlara dayanarak, üzülerek Node.js ye bizimle değilsin diyorum. Zira saniyede 4bin request karşılayabiliyor olması bende yarattığı rahatsızlık hissini gidermeye yetmiyor. Zaten bir gün sunucularım altından kalkamayacağım bir yükle karşılaşırsa zaten para kazanıyorum demektir bir sunucu daha koyarım.

Kaynaklar:

11 yorum:

  1. Söylediklerine katılıyorum ve birkaç ekleme yapayım:
    - Programcılarda bile bir "tüketici"lik vardır. Her programı, her dili, özellikle de yeni ve değişik olanları denemeyi severiz. Tornado teknoloji olarak yabancı olmadığımız şeyler içeriyor. Node.js ile tam tersi. Node.js'nin "takipçisi"nin daha fazla olmasının sebeplerinden biri de bu bence.
    - Node.js kullananların çoğu "deneyip görme" amaçlı kullanıyor. Tornado için ise durum öyle değil.
    - Tornado kullanıyorsan geliştirme değil üretim ortamı önüne serilmiş oluyor. "Şu işi nasıl yaparım?" diye "tırmalamıyorsun".
    - Arkalarındaki dili düşününce. Python, sözdizimi, mantığı ve işleyişi basit ama gücü yerinde bir dil. Javascript ise sözdizimi, mantığı ve işleyişi itibariyle fazlasıyla esnek ama gücü fazlasıyla tartışılır bir dil.

    Bir de Coffeescript'ten bahsetmişsin, http://ryanflorence.com/2011/2012/case-against-coffeescript/ okursan CoffeeScript'in sandığın kadar iyi bir çözüm olmadığını göreceksin.

    YanıtlaSil
  2. Javascript in gucu fazlasiyla tartisilabilir demek, fazlasiyla tartisilabilir bir iddia bence. Evet cirkindir belki ama gucludur de.

    YanıtlaSil
  3. Gücü fazlasıyla tartışılabilir derken ne demek istediğimi tam anlatamamışım demek ki. Javascript ile veritabanı işlemleri yapabiliyor muyuz, dosyalar üzerinde çalışabiliyor muyuz? Hayır.. Bunun için node.js ile çalışacak ek uygulamalar yazılması gerekiyor (yazılmışı var, o ayrı ;)
    Javascript'in kendisinde varolmayan bir sürü kütüphane var anlamında söylemiştim ben o sözü.

    YanıtlaSil
  4. http://ryanflorence.com/2011/2012/case-against-coffeescript/ adam haklı.

    YanıtlaSil
  5. Beyler, bu adam Tumblr'da da böyle yazmaya devam edecekse, oraya gitsin. Oraya da geliriz. Güzel yazmis :-)

    YanıtlaSil
  6. Bu yazıyı yazarken Tornado'nun facebook'un geliştirdiği bir teknoloji olması dolayısıyla yarın öbür gün silinebileceğini ya da kodunun kapatılabileceğini düşünmüş. Sonra yok canım olmaz öyle şey demiştim. Bu gün facebook python-sdk sını silmiş github reposundan. Haberi şurda:

    http://techhouse.org/~lincoln/blosxom.cgi/coding/facebook-python.html

    YanıtlaSil
  7. Merhaba Mirat Bey,

    Bu girdiyi http://django.org.tr/planet adresinden tesadufen denk geldim. Gorunen o ki, konustuklarimizdan sonra sanirim bu yaziyi yazmissin ve benden de esinlenmissin. Neyse, telif hakki istiyorum.

    Saka saka, olm Django ile yaz gitsin ne kasiyorsun. Bu da sakaydi.

    Not: Bu yorumda sanal reklam uygulanmaktadir.

    YanıtlaSil
  8. Sinan Keskin20 Ocak 2012 10:47

    Benim gibi C tabanından gelen programcılar Her zaman küme parantezi {} aşinalığı içerisinde oluyorlar. Yapı gereği yakınlık hissettiriyor sanırım. O yüzden Javascript her zaman bir adım önde olacaktır. Ben Python'a hiç ısınamadım mesela.

    İşte bence bu programcının yapısıyla alakalı. Yani beynin farklı kısımlarını kullanan farklı programcılar var.

    Coffeescript'te bu yüzden yazılmış gibi. Mesela Python kullanan bir programcıya Javascript aşinalığı sağlar. Ama tersi doğru değil.

    YanıtlaSil
  9. Nodejs'nin tornadodan daha çok tutma sebebi bence javascript oluşu. Yoksa bu kadar hızlı bir şekilde ilgi çekemezdi. Javascript tarafında da sağolsun v8 sayesinde herşeyi yapabilecek hıza ulaşıldı. Tahminimce client-side'da bu kadar şey yapıyoruz niye server-side'a yapmıyoz yiğen diyerek başlanmış bu hale gelmiş.

    Coffeescript de tutmasına karşın nedense önerilmiyor çoğu okuduğum yazıda. Ki zaten niye coffeescript diye birşey çıkmış anlamadım. Bi onu çözersem detayına inecem. :D

    YanıtlaSil
  10. Bir Pythoncu olarak Coffee ile birkaç satır yazdım.

    Bence Coffee işini iyi yapıyor, JS'in iğrenç bir sözdizimine sahip olduğunu düşünüyorum, eskiden C++ yazmışlığım da var C++'a bayılırım, sözdizimine takılmadım hiç ama JS'de üç kuruşluk iş için neredeyse okunması imkansız şeyler yazarken buluyorum kendimi. Coffee'nin girintileri okuyan yapısı daha insani kesinlikle, insan okuyacak bunu! :)

    Coffee hata ayıklama konusunda bir şey vaat etmiyor, yukarıdaki eleştiri haklı olsa da Coffee kullanacaksan bir terazi koyuyorsun bir tarafa hata ayıklama zorluğu diğer tarafa kod okunabilirliği, bende okunaklılık ağır basıyor, herkeste farklı olabilir. İstemcide karmaşık algoritmalarla oyun programlanmayacaksa göze alınabilir bir şey çünkü Coffee'nin derlediği JS kodu da gayet temiz.

    Bence Coffee'nin asıl eksiği bunlar değil arkasında Coffee ile iş yapan birilerinin olmaması, iş yaşamında çok kullanılan bir araç olsa daha çok güven verecek. Mesela Node.js'ye veya Dart'a ilgi çok çünkü ileride bunlar sektörde önemli yer edinir arkasında şu şirket var diye düşünüyor insanlar.

    Bence Coffee webkit'e falan gömülebilecek runtime derleme yapılacak kadar güzel. Ama kimsenin böyle bir şey yapacağını sanmıyorum.

    YanıtlaSil

Yorum yazan eller dert görmeye