Process Restart Strategies (One-for-one, One-for-all)

Supervision এবং Fault Tolerance (ফল্ট টলারেন্স) - এরল্যাং (Erlang) - Computer Programming

306

Erlang-এ Process Restart Strategies: One-for-one, One-for-all

Erlang-এ, Fault Tolerance সিস্টেমের জন্য প্রক্রিয়া পুনরুদ্ধার বা process restart একটি অত্যন্ত গুরুত্বপূর্ণ বিষয়। যখন একটি প্রক্রিয়া ব্যর্থ হয়, তখন কীভাবে সিস্টেমটি পুনরায় তা চালু করবে, সে ব্যাপারে সিদ্ধান্ত নিতে Supervisor এর ভূমিকা থাকে। Erlang এ প্রক্রিয়া পুনরুদ্ধার করার জন্য কয়েকটি restart strategy ব্যবহার করা হয়, যার মধ্যে one-for-one, one-for-all, এবং অন্যান্য কৌশলগুলি রয়েছে।

এখানে আমরা one-for-one এবং one-for-all কৌশলগুলির বিস্তারিত আলোচনা করব।


1. One-for-one Restart Strategy

One-for-one একটি প্রচলিত restart strategy, যেখানে যদি একটি child process ব্যর্থ হয়, তবে শুধুমাত্র সেই child process-ই পুনরায় চালু হবে। অন্যান্য child processes অবিচলিত থাকবে এবং তাদের কার্যক্রম অব্যাহত থাকবে। এটি সবচেয়ে সাধারণ এবং সাধারণত ছোট বা স্বাধীন প্রক্রিয়া গ্রুপগুলোর জন্য ব্যবহৃত হয়।

One-for-one Strategy এর আচরণ:

  • একটি child process ব্যর্থ হলে, শুধুমাত্র সেই child process পুনরায় শুরু হবে।
  • অন্য কোন child process এর কার্যক্রম বা স্থিতি পরিবর্তিত হবে না।
  • এটি ব্যর্থ প্রক্রিয়াটির পুনরুদ্ধারে দ্রুত সহায়তা করে এবং অন্যান্য প্রক্রিয়া অব্যাহত রাখে।

One-for-one এর উদাহরণ:

-module(supervisor_example).
-behaviour(supervisor).

-export([start/0, init/1]).

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

init([]) ->
    Children = [
        {child_process1, {child_process1, start_link, []}, permanent, 5000, worker, [child_process1]},
        {child_process2, {child_process2, start_link, []}, permanent, 5000, worker, [child_process2]}
    ],
    {ok, {{one_for_one, 5, 10}, Children}}.

এখানে:

  • one_for_one স্ট্র্যাটেজি ব্যবহার করা হয়েছে, যা মানে যে একটি child process ব্যর্থ হলে শুধু সেই child process পুনরায় শুরু হবে, অন্যান্যগুলি সচল থাকবে।
  • permanent মানে যে child process যদি ব্যর্থ হয়, তখন সেটি পুনরায় চালু হবে।

2. One-for-all Restart Strategy

One-for-all এর মাধ্যমে, যখন একটি child process ব্যর্থ হয়, তখন সমস্ত child process পুনরায় শুরু হবে। এটি একটি শক্তিশালী কৌশল, যখন child processes একে অপরের সাথে সম্পর্কিত থাকে এবং একটি প্রক্রিয়া ব্যর্থ হলে পুরো সিস্টেমটি পুনরায় শুরু করা প্রয়োজন।

One-for-all Strategy এর আচরণ:

  • একটি child process ব্যর্থ হলে, সমস্ত child processes পুনরায় শুরু হবে।
  • এটি ব্যবহৃত হয় যখন একাধিক প্রক্রিয়া একে অপরের উপর নির্ভরশীল এবং তাদের সঠিক কার্যকারিতা নিশ্চিত করতে সকলকে একসাথে পুনরায় চালু করতে হয়।
  • এটি একটি বড় বা মিশ্র প্রক্রিয়ার জন্য উপযুক্ত, যেখানে যদি একটি প্রক্রিয়া ব্যর্থ হয়, তবে সিস্টেমের অন্যান্য অংশগুলিও পুনরুদ্ধার প্রয়োজন।

One-for-all এর উদাহরণ:

-module(supervisor_example).
-behaviour(supervisor).

-export([start/0, init/1]).

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

init([]) ->
    Children = [
        {child_process1, {child_process1, start_link, []}, permanent, 5000, worker, [child_process1]},
        {child_process2, {child_process2, start_link, []}, permanent, 5000, worker, [child_process2]}
    ],
    {ok, {{one_for_all, 5, 10}, Children}}.

এখানে:

  • one_for_all স্ট্র্যাটেজি ব্যবহার করা হয়েছে, যার ফলে যদি কোনো একটি child process ব্যর্থ হয়, তবে সবগুলি child process পুনরায় শুরু হবে।
  • এটি সাধারণত তখন ব্যবহৃত হয় যখন child processes একে অপরের সাথে সম্পর্কিত থাকে এবং একটি ব্যর্থ প্রক্রিয়া পুরো সিস্টেমের স্থিতি প্রভাবিত করতে পারে।

3. Other Restart Strategies in Erlang

Erlang-এ অন্যান্য restart strategiesও রয়েছে, যেগুলি নির্দিষ্ট পরিস্থিতিতে ব্যবহার করা হয়।

Rest-for-one:

  • Rest-for-one স্ট্র্যাটেজিতে, যখন একটি child process ব্যর্থ হয়, তখন তার পরবর্তী child processes পুনরায় চালু হয়, কিন্তু পূর্ববর্তী child process গুলি অপরিবর্তিত থাকে।
  • এটি ব্যবহৃত হয় যখন কিছু child processes একে অপরের উপরে নির্ভরশীল থাকে এবং কিছু অন্যদের থেকে স্বাধীন থাকে।

Temporary Restart Strategy:

  • যখন একটি child process এর ফাংশন temporary বা অস্থায়ী হয়, তখন সেটি শুধুমাত্র পুনরায় চালু হবে যদি তা ব্যর্থ হয়।
  • এটি সাধারণত হালকা এবং কম গুরুত্বপূর্ণ child processes এর জন্য ব্যবহৃত হয়।

4. Supervisor Trees এবং Restart Strategies এর গুরুত্ব

  • Fault Isolation: যখন একাধিক child process একটি supervisor এর অধীনে থাকে, তখন supervisor trees ব্যবহৃত হয় যাতে একটি ব্যর্থ প্রক্রিয়া অন্যদের প্রভাবিত না করে।
  • System Recovery: Restart strategies যেমন one-for-one, one-for-all সিস্টেমের পুনরুদ্ধার প্রক্রিয়া সুনির্দিষ্টভাবে নিয়ন্ত্রণ করে এবং ব্যর্থতা মোকাবেলার জন্য সুপারভাইজারকে সহায়তা করে।
  • Stability: Fault tolerance নিশ্চিত করতে supervisors একটি অপরিহার্য ভূমিকা পালন করে। যদি একটি প্রক্রিয়া ব্যর্থ হয়, তবে তার উপযুক্ত পুনরুদ্ধার কৌশল (যেমন restart) ব্যবস্থা করা হয়।

উপসংহার

Erlang এ process restart strategies যেমন one-for-one, one-for-all ইত্যাদি Fault Tolerance নিশ্চিত করতে এবং সিস্টেমের স্থিতিস্থাপকতা বৃদ্ধি করতে ব্যবহৃত হয়। One-for-one ব্যবহৃত হয় যখন একটি ব্যর্থ প্রক্রিয়ার জন্য শুধুমাত্র সেই প্রক্রিয়া পুনরুদ্ধার করতে হয়, এবং One-for-all ব্যবহৃত হয় যখন একাধিক প্রক্রিয়া পরস্পর নির্ভরশীল এবং তাদের পুনরুদ্ধার করা প্রয়োজন। Erlang এর supervisor trees এই ফাংশনগুলিকে কার্যকরভাবে বাস্তবায়িত করে, যা সিস্টেমের স্থিতিস্থাপকতা এবং নির্ভরযোগ্যতা নিশ্চিত করে।

Content added By
Promotion

Are you sure to start over?

Loading...