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.
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.