GenServer, Supervisor, এবং Application

OTP (Open Telecom Platform) - এরল্যাং (Erlang) - Computer Programming

276

Erlang-এ GenServer, Supervisor, এবং Application এর ব্যবহার

Erlang-এর শক্তিশালী actor model এবং concurrent প্রোগ্রামিংয়ের কারণে, GenServer, Supervisor, এবং Application গুলি অত্যন্ত গুরুত্বপূর্ণ ধারণা। এই তিনটি ধারণা process management, fault tolerance, এবং application design-এ ব্যবহৃত হয়। এগুলি Erlang এবং Elixir (যেহেতু Elixir Erlang VM ব্যবহার করে) তে আধুনিক সিস্টেম ডিজাইনের জন্য অত্যন্ত গুরুত্বপূর্ণ টুলস।

এখানে আমরা GenServer, Supervisor, এবং Application এর কার্যকরী ভূমিকা এবং ব্যবহারের বিস্তারিত আলোচনা করবো।


1. GenServer

GenServer (General Server) হল Erlang এর একটি উচ্চ স্তরের অবজেক্ট যা server-like কাজ করতে ব্যবহৃত হয়। এটি Erlang এর OTP (Open Telecom Platform) এর একটি অংশ, যা প্রসেস তৈরি, সিঙ্ক্রোনাস ও অ্যাসিঙ্ক্রোনাস কল হ্যান্ডল করা এবং স্টেটফুল সিস্টেম তৈরি করতে সহায়তা করে। GenServer একটি কার্যকরী ফাংশনাল আবস্ট্রাকশন প্রদান করে যা সার্ভার প্রক্রিয়া তৈরি, পরিচালনা, এবং প্রক্রিয়া-ভিত্তিক যোগাযোগ সহজ করে তোলে।

GenServer এর সুবিধা:

  • প্রক্রিয়ার স্টেট হ্যান্ডলিং।
  • অ্যাসিঙ্ক্রোনাস এবং সিঙ্ক্রোনাস কল ব্যবস্থাপনা।
  • প্রসেসের জীবনচক্রের (life cycle) পরিচালনা।
  • ত্রুটি পরিচালনা এবং পুনরুদ্ধার।

উদাহরণ: GenServer এর মাধ্যমে একটি কাউন্টার তৈরি

-module(counter).
-behaviour(gen_server).

%% API
-export([start_link/0, increment/1, get_count/0]).

%% GenServer callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).

start_link() ->
    gen_server:start_link({local, counter}, ?MODULE, [], []).

increment(Pid) ->
    gen_server:cast(Pid, increment).

get_count() ->
    gen_server:call(counter, get_count).

init([]) ->
    {ok, 0}.  %% Initial state is 0.

handle_call(get_count, _From, State) ->
    {reply, State, State};  %% Returning the current state (counter value)

handle_cast(increment, State) ->
    {noreply, State + 1};   %% Incrementing the state

handle_info(_Info, State) ->
    {noreply, State}.  %% Default case for info messages

terminate(_Reason, _State) ->
    ok.

code_change(_OldVsn, State, _Extra) ->
    {ok, State}.

এখানে:

  • start_link/0 ফাংশনটি GenServer এর একটি নতুন ইনস্ট্যান্স শুরু করে।
  • increment/1 অ্যাসিঙ্ক্রোনাসভাবে কাউন্টার ইনক্রিমেন্ট করে।
  • get_count/0 সিঙ্ক্রোনাসভাবে কাউন্ট রিটার্ন করে।

ফাংশন কল:

1> c(counter).
{ok,counter}
2> {ok, Pid} = counter:start_link().
{ok,<0.33.0>}
3> counter:increment(Pid).
ok
4> counter:get_count().
1

2. Supervisor

Supervisor হল একটি Erlang এর একটি অবজেক্ট যা সিস্টেমের অংশ হিসেবে নির্দিষ্ট প্রক্রিয়া গুলি পরিচালনা করে এবং যদি কোনো প্রক্রিয়া ব্যর্থ হয়, তবে তাকে পুনরায় শুরু করে। এটি fault-tolerant সিস্টেম ডিজাইনের জন্য গুরুত্বপূর্ণ, কারণ এটি একটি supervision tree তৈরি করে যেখানে একটি প্রক্রিয়ার ব্যর্থতার প্রভাব অন্যান্য প্রক্রিয়াগুলোর উপর পড়ে না। Supervisor সাধারণত একটি মডিউল হিসেবে কাজ করে, এবং এটি কিভাবে নির্দিষ্ট process গুলি শুরু এবং মনিটর করবে তা নির্ধারণ করে।

Supervisor এর সুবিধা:

  • Fault tolerance: যদি কোনো প্রক্রিয়া ব্যর্থ হয়, Supervisor তাকে পুনরায় চালু করে।
  • Process hierarchy: বিভিন্ন প্রক্রিয়া গুলোর মধ্যে একটি tree structure তৈরি হয়।

উদাহরণ: Supervisor তৈরি

-module(counter_supervisor).
-behaviour(supervisor).

%% API
-export([start_link/0]).

%% Supervisor callbacks
-export([init/1]).

start_link() ->
    supervisor:start_link({local, counter_supervisor}, ?MODULE, []).

init([]) ->
    %% Define the child process to be supervised
    ChildSpec = {counter, {counter, start_link, []}, permanent, 5000, worker, [counter]},
    {ok, {{one_for_one, 5, 10}, [ChildSpec]}}.

এখানে:

  • counter_supervisor একটি supervisor, যা counter মডিউলকে মনিটর করে।
  • যখন counter মডিউল ব্যর্থ হবে, supervisor তাকে পুনরায় শুরু করবে।

Supervisor কল:

1> c(counter_supervisor).
{ok,counter_supervisor}
2> counter_supervisor:start_link().
{ok, <0.35.0>}

3. Application

Application হল Erlang এর একটি গুরুত্বপূর্ণ ধারণা যা একটি নির্দিষ্ট সিস্টেম বা সার্ভিসের রুপরেখা তৈরি করতে ব্যবহৃত হয়। Erlang-এ একটি Application মূলত একটি process tree হিসাবে কাজ করে এবং এটি এক বা একাধিক প্রক্রিয়া পরিচালনা করে। প্রতিটি application একটি start এবং stop ফাংশন দিয়ে পরিচালিত হয় এবং সাধারণত supervisor এবং gen_server গুলির মাধ্যমে সিস্টেমের বিভিন্ন অংশ নিয়ন্ত্রণ করে।

Application এর সুবিধা:

  • সিস্টেমের কাজের লজিক এবং এর সমস্ত প্রক্রিয়ার একত্রিত করা।
  • নির্দিষ্ট প্রক্রিয়া শুরু ও থামানোর জন্য পরিচালনা।

উদাহরণ: Application তৈরি

-module(myapp).
-behaviour(application).

%% API
-export([start/2, stop/1]).

start(_Type, _Args) ->
    {ok, _Pid} = counter_supervisor:start_link(),
    io:format("My Application Started~n").

stop(_State) ->
    io:format("My Application Stopped~n").

এখানে, myapp একটি application, যা counter_supervisor কে শুরু করে। start/2 ফাংশনটি application শুরু করে এবং stop/1 ফাংশনটি থামিয়ে দেয়।

Application কল:

1> c(myapp).
{ok,myapp}
2> application:start(myapp).
My Application Started
ok
3> application:stop(myapp).
My Application Stopped
ok

উপসংহার

  • GenServer হল Erlang এর একটি খুবই গুরুত্বপূর্ণ বৈশিষ্ট্য যা নির্দিষ্ট কাজের জন্য প্রক্রিয়া তৈরি এবং পরিচালনা করতে সহায়তা করে। এটি stateful প্রক্রিয়া পরিচালনার জন্য ব্যবহৃত হয়।
  • Supervisor সিস্টেমের একটি গুরুত্বপূর্ণ অংশ যা fault tolerance নিশ্চিত করে। এটি প্রক্রিয়ার জীবনচক্র পরিচালনা করে এবং একটি প্রক্রিয়া ব্যর্থ হলে তা পুনরায় শুরু করে।
  • Application হল একটি প্যাকেজ যা Erlang সিস্টেমের বিভিন্ন অংশের মধ্যে কাজের সমন্বয় ঘটায়। এটি প্রক্রিয়া শুরু এবং থামানোর জন্য ব্যবহৃত হয়।

এই তিনটি ধারণার সাহায্যে Erlang-এ fault-tolerant, scalable, এবং concurrent সিস্টেম তৈরি করা যায়, যা অত্যন্ত শক্তিশালী এবং নির্ভরযোগ্য।

Content added By
Promotion

Are you sure to start over?

Loading...