Asp.net'ten Play'e Geçiş

51 views
Skip to first unread message

Yavuz Selim Bilgin

unread,
May 17, 2014, 7:10:53 AM5/17/14
to play-fra...@googlegroups.com
Merhabalar,

Mevcutta asp.net ve ms-sql altyapısıyla çalışan web uygulamalarımız var, aslında bunların bir çoğu yüksek trafikli haber sitesi vs. portallar. Örnek olarak günlük 2-3 milyon sayfa gösterimi alan siteler. Bu uygulamaların .net üzerinde olması benim tercihim değil aslında biraz geriye uyumluluk dertleri. Performans olarak herhangi bir sıkıntımız yok, örneğin yukarıda bahsettiğim 3 milyon sayfa gösterimi olan siteyi, 24-core, 32 gb ram'li tek makinede %3-4 cpu yüküyle çalıştırabiliyoruz.

Ancak windows ortamının malum stabilite sıkıntıları, benim esas uzmanlığımın java olması, geliştirme ortamını tamamen mac'e taşımak istemem, temel olarak ms'in saçmalıklarından sıkılmış olmam gibi sebeplerden dolayı bundan sonraki işler için alternatif arayışındayım. Play 1.x sürümlerindeyken bir kaç küçük projede kullanmıştım, açıkçası o zamanlar hayran bırakmıştı beni. Şimdi tekrar baktığımda 2. versiyonlarla beraber biraz daha karmaşıklaşmış görünse de temelde aynı simple'lığı koruyor sanırım.

Soruma gelince elbette hal-i hazırda çalışan sitelerin hemen yeniden kodlanması mümkün değil ancak, yeni işlerde yavaştan play framework tarafına geçsek ne kadar verimli olur? Sistem yükü konusunda yukarıda verdiğim örnekten daha yüksek mi yoksa düşük mü olur? Geliştirme maliyeti olarak asp.net ile kıyaslarsak nasıl bir sonuç alırız? Play 1.x'ten 2.x'e geçiş gibi bir geçiş daha yapar mı?

Biraz uzun yazdım ama derdimi anlatabildim sanırım, yardım ve önerilerinizi bekliyorum.

Selamlar...

Yavuz

Fehmi Can Sağlam

unread,
May 18, 2014, 6:04:34 AM5/18/14
to play-fra...@googlegroups.com
Merhaba, 

Oncelikle "calisan sisteme dokunma" felsefesini benimsedigimi belirtmeliyim. Sonrasini ise 4 yildir web framework olarak yalnizca Play kullanan biri olarak yazayim.

3 yil boyunca severek Play 1.x kullandim. Gelistirici verimliligi cok yuksek bir framework. Ayni zamanda yuksek performans da sunuyor. Elimde karsilastirmali bir benchmark yok ama mevcut konfigurasyonunuz ile ayni basarimi elde edeceginizi dusunuyorum.

Diger taraftan Play 1.x EOL oldu. Yeni proje icin kullanilmamasi gerekiyor. Ekim ayindan beri biz de Play 2.x Scala kullaniyoruz. Gelistirici verimliligi gorece dusuk ancak performans acisindan bleeding edge. 4 core, 1.5G heap ile Play2+ReactiveMongo 72K req/min gorebiliyoruz. Daha iyisini ancak Spray ile elde edebildik su ana dek.

Play 2 java ne durumda bilemiyorum. Ayrica biz top down reactive gelistirme yapiyoruz. Blocking rdbms driverlari ile performans hissedilir oranda dusecektir. Ama .net driverlari da blocking oldugundan benzer hatta bir miktar daha iyi performans elde edeceginizi dusunuyorum. 

Daha once fonksiyonel dil kullanmadiysaniz Scala icin de bir learning curve olacak. Ayrica piyasada iyi Scala developer bulmak da pek kolay degil. Biz 1 aydir ariyoruz mesela.

Bunlari goz onune alip bir karar vermek gerek. 

Fehmi Can
--
Bu iletiyi Google Grupları'ndaki "Play Framework Türkiye" grubuna abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için play-framework...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için https://groups.google.com/d/optout adresini ziyaret edin.

Yavuz Selim Bilgin

unread,
May 19, 2014, 6:26:45 AM5/19/14
to play-fra...@googlegroups.com
Merhaba,

Beni en çok düşündüren de "çalışan sisteme dokunma" kısmı aslında, her ne kadar çalışan sistemleri ilk etapta değiştirmeyecek olsak da hakim olduğumuz, yeterince tecrübe ettiğimiz platformu bırakmak ne denli mantıklı bilmiyorum.

Scala'yı öğrenmek istiyordum uzun zamandır, ancak elbette mevcut iş akışının içinde learning curve'ü aşmak kolay olmayacak. Play 2 Java ile Play 2 Scala arasında hissedilir performans farkı yaşanır mı?

Ben hobi projelerini vs. Play ile yapmaya başlayıp, o taraftaki durumu görüp ticari işler için ondan sonra karar vermenin daha uygun olacağını düşündüm, sanırım böyle daha mantıklı olacak.

Örnek olarak geçtiğimiz günlerde arkadaşımız sunucuyu konfigüre ederken windows update ayarlarını "warn me before installing updated" olarak değiştirmediği için gündüz vakti sunucu kendini restart etmiş, ne olursa olsun bir server işletim sisteminin bunu yapması kabul edilemez. Basit görevler için kullandığımız linux veya bsd makineler uptime rekoru kırarken windows sunucularda sürekli update yap, restart et, acaba ne değişti, ne sürprizler var gibi şeyleri düşünmek oldukça sıkıcı. Kendimi çalışan sistemlere dokunma, icat çıkarma diye telkin ederken bu saçmalıkları yaşadıkça tekrar alternatif aramaya yöneliyorum. Sanırım bu curve'ü ne kadar erken aşmaya başlarsak o kadar iyi olacak.

Bilgiler için teşekkürler.

Yavuz


18 Mayıs 2014 13:04 tarihinde Fehmi Can Sağlam <fehmica...@4primes.com> yazdı:

Serdar Coşkun

unread,
May 19, 2014, 6:55:10 AM5/19/14
to play-fra...@googlegroups.com
Bir çaylak olarak ben de play 2.x java ‘ya son dönemlerde zorunlu olarak geçmiş birisi olarak kendi görüşlerimi paylaşayım; 

Play 2 ilk çıktığında java dökümantasyonu neredeyse yok denecek kadar azdı, ama son durumda oldukça güzel bir java dökümantasyonu olduğunu söyleyebilirim… Play 2.x java ile çalışmak tabiki 
de 1.2.x java ile çalışmaya göre biraz daha zor (en azından ilk öğrenme aşamasında), ama bana kalırsa geliştirici verimliliği açısından çok büyük bir kayıp yarattığını düşünmüyorum. Fakat zaman zaman sinir bozucu ufak şeyler de olabiliyor. 

Örnek vermek gerekirse, routes.scala dosyası üzerinde yaptığınız değişikliği java controller içerisinden düzgün bir şekilde görebilmek için zaman zaman bir kenarda terminal üzerinden kodunuzu manuel olarak compile etmeniz gerekebiliyor. 

Play 2’de java desteği tam olsa da java 2. sınıf vatandaş muamelesi görüyor orası kesin..

Benim görüşüm eğer vaktiniz kısıtlıysa play 2.x java ile başlayıp sonra zamanla mevcut java dosyalarını scala’ya hakim oldukça değiştirmeniz olurdu. Sonuçta scala ve java aynı projede beraber barınabiliyorlar. (yanlışım varsa düzeltin, son baktığımda öyleydi:) )

Bu arada stackoverflow’da ben de play2 scala vs play2 java ile ilgili bir sorum olmuştu, bayağı bilgilendim sizinle de paylaşayım: 


Son olarak tempelate engine olarak ben açıkçası scala tempelate engine’i daha çok sevdim. 

Ben de merak ettim; sonuçta ikisi de bytecode olarak derleniyor, java ve scala arasında bir performans farkı oluyor mu? 

On 19 May 2014, at 13:26, Yavuz Selim Bilgin <y...@ysbilgin.com> wrote:

Merhaba,

Beni en çok düşündüren de "çalışan sisteme dokunma" kısmı aslında, her ne kadar çalışan sistemleri ilk etapta değiştirmeyecek olsak da hakim olduğumuz, yeterince tecrübe ettiğimiz platformu bırakmak ne denli mantıklı bilmiyorum.

Scala'yı öğrenmek istiyordum uzun zamandır, ancak elbette mevcut iş akışının içinde learning curve'ü aşmak kolay olmayacak. Play 2 Java ile Play 2 Scala arasında hissedilir performans farkı yaşanır mı?

Ben hobi projelerini vs. Play ile yapmaya başlayıp, o taraftaki durumu görüp ticari işler için ondan sonra karar vermenin daha uygun olacağını düşündüm, sanırım böyle daha mantıklı olacak.

Örnek olarak geçtiğimiz günlerde arkadaşımız sunucuyu konfigüre ederken windows update ayarlarını "warn me before installing updated" olarak değiştirmediği için gündüz vakti sunucu kendini restart etmiş, ne olursa olsun bir server işletim sisteminin bunu yapması kabul edilemez. Basit görevler için kullandığımız linux veya bsd makineler uptime rekoru kırarken windows sunucularda sürekli update yap, restart et, acaba ne değişti, ne sürprizler var gibi şeyleri düşünmek oldukça sıkıcı. Kendimi çalışan sistemlere dokunma, icat çıkarma diye telkin ederken bu saçmalıkları yaşadıkça tekrar alternatif aramaya yöneliyorum. Sanırım bu curve'ü ne kadar erken aşmaya başlarsak o kadar iyi olacak.

Bilgiler için teşekkürler.

Yavuz


18 Mayıs 2014 13:04 tarihinde Fehmi Can Sağlam <fehmica...@4primes.com> yazdı:


Fehmi Can SAGLAM

unread,
May 20, 2014, 1:41:22 AM5/20/14
to play-fra...@googlegroups.com
Java ve Scala arasinda performans farki oluyor mu sorusunun cevabi iskembeden sallanmayacak kadar zor. Yanit icin teorik bir alt yapi kurmaya calisayim. Lutfen dogru yanit olarak kabul etmeyin.

Java ve Scala kodlari bytecode'a derleniyorlar. Yani performans farki icin farkli bytecode olusmasi gerekiyor.

Ayni problem icin Java ve Scala yaklasimi genelde tamamen farkli. Scala immutability ve referential transparency'yi on plana cikariyor. Immutable kod hem bir miktar daha fazla instruction hem de bir miktar daha fazla bellek gerektirmeli. Buradaki tradeoff resource consumption ile reasonability arasinda gibi gorunuyor.

Diger bir ornek Future. Java Future composable degil. Scala Future ise bir monad. Bu sebeple reactive bir uygulamada nerdeyse tamamen farkli yaklasimlar kullanilmasi gerekiyor. Bu yaklasimlarin ortaya cikaracagi bytecodelarin da cok farkli olacagini dusunuyorum. Ama Scala'daki bu yapilarin her zaman daha performansli olacagini dusunmek de dogru degil bence. Yalnizca  gorece ucuk expressive power dolayisiyla belki 20 satirlik java kodunu 2 satir ile ifade edebiliyoruz.

Uzun lafin kisasi Scala Java'dan hizlidir demek biraz hayalcilik olur ama sunduklari yapilar dolayisiyla farkli performanslar ortaya cikabilir.

Fehmi Can

Fehmi Can SAGLAM

unread,
May 20, 2014, 2:07:09 AM5/20/14
to play-fra...@googlegroups.com
Bir ek yapayim. Scala'nin teorik olarak Java'ya gore daha performansli olmasi gereken bir durum Json serialization. Java'da macro olmadigi icin json kutuphaneleri reflection kullanmak zorunda. Bu da ciddi performans kaybina sebep olacaktir. 

Fehmi Can

Erdem Agaoglu

unread,
May 20, 2014, 3:04:58 AM5/20/14
to play-fra...@googlegroups.com
@Fehmi Can, hocam "macro olmadigi icin reflection kullanmak zorunda" biraz agir olmus. Okuyan takip eden genc gelistiriciler yanlis anlayabilir.

@Yavuz Selim Bilgin, hocam yanlis anlamadiysam asil probleminiz .net'ten ote windows gibi geldi bana. Cok naif bir soru olacak belki ama o alemleri hic bilmedigim icin soruyorum. Mono kullanmayi denediniz mi hic? Duzgun calisiyorsa son surumleri baya uyumlu gibi gorunuyor. Uyumsuzluklar varsa da onlari temizlemek bastan yazmaktan daha kolay olur gibi geliyor bana.
erdem agaoglu

Kurtuluş Arkan

unread,
May 20, 2014, 3:29:16 AM5/20/14
to play-fra...@googlegroups.com
Merhabalar, 

Gruba yeni katıldım ve scala öğrenen, play-java'yı 3 aydır production sistemlerde kullanan bir acemi olarak yazıyorum.

Geliştirme deneyimi olarak play framework için şunları söyleyebilirim; bunlar şimdiye kadar olan izlenimlerim.
Daha önceden grails, spring mvc gibi full-stack frameworklerle uygulama geliştirdiğimden önce play'de hissettiğim eksiklikleri yazayım.

Out of the box'bir security/authentication ve access control mekanizması yok, (aslında var ama Spring-ACL vs. ile karşılaştırıldığında çok primitiv kalıyor)
Gerçi bu pek de play'in direkt problemi değil, play framework tek başına bir full-stack olma gibi bir hedefi yok.
Bu konuda yapabilecekleriniz 1. plugin bulup onu kullanmak, 2. kendiniz geliştirmek.

Bir diğer gördüğüm eksikte, (sanırım bunlar hep grails alışkanlıkları) mesela session yönetimi biraz cılız. session time-out gibi bir mekanizma yok.
session'da tutulan herşey aslında cookie vs. Bu diğer frameworklerle karşılaştırıldığında çok farklı çalışıyor, uygulamanızı geliştirirken, biraz farklı düşünmek gerektiriyor.

Play.1x'le karşılaştırıldığında productivitiy de bir düşüş olduğunu söylemişler, ben play.1.x hiç kullanmadığımdan farkı bilmiyorum. Fakat, play framework, bence gayet hızlı bir geliştirme ortamı sunuyor,
Spring MVC ile karşılaştırmak bile istemiyorum.

Performans konusunda bir sıkıntı yaşayacağınızı açıkcası düşünmüyorum, Çok deneyimim olmadığı halde (en azından performance tuning yapacak kadar),
JSON servislerinin 1-10ms arasında response-time'larının olduğunu belirtmeliyim. Şuan çalıştığım projeninde küçük bir proje olduğunu düşünürsek fazlasıyla iyi.

Scala Template kısmı (view'lar için) Asp.Net MVC geçmişi olanların iyi bildiği Razor template engine benziyor.
Haliyle kullanması, JSP,JSF vs. gibi alternatiflere göre kat ve kat daha iyi.

Şu sıralar benim de merak ettiğim scala versiyonu ve haliyle scala, ilerde deneyimim oldukça sizle paylaşırım

Fehmi Can SAGLAM

unread,
May 20, 2014, 4:51:13 AM5/20/14
to play-fra...@googlegroups.com
Erdem, ne dedigini tam olarak anlamadim sanirim:) Hatali bir tanim yapmis isem duzeltirsen sevinirim.

Fehmi Can

Yavuz Selim Bilgin

unread,
May 20, 2014, 4:58:54 AM5/20/14
to play-fra...@googlegroups.com
@Erdem, mono projesi .net 2.0'ı destekliyor sadece, bunun yanısıra kullanılan harici kütüphanelerin de mono destekli olması lazım. 
Linux üzerinde mono ile asp.net koşturmak biraz ütopik bir durum gibi geliyor bana. :)


20 Mayıs 2014 11:51 tarihinde Fehmi Can SAGLAM <fehmica...@4primes.com> yazdı:

Erdem Agaoglu

unread,
May 20, 2014, 5:32:05 AM5/20/14
to play-fra...@googlegroups.com
@Yavuz, biraz naif olmus o zaman, ama http://www.mono-project.com/Compatibility sayfasinda "Everything in .NET 4.5 except WPF, WWF, and with limited WCF and limited ASP.NET 4.5 async stack." yaziyor. Bu kisaltmalar ne anlama geliyor zerre fikrim yok ama sadece 2.0 destekler durumda da degil gordugum kadariyla.

@Fehmi, tek cumlede "macro olmadigi icin reflection" deyince macro ile reflection ayni ise yarayan iki zimbirti gibi duruyor. Bir de "json" ve "zorunda" ekleyince json icin baska hic bir yontem yokmus gibi gorunuyor. Onu demek istedim.

Yavuz Selim Bilgin

unread,
May 20, 2014, 5:39:50 AM5/20/14
to play-fra...@googlegroups.com
Ben bakmayalı çok şey değişmiş, pardon. :)


20 Mayıs 2014 12:32 tarihinde Erdem Agaoglu <erdem....@gmail.com> yazdı:

cagdas senol

unread,
May 20, 2014, 7:16:09 AM5/20/14
to play-fra...@googlegroups.com
Ortamı trollemiyorum, yanlış anlaşılmasın ama bir Scala geliştiricisi olrak C# ı Scala'ya Java'dan daha yakın buluyorum.
Windows için bir şey diyemeyeceğim ancak C# mı Java mı deseler Scala der C# yazarım.
Play Java yine Java(hele Java6-7 ise plain old Java)

(Bu satırları şu an C# yazması gereken bir Scala geliştiricisi olarak yazıyorum.
Cagdas Senol

Yavuz Selim Bilgin

unread,
May 20, 2014, 8:02:40 AM5/20/14
to play-fra...@googlegroups.com
C# güzel bir dil ama web için konuşacak olursak asp.net bataklık gibi, http nedir, get nedir, post nedir, request, response nedir bunları bilmeden web uygulaması yazıyor insanlar. ms-sql dışında dbms bilmiyorlar. Bu şekilde alışınca da tekrar normal dillere dönemiyorlar.
Elbette isteyen kullanabilir ancak okullarda bu kadar aktif eğitiminin yapılması piyasayı kısır bir döngüye sürüklüyor diye düşünüyorum.


20 Mayıs 2014 14:16 tarihinde cagdas senol <cagda...@gmail.com> yazdı:

Can Bican

unread,
May 20, 2014, 8:07:57 AM5/20/14
to play-fra...@googlegroups.com
Merhaba,

Tanışmıyoruz, o yüzden hoşgörünüze sığınarak: Sizinkine benzer bir şekilde "Java yaz geç, ortamlarda Scala yazdım dersin"  tutumunu benimsemekteyim :)

Bana öyle geliyor ki, play 1'de o kadar insanı mutlu ettiler ki play 2'de scala'ya geçince minnet borçlarını ödemek için mutlu olanlar scala'ya bir şans verdiler gibi geldi. Hakkını verenleri tenzih ederim.

Bu arada, play 1 de pek EOL olmadı gibi görünüyor, daha çok "maintanance" seviyesine geçirilmiş sanki. Play 2'den sonra en az bir yeni sürüm çıktı, Hatta 1.3'ün roadmap'i de var bir yerlerde. "%96 bitti" görünüyor:




--
Can Bican
Reply all
Reply to author
Forward
0 new messages