Study
Akka

Clustering Dasar (Konsep Akka Cluster)

Penjelasan

Akka Cluster memungkinkan beberapa ActorSystem yang berjalan di node/JVM berbeda bergabung menjadi satu 'cluster' logis, sehingga actor di satu node bisa berkomunikasi dengan actor di node lain seolah-olah mereka berada dalam sistem yang sama — inilah wujud nyata dari prinsip 'location transparency' yang disebut di topik pertama. Setiap node cluster punya alamat unik (host + port + nama sistem), dan node-node saling mengetahui keberadaan satu sama lain lewat protokol gossip berbasis algoritma seperti CRDT/gossip convergence, bukan lewat koordinator pusat tunggal (menghindari single point of failure). Konsep penting dalam cluster: member state (node bisa berstatus Joining, Up, Leaving, Down, Removed), leader (satu node yang dipilih otomatis untuk tugas administratif seperti mengonfirmasi node baru bergabung), dan seed nodes (node awal yang dipakai node baru untuk 'menemukan' cluster yang sudah ada). Di atas Akka Cluster, ada modul turunan seperti Cluster Sharding (mendistribusikan actor stateful secara otomatis ke seluruh node berdasarkan key) dan Distributed Data. Untuk tahap belajar, cukup pahami bahwa clustering adalah lapisan yang membuat sistem actor bisa berkembang dari satu proses menjadi banyak proses/mesin tanpa mengubah cara actor saling berkirim pesan.

Contoh Konsep

// application.conf (potongan konfigurasi cluster)
// akka {
//   actor {
//     provider = cluster
//   }
//   remote.artery {
//     canonical.hostname = "127.0.0.1"
//     canonical.port = 2551
//   }
//   cluster {
//     seed-nodes = [
//       "akka://[email protected]:2551",
//       "akka://[email protected]:2552"
//     ]
//   }
// }

import akka.actor.typed.ActorSystem
import akka.actor.typed.scaladsl.Behaviors
import akka.cluster.typed.{Cluster, Subscribe}
import akka.cluster.ClusterEvent.MemberEvent

object NodeCluster extends App {
  val system = ActorSystem(Behaviors.empty, "SistemCluster")
  val cluster = Cluster(system)
  println(s"Node bergabung sebagai: ${cluster.selfMember.address}")
}

Praktikum

Lengkapi komentar konfigurasi cluster berikut untuk dua seed node pada port 2551 dan 2552 dengan nama sistem SistemToko, lalu jelaskan dalam komentar apa fungsi seed-nodes.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Untuk belajar cluster di lokal, jalankan beberapa instance JVM dengan port remote berbeda di mesin yang sama dulu sebelum mencoba deploy ke banyak mesin fisik — ini membantu memahami mekanisme gossip dan seed node tanpa kompleksitas jaringan sungguhan.