Akka nedir? Java ile Akka Kullanımı

Merhaba arkadaşlar, Akka kısacası bize dinamik ,dağıtık , yüksek performanslı, ölçeklenebilir gerçek zamanlı işler yapmamıza olanak sağlar. Akka scala ile yazılmış bir api’dir . Scala jvm üzerinde çalıştığı için java’ya […]

Merhaba arkadaşlar,

Akka kısacası bize dinamik ,dağıtık , yüksek performanslı, ölçeklenebilir gerçek zamanlı işler yapmamıza olanak sağlar. Akka scala ile yazılmış bir api’dir . Scala jvm üzerinde çalıştığı için java’ya entegre etmek çok basittir.

Akka bize uygulamamız çalılırken eş zamanlı n tane objenin birbirinden bağımsız şekilde çalışmasına olanak sağlar. Eş zamanlı yaşayan objelerin herbirisine aktör (actor) denir.

Aktörlerin bize sağladığı avantajları sıralarsak ;
– Yüksek Performans
– Asenkron yapısı
– Non-Blocking (aktörlerin bağımsız olması birbirini etkilememesi)
– Mesaj odaklı olması
Aktör nedir (actor) ?

Akka eş zamanlı işlemleri basit ve güçlü bir şekilde yerine getirebilmek için aktör modelini benimsemiştir.
Aktörler ;
– Kendilerine ait belleğe sahiplerdir.
– Sadece asenkron mesajlarla iletişim kurarlar
– Her aktörün kendisine ait bir mesaj kutusu vardır
– Davranışlarının bir parçası olarak yeni mesajlar yaratabilir ve diğer aktörlere gönderebilir.
Aktör tabanlı modelleme daha çok bilgisayar bilimleri üzerine teorik araştırmalar,sosyal medya ,veri analizi, otomobil ve trafik sistemleri , bankacılık işlemleri vb. açıkçası yani veri                             trafiğinin yoğun olduğu sistemlerde kullanılır. IOT dünyasında da kullanımı son zamanlarda artış göstermiştir.
Aktör Modeli – Özellikleri

 – Asenkron Model
– Gönderim ve alma birbirlerinden ayrılmıştır
– Mesajlar kaybolabilir
– Aktif elemanlar başarısız olamaz.
  – Mesaj iletimi
-Mesajların iletimi modelin dışındadır  gönderilen mesajlar herhangi bir zamanda ve herhangi bir sırada iletilebilirler – ya da iletilmezler.
Tek kısıtlama: Sadece gönderilen mesajlar iletilebilir
– Mesajların gelmesiyle davranışları değişebilir
– Mesajlar – 1- Değişemez değerler (Aktör modeli sürüm A)  2- Aktörler (Aktör modeli sürüm B)

 – Topoloji
– Aktör ağları dinamiktir
– Aktörlere kanallar / portlar vb. mesajlar gönderilemez.
– Herşey bir aktördür, mesajlarda dahil.,

 

Şimdi ise akka ile javada örnek yapalım . Projemiz maven bu yüzden kütüphanemizi pom.xml‘e ekliyoruz.

Diyelimki bir mail sunucusunu akka ile çalıştırıyoruz. Birtane MailObject isminde bir sınıfımız olsun , bu sınıfımız gönderilen mailleri temsil edecek.
MailObject.java

Sonrasında bir tane SendMail isminde aktör (actor) sınıfımız olsun . Arkadaşlar açıklamaları kodda yaptığımdan comment düştüğüm yerleri iyi takip ediniz.

SendMail.java

 

Şimdi ise aktörlerimizi yöneteceğimiz bir sınıf yazıyoruz . Burada kaçtane aktör ayağa kaldıracağımızı , aktörlerimiz hangi mantık ile çalışacağına Router sınıfı ile karar veriyoruz. Ayrıyeten aktörlerimiz herhangi bir nedenden dolayı düştüğünde otomatik olarak onun yerine bir aktör create edilmesini yazacağız.

ActorManager.java

 

Router sınıfını kullanmamızdaki amaç aktörlerimizi runtime zamanı nasıl çalışması gerektiğine karar vermek . RandomRoutingLogic sınıfı ismindende anlaşılacağı gibi boş olan aktörlere iş parçacıklarını rastgele dağıtıyor.

– RoundRobinRoutingLogic :

İlk başlatıldığında aktör sayısı kadar işlemi dağıtır .Sonrasında ise ilk başlatılan aktör boşa çıkana kadar yeni iş parçacığı atamaz ta ki ilk başlatılan aktör boşa ne zaman çıkarsa sırada bekleyen iş parçacıklarını aktöre işlemesi için verir.

– RandomRoutingLogic :

İsminden de anlaşılacağı gibi ilk çalıştığında tüm işlemleri aktör sayısına böler ve eşit şekilde rastgele dağıtır.

– SmallestMailboxRoutingLogic :

Bu stratejide davranış şekli ilk başta aktör sayısı kadar işlemi dağıtır , Sonrasında ise iş yükü en az olan aktöre iş parçacıkları gönderir.

– BroadcastRoutingLogic
– ScatterGatherFirstCompletedRoutingLogic
– TailChoppingRoutingLogic
– ConsistentHashingRoutingLogic

Diğer stratejileri deneme ve okuma fırsatım olmadı ama akka’ın dökümantasyonun da olduğunu sanıyorum.

http://doc.akka.io/docs/akka/2.4.4/java/routing.html

Şimdi ise artık test sınıfımızı yazalım.

App.java

 

Artık çalıştıralım ve çıktısına bakalım. Arkadaşlar çıktısını iyi incelemenizi tavsiye ediyorum.

1

Burada gördüğünüz üzere arkadaşlar  akka://mail-sender-test/user/$a/$a  aktörü mail mesaj 2 isimli  işini bitirdikten hemen sonra
mail mesaj 3 isimli iş parçacığını alıp işlem yapmak üzere devam ediyor.

 

Alttaki çıktıda ise 5 tane iş parçacığı ‘mail mesaj n+1’ oluşturmuşuz yine ve dikkat ediniz iki durumdada 3 tane aktör ayağa kaldırdı ve bunlara
router stratejimiz ne ise ona göre iş parçacıkları dağıtaya başladı.

3

Umarım yararlı olmuştur 🙂
İyi Çalışmalar

About Mehmet KILIÇ

Bilgisayar Mühendisi