Lagom Framework ile Mikroservis Mimarisi

Oğuzhan Saltık
Venndom Consulting
Published in
4 min readDec 14, 2018

Lagom Framework

Lagom kelimesi İsveççe “sadece yeterli miktarda” anlamında kullanılmaktadır. Mikroservisler genellikle küçük servisler olarak kategorilendirilmektedir. Framework için bu anlama sahip bir kelimenin kullanılmasının nedeni ise Akka’yı oluşturan, Lightbend firmasında kurucu ve aynı zamanda CTO olan Jonas Boner’a göre; mikroservislerde bulunan mikro kelimesindeki boyutsal vurguyu kaldırmasıdır. Yani küçük servisler olmak yerine sadece yeterli büyüklükteki — “Lagom büyüklüğündeki” servislere sahip olması vurgulanmak istenmiştir. Bu bakış açısı ise Domain-Driven Design odaklı bir düşünce biçimine de çok iyi uymaktadır.

Lagom’da hem iletişim hem de IO asenkron ve non-blocking bir şekilde varsayılan olarak gelmektedir. Bu ise Reactive Sistem Tasarımı’nın köşe taşlarından birisidir. Kaynakları daha iyi kullandığı için fiyat açısından daha etkindir. Sistemdeki paylaşılan kaynaklarda gerçekleşen sıkışma sorununu(scalability, low latency ve high throughput açısından oldukça önemli olan sorunu) en aza indirmektedir. Ve daha dinamik(dynamic), mevcut(available) ve elastik(elastic) olan birbirine gevşek bağlı sistemlerin oluşturulmasına yardım etmektedir.

Lagom Framework bir çok bileşenin birleştiği bir soyutlama katmanı olarak da düşünülebilir. Bu teknolojiler:

  • Scala
  • Java
  • Play Framework
  • Akka ve Akka Persistence
  • Scala Build Tool
  • Cassandra
  • Kafka
  • Guice

Servisler arasındaki asenkron iletişimde mesajlaşma sistemi olarak Kafka kullanılmaktadır. Bu tip sistemler daha ölçeklenebilir ve resilient olma eğilimindedir. Böylece reaktifliğin korunmasına yardımcı olur.

Lagom ile her servis kendi davranışına sahip olmasının yanında sadece kendi verisine sahiptir ve veri tabanına direk erişim sadece kendisindedir. Diğer servisler onun verisiyle etkileşime geçebilmek için dışarıya açık olan API’sini kullanmaya ihtiyaç duyarlar.

Lagom’da varsayılan persistence modeli Event Sourcing ve CQRS’dir. Bunu ise Akka Persistence ile ölçeklenebilir ve hataya dayanıklı bir veritabanı olan Cassandra kullanarak sağlamaktadır. Cassandra özellikle çok iyi bir şekilde ölçeklenebilir olması ve tamamıyla resilient olmasıyla ün salmıştır.

Photo by Levi Jones on Unsplash

Event Sourcing, ilgili işlemleri veritabanında ya da daha genel bir ifadeyle depolama alanınızda adeta bir günlükte(log) çalışıyormuş gibi gerçekleştirmenin bir yoludur. Event Sourcing sayesinde değişmez(immutable) domain eventlerini kullanarak anlık bir state’e ulaşılabiliriz. Bu gerçekleştirim şekli daha basit olmasının yanısıra temiz bir state tarihçesi ve çok iyi bir seviyede veritabanına yazma performansı sunar. Yazma performansını arttırmasının nedeni eventlerin tüm tiplerinin basit bir şekilde bilgi deposuna ard arda eklenmesiyle gerçekleşmesidir.

Not olarak belirtmek isterim ki bu yapıda güncelleme ve silme işlemi bulunmamaktadır. Örnek olarak bir uygulamada kullanıcı verilerinin silinmesini talep ederse, bunun gerçekleştirilebilmesi için birkaç yöntem geliştirilmiştir.

Event Sourced sistemlerin bir diğer avantajı ise; kolay bir şekilde test ve debug işlemleri gerçekleştirilebilir olmasıdır. Production ortamında bir soruna rastlanırsa event log’u kontrollü bir şekilde tekrarlanır ve entity’nin istenmeyen bir state’e nasıl geldiği kolaylıkla saptanabilir.

CQRS(Command and Query Responsibility Segregation) ise okuma ve yazma kısmının birbirinden ayrılması avantajını bize sunmaktadır. Bu şekilde her grubu farklı biçimde ele alabiliriz. Örnek olarak bir grubu daha farklı bir şekilde ölçeklemek isteyebiliriz. Bu yapının sayesinde okuma tarafındaki işlemeye, yazma tarafına dokunmadan, ihtiyacımıza göre önem derecesini ayarlayabiliriz.

Microservice ve Monolith Farklılıkları

Mikroservis mimarisinde, bir kod parçasında yapılacak olan değişiklik aynı anda diğer mikroservislere yansımaz. Bu olay mikroservis mimarisin en temel amaçlarından birisidir. Fakat monolitik uygulamalarda, bir bileşendeki bir kod değişikliği, sistemde bulunan diğer bileşenlerin yapısını etkileyecek bir biçimde yansıyabilmektedir.

Geleneksel monolitik uygulamalarda karşılaşılan yaygın problem, hızlı bir şekilde ölçekleyebilmenin mümkün olmamasıdır. Bundan dolayı da kaybedilen paranın miktarı daha da artmaktadır.

Örnek olarak yazılımımızın kullanım oranının artmakta olduğunu hayal edelim. Sunucumuzun sahip olduğu donanıma göre kaldırabileceği en fazla isteğin bir seviyesi bulunmaktadır. Eğer artan isteklerle başa çıkamazsak, sunucumuz yeni istekleri karşılayamaz hale gelir ve daha da kötüsü en sonunda tüm sistemin çökmesine sebep olur. Elimizde bulunan ürün/pazarlama başarısı belki de basit bir servisin kullanım dışı olması nedeniyle sarsılabilir. Kâra geçip kazancımızı iki katına çıkarmak yerine, saygınlığımızı yitirip herşeyi kaybetme riskiyle bile baş başa kalabiliriz.

Mikroservis Mimarisinin Avantajları

Mikroservislerin hizmet vereceği belirli bir fonksiyonellik bulunmalıdır. Örnek olarak bir Blog Mikroservisi; blog yazılarının oluşturulması, okunması ve güncellenmesini sağlayabilir. Yorum Mikroservisi ise blog yazılarına eklenen yorumların yönetilmesinden sorumlu olabilir. Bu durumda Kullanıcı Mikroservisi; kullanıcıların detaylarını Blog Mikroservisi ve Yorum Mikroservisi’ne sağlamaktan sorumlu olacaktır.

Eğer Yorum Mikroservisi çökecek olursa blog yazıları, yorumlar olmadan da sağlıklı bir şekilde gösterilmeye devam etmektedir.

Sonuç

Lagom Event Sourcing, CQRS ve içerisindeki reactive yapıya sahip temeline odaklanması sayesinde diğer framework’lerden apaçık bir fark yaratmaktadır.

Mikroservis mimarisine geçerek Netflix, Ebay, Amazon gibi endüstri liderlerinin gittiği yoldan ilerlemiş oluruz. Dünyadaki en başarılı şirketler, başarılı start-up’lar bu yolu tercih etmektedirler. Eğer farklı teknolojiler ortaya çıktıysa ve Yazılım Mimarisi‘ndeki yeni trendler birer norm olmaya başladıysa, sizde bu yolda bir adım atıp gelişmeleri avantaja çevirmelisiniz.

--

--

Oğuzhan Saltık
Venndom Consulting

Fullstack developer from İzmir, Turkey. I love open-source, learning new technologies and building cool products.