Skip to content

Latest commit

 

History

History
22 lines (14 loc) · 2.93 KB

erdem.md

File metadata and controls

22 lines (14 loc) · 2.93 KB

Nokta'da Neden Scala?

Konferansın genel teması NoSQL. NoSQL veritabanlarını kullanmamızın genel sebebi yüksek performans ve/veya ölçeklenebilirlik ihtiyacı. Buradaki araçlar tabii ki problemin sadece veri kayıt kısmına odaklanmış durumda. Benzer ihtiyaçlar, kodlama ve veri işleme tarafında da mevcut. Scala ise fonksiyonel bir programlama dili olarak barındırdığı bir çok özellikle bu tip ihtiyaçları daha rahat karşılayan bir dil.

Nokta'da uğraştığımız işler genellikle nispeten büyük ölçeklerde. Hemen hemen tüm problemlerin içinde bir multithreading ihtiyacı sözkonusu. Multithreading standart yöntemlerle çok kolay bir süreç değil. Thread'ler Callable'lar Runnable'lar ExecutionContext'ler standart Java kodlama pratikleriyle rahat uğraşılabilen yöntemler değil. Scala ve aslında akka tüm bu araçların kullanımını kolaylaştırıyor. Bunu standart Servlet'lerle çalışmak yerine Struts gibi Wicket gibi bir framework kullanmaya, ya da metin işlemek için C yerine Python kullanmaya benzetmek çok yanlış değil. Bu tip araçlar programcıların hayatını kolaylaştırmak için var.

Örnek olarak reklam istatistikleri için bir projemiz var. Dakikada toplam 50000'e yakın reklam gösteriminin sayılması ve raporlanması için singlethread bir programın çalışması pek anlamlı değil. Özellikle standart bir sunucunun 8 ve hatta 16 çekirdeğinin olduğu bu günlerde. Bunu multiprocess ya da eksi tarz multithreaded bir yapıyla çözülmesi sürecin yönetimi bakımından ciddi problemli. Akka sayesinde her bir gösterimi ve buna bağlı diğer metrikleri immutable yapılarla modellemek ve işlemleri actor'lerle yapmak asıl probleme odaklanmamızı sağlıyor. Tüm bunları case class larla ya da pattern matching kullanarak kodlamak ise tüm projenin daha hızlı ilerlemesini sağlıyor.

Hıza örnek olarak bahsedilebilecek küçük bir projemiz daha oldu. Yakın zamanda elimizdeki yaklaşık 50 milyon dosyayı bir yerden bir yere kopyalamamız gerekti. Bunu normal bir sıralı kopyalamayla yapmaya kalksak aylar alabileceğini hesapladık. Diğer taraftan yarım günlük bir çalışma ve 100 satır kadar scala koduyla işi paralelleştirdik ve bir kaç haftada işi tamamladık.

Tabii ki hem fonksiyonel programlamanın hem de yeni bir programlama dili olarak Scala'nın bir öğrenme süreci var. Ama bu asla boşa giden bir yatırım değil. Eğer yapılan işin kapsamı çok dar değilse zaten birden fazla dil öğrenmek ve gerekeni gerektiği yerde kullanmak artık bir mecburiyet. Scala ise bu araçlar arasında önemli bir yere sahip.

###Slidelar icin

  • Erdem Ağaoğlu(Nokta)
  • NoSQL -> Ölçeklenebilir veritabanı
  • Scala -> Ölçeklenebilir programlar
  • Multithread lüks değil, gereksinim
  • Amaca yönelik araç kullanımı
  • 50.000req/min i Scala ile işliyorlar
  • Sequential haftalar sürece bir işi Scala concurrency ve 100 satırda 1 haftada halettiler