স্কালা মেসেজ পাসিং সিস্টেম

স্কালা ডিস্ট্রিবিউটেড সিস্টেম এবং মেসেজিং - স্কালা প্রোগ্রামিং (Scala Programming) - Computer Programming

233

স্কালা মেসেজ পাসিং সিস্টেম সাধারণত Akka লাইব্রেরি বা স্কালার অ্যাক্টর মডেল (Actor Model) ব্যবহার করে তৈরি করা হয়। মেসেজ পাসিং সিস্টেম হল একটি ডিস্ট্রিবিউটেড বা কনকারেন্ট সিস্টেম যেখানে বিভিন্ন অ্যাক্টর বা কম্পোনেন্ট একে অপরের মধ্যে মেসেজ পাস করে, এবং প্রতিটি অ্যাক্টর তাদের নিজস্ব স্টেট এবং কার্যক্ষমতা বজায় রেখে কাজ করে। এটি অ্যাক্টর মডেল-এর মূল ধারণা, যেখানে মেসেজ পাসিংয়ের মাধ্যমে অ্যাক্টররা যোগাযোগ করে এবং একে অপরের অবস্থান বা স্টেটকে পরিবর্তন না করে একে অপরের সাথে সমন্বয় করে কাজ করে।

স্কালায় Akka লাইব্রেরি এবং Akka Actor Model ব্যবহারের মাধ্যমে মেসেজ পাসিং সিস্টেম তৈরি করা সহজ এবং কার্যকরী হয়।

এই লেখায় আমরা Akka Actor Model এর মাধ্যমে স্কালায় মেসেজ পাসিং সিস্টেমের কিভাবে কাজ করে তা উদাহরণসহ জানবো।


১. Akka Actor Model

Akka Actor Model ব্যবহার করে স্কালায় মেসেজ পাসিং সিস্টেম তৈরি করা হয়, যেখানে অ্যাক্টর একটি ইনস্ট্যান্স হিসেবে কাজ করে এবং এটি মেসেজ গ্রহণ করে তার স্টেট পরিবর্তন করতে পারে। একটি অ্যাক্টর শুধুমাত্র নিজেই মেসেজ হ্যান্ডল করতে সক্ষম এবং অন্যান্য অ্যাক্টরের স্টেট পরিবর্তন করতে পারে না।

মূল ধারণা:

  • অ্যাক্টর: একটি অ্যাক্টর হল একটি স্বতন্ত্র ইউনিট যা ইনপুট (মেসেজ) গ্রহণ করে এবং তার স্টেট পরিবর্তন করে। অ্যাক্টরের জন্য মূল কার্যকলাপ হল মেসেজ হ্যান্ডলিং।
  • মেসেজ পাসিং: অ্যাক্টররা একে অপরকে মেসেজ পাস করে এবং পরবর্তীতে তাদের কাজ চালিয়ে যায়। মেসেজ একবার পাস করার পর, একে অন্য অ্যাক্টরের স্টেটের উপর কোনো প্রভাব পড়ে না, বরং প্রক্রিয়া একে অপরের মধ্যে সম্পূর্ণ বিচ্ছিন্নভাবে ঘটে।

২. Akka Actor Setup এবং ব্যবহার

এখানে একটি সাধারণ Akka অ্যাক্টর সেটআপ এবং মেসেজ পাসিং সিস্টেমের উদাহরণ দেয়া হলো।

২.১ Akka Actor Dependency যোগ করা

প্রথমে, আপনার build.sbt ফাইলে Akka Actor লাইব্রেরি যোগ করুন:

libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.6.10"
libraryDependencies += "com.typesafe.akka" %% "akka-testkit" % "2.6.10" % Test

২.২ Akka Actor উদাহরণ

এই উদাহরণে, আমরা একটি Greeter অ্যাক্টর তৈরি করব যা একটি গ্রীটিং মেসেজ গ্রহণ করবে এবং তারপরে এটি প্রতিক্রিয়া হিসেবে মেসেজ পাঠাবে।

import akka.actor.{Actor, ActorSystem, Props}

// Greeter actor
class Greeter extends Actor {
  def receive = {
    case "greet" => 
      println("Hello, Actor Model!")
      sender() ! "greeting sent"  // Responding with a message
    case _ => 
      println("Unknown message")
  }
}

object AkkaActorExample {
  def main(args: Array[String]): Unit = {
    val system = ActorSystem("actor-system")
    
    // Create an instance of Greeter actor
    val greeter = system.actorOf(Props[Greeter], "greeter-actor")
    
    // Send a "greet" message to the Greeter actor
    greeter ! "greet"
    
    // Send a message that the actor does not understand
    greeter ! "unknown"
    
    // Stop the actor system gracefully
    system.terminate()
  }
}

এখানে:

  • Greeter ক্লাস হল একটি actor যা একটি receive মেথড দিয়ে মেসেজ গ্রহণ করে এবং উপযুক্ত প্রতিক্রিয়া প্রদান করে।
  • actorOf মেথড ব্যবহার করে অ্যাক্টর তৈরি করা হয়েছে।
  • greeter ! "greet": এই লাইনটি মেসেজ "greet" অ্যাক্টরের কাছে পাঠাচ্ছে।

২.৩ মেসেজ পাসিং

Akka-তে মেসেজ পাসিং খুবই সরল। আপনি শুধুমাত্র অ্যাক্টরের নাম এবং মেসেজ পাঠালেই, অ্যাক্টর তা গ্রহণ করে প্রক্রিয়া করবে। এটি এস্কেপাল টাইম এর মধ্যে হয়, এবং কখনও একাধিক অ্যাক্টর একে অপরকে মেসেজ পাঠায়।

এখানে:

  • sender(): এটি অ্যাক্টরের মাধ্যমে বর্তমান sender-এর রেফারেন্স গ্রহণ করে, যাতে প্রতিক্রিয়া পাঠানো যায়।
  • ! (অ্যাক্টর চিহ্ন) দিয়ে মেসেজ পাঠানো হয়।

৩. Akka মেসেজ পাসিং অ্যাপ্লিকেশন উদাহরণ

ধরা যাক, আমাদের দুটি অ্যাক্টর রয়েছে:

  1. SenderActor: এটি মেসেজ পাঠানোর দায়িত্ব পালন করবে।
  2. ReceiverActor: এটি মেসেজ গ্রহণ করবে এবং প্রক্রিয়া করবে।
import akka.actor.{Actor, ActorSystem, Props}

// Sender Actor
class SenderActor(receiver: akka.actor.ActorRef) extends Actor {
  def receive = {
    case "start" => 
      println("Sender sending message to Receiver")
      receiver ! "Hello, Receiver!"
  }
}

// Receiver Actor
class ReceiverActor extends Actor {
  def receive = {
    case msg: String =>
      println(s"Receiver received message: $msg")
  }
}

object AkkaMessagePassing {
  def main(args: Array[String]): Unit = {
    val system = ActorSystem("Message-Passing-System")
    
    // Create Receiver actor
    val receiver = system.actorOf(Props[ReceiverActor], "receiver")
    
    // Create Sender actor
    val sender = system.actorOf(Props(new SenderActor(receiver)), "sender")
    
    // Start message passing
    sender ! "start"
    
    // Gracefully terminate the system
    system.terminate()
  }
}

এখানে:

  • SenderActor মেসেজ পাঠায় এবং ReceiverActor মেসেজ গ্রহণ করে এবং প্রিন্ট করে।
  • receiver ! "Hello, Receiver!": Sender actor থেকে Receiver actor-এ মেসেজ পাঠানো হচ্ছে।

Output:

Sender sending message to Receiver
Receiver received message: Hello, Receiver!

৪. Akka মেসেজ পাসিং এবং আন্ডারলাইন

  • অ্যাক্টর মডেল স্কালায় মেসেজ পাসিং ব্যবস্থার মাধ্যমে কনকারেন্ট প্রোগ্রামিং খুব সহজ করে তোলে।
  • একাধিক অ্যাক্টর একে অপরকে মেসেজ পাঠানোর মাধ্যমে ডিস্ট্রিবিউটেড সিস্টেম তৈরি করা যায় এবং অ্যাক্টরের মধ্যে মেসেজ সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাসভাবে পাস করা যায়।

৫. মেসেজ পাসিং সিস্টেমের সুবিধা

  • ডিস্ট্রিবিউটেড এবং কনকারেন্ট প্রোগ্রামিং: মেসেজ পাসিং সিস্টেমের মাধ্যমে একাধিক অ্যাক্টর একে অপরের সাথে পারফেক্টলি কমিউনিকেশন করতে পারে, যা ডিস্ট্রিবিউটেড সিস্টেম এবং কনকারেন্ট প্রোগ্রামিংয়ে সহায়তা করে।
  • ডিকাপলিং: অ্যাক্টররা একে অপরের স্টেটের সাথে সরাসরি যোগাযোগ না করে মেসেজ পাস করে, ফলে কোডের গঠন সহজ হয় এবং কমপ্লেক্সিটি কমে।
  • স্কেলেবিলিটি: মেসেজ পাসিং সিস্টেমে নতুন অ্যাক্টর যোগ করা এবং স্কেল করা সহজ, যা ডিস্ট্রিবিউটেড সিস্টেমের জন্য উপযোগী।

সারাংশ

Akka Actor Model এবং Akka HTTP স্কালায় মেসেজ পাসিং সিস্টেমের জন্য অত্যন্ত শক্তিশালী ফ্রেমওয়ার্ক, যা ডিস্ট্রিবিউটেড সিস্টেম এবং কনকারেন্ট প্রোগ্রামিং তৈরিতে সহায়ক। Akka অ্যাক্টর মডেল ব্যবহার করে মেসেজ পাসিং সিস্টেম তৈরি করে কোডকে আরও নমনীয়, ডিকাপলড, এবং স্কেলেবল করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...