⚠️ Archived Article: This article is very old and may contain outdated or incorrect information. It's kept here for nostalgic and historical reasons.
Tornado ve Node.js Arasinda Secim Yapmak
Yeni ve artik son okul donemi ile birlikte Lookremix projesinden ayrilmak zorunda kaldim. Bir startup icerisinde bulunmak oldukca egitici oldu benim icin. Hem bir sosyal medya aracinin olusturulurken ne gibi badireler atlattigini gormus oldum. Hem de bir yazilim gelistirici olarak daha once hic el atmadigim meselelere el atmak durumunda kaldim. Benim icin oldukca cetrefilli ama bir yandan da oldukca zevkli bir is oldu. Keske daha fazla devam edebilseydim diyorum ama belli olmaz belki ileride yollarimiz tekrar kesisir.
Su anda ise ilk goz agrim bilsin'i tekrar ayaga kaldirmak icin elime bir firsat gecti. Gecerli sosyal medya araclarinin zayifligi ve bilsin'in neden guclu bir arac olacagi konusunda okuldaki juriye yaptigim sunum oldukca ikna edici oldu ve su bilsin resmi olarak bitirme projem haline donustu. Ancak cok calismam gerek cunku su anda her ne kadar kirik dokuk de olsa calisan bir alet (tool) gorunumu verse de aslinda kafamdaki ideolojiden ve saglamliktan uzak durumda.
Projeye daha once baslarken yaptigim yanlis teknoloji secimlerini ve kervan yolda duzulur diyip yolda yol degistirmeleri (gercekten cok fazla enerji ve kaybi oluyor) tekrar yasamamak icin mumkun oldugunca belgeli, planli davranmaya calisiyor. Cikacak sorunlari mumkun oldugunca on gormeye calisiyorum. Blog uzerinden cok fazla ayrinti vermeyi uygun gormuyorum ama projenin %90'inin saglam restFul api olusturmaktan gectigini ve mumkun oldugunca akiskan bir yapida olacagini soyleyebilirim. Tabi bu noktada Django kullanmak bir az sacma oluyor zira api yazmak icin context processorlere ya da template sistemine ihtiyac duymuyorum. Bunun yaninda Django ile long pooling yapmak ya da websockets kullanmak deveyi at yarisina sokmak gibi bir sey olurdu.
Bu noktada Node.js gel beni kullan diye goz kirpiyor, diger kolumda da Tornado var. Bunlari kendimce karsilastirmaya calistim ancak eger yanlis bilgi verdigimi, yanildigimi dusunuyorsaniz lutfen yorum birakin.
Performans
Node.js Google beyin V8 adli javascript motorunu kullaniyor. Javascript kodlari derlenip makina diline cevriliyor. Bu da kallavi bir hiz demek. Tornado ise bunu ta ki Python 3.3 cikana kadar yapamayacak(mis). Izledigim node.js sunumunda yapilan testte ki bu test sadece bir "hello world" testi. Node.js saniyede 4340 cevap verebilirken tornado ise sadece 2344 cevap verebilmis. Sozun ozu Node.js performans konusunda Tornado'yu ikiye katliyor.
Dil Yapisi
Bu noktada Tornado golunu atiyor zira hic bir programcinin Python varken Javascript kullanmak isteyecegini sanmiyorum. Javascript'in igrenc bir syntax yapisi var. Bu Python sever birinin sahsi fikri olmakla beraber, pek cok kisinin de noktali virgul ya da memeli parantezler ile bogusmak isteyecegini sanmiyorum. Hos, syntax olayi CofeeScript sayesinde cozulebiliyor ancak yine de dahili standartlasmis kutuphanelerin eksikligi hissediliyor. Bir each dongusu yaratmak icin bile harici bir kutuphaneye ihtiyac duymak, bende huzursuzluga yol aciyor. Yengec burcu programcilar icin onermiyorum. :)
Ikinci olarak javascript ilk defa browser disinda bir mecrada is gormeye basladigi icin bir cok kutuphane olgunlasmamis durumda. Halbu ki Python 1994 de 1.0 versiyonuna ulasti yillardir her konuda kutuphane gelistirilmekte kendisi icin. Node.js nin su anki versiyonu 0.4.1 Tornado'nun ise 2.1.1.
Ucuncu olarak, Javascript in dogal halinin etkinlik tabanli (event-driven) bir dil oldugunu bu yuzden gelistirilen kutuphanelerin haliyle asenkron kutuphaneler oldugunu. Python ise aslinda sirali (satir satir) islenen bir dil olmasi itibari ile Tornado ile kullanacaginiz kutuphanelerin ozel olarak asenkron olarak yazilmis kutuphaneler olmasi gerektigini eklemem gerekiyor. Anlayacaginiz Tornado icinde mysqllib'i direkt olarak import edip kullanamiyorsunuz. Bunun yerine asenkron calisacak sekilde tasarlanmis mysql kutuphanesi ne ise onu bulup kullanmaniz gerekiyor.
Ancak ilginctir ki her ne kadar Tornado daha olgun olsa da icerisinde bir session management olayi bulundurmuyor. Bu bana cok garip geldi. Sanirim Django'da ki:
if user.is_authenticated():
...
...
Turevi sorular soramayacagimiz manasina geliyor Tornado'ya. Belki authentication olaylari baska turlu cookie tabanli atraksiyonlarla (OAuth?) cozuluyordur bilemiyorum.
Topluluk
Node.js'in cok heyecanli bir topluluk henuz bir velet olmasina ragmen inanilmaz ilgi goruyor. Asagidaki bu rakamlar soyledigimi kanitlar nitelikte: (Fork, Takipci ve Ilgili Depo sayilarini Github'dan aldim)
| Fork | Takipci | Ilgili Depo | Eposta Listesi | |
|---|---|---|---|---|
| Tornado | 510 | 3,313 | 364 | 1779 |
| Node.js | 1,339 | 11,944 | 5842 | 6590 |
Sonuc
Sonuc olarak Node.js topluluk ve performans olarak Tornado'yu dovuyor gozukuyor. Ancak sanirim gelistiriciler arasinda bir garip moda ya da trendin pesinden hizla gitme durumu var. Yeni bir teknoloji afili bir sunumla anlatilip da bir kac yerde yazilip cizildigi zaman hurra herkes o tarafa gidiyor. Sonra herkes sakinlesiyor hangi dili rahat kullaniyorsa onu kullanmaya devam ediyor. Bu yuzden bu 7000 kisilik e-posta listelerini falan biraz sisirilmis rakamlar olarak goruyorum. Ayrica bu devasa kitleden kac tanesi gercek bir is gorebilmek uzere sizin ofisinize gelip calisabilecek insanlardir bunu hesap etmek gerek. uc mu bes mi?
Bunun yaninda Node.js teoride bu kadar ilgi gormesine ragmen, henuz kendisini savas arenasinda gormus degiliz. Gercek - buyuk projelerde ne gibi problemler cikaracagi konusunda pek fikrimiz yok. Tornado ise halihazirda Facebook'un ve FriendFeed'in agir islerini goren bir sistem.
Butun bunlara dayanarak, uzulerek Node.js ye bizimle degilsin diyorum. Zira saniyede 4bin request karsilayabiliyor olmasi bende yarattigi rahatsizlik hissini gidermeye yetmiyor. Zaten bir gun sunucularim altindan kalkamayacagim bir yukle karsilasirsa zaten para kazaniyorum demektir bir sunucu daha koyarim.
Kaynaklar:
- http://nodejs.org/
- http://www.tornadoweb.org/
- Node.js mailing list
- Tornado mailing list
- The History of Python
- What are the disadvantages of using Node.js?
- What are the disadvantages/drawbacks of using Tornado as a primary web server, not just for real time activity?
- Node.js is Cancer