পাঠ ৪৩ · ৫৭-এর মধ্যে · মডিউল ৯
Home / Courses / Computer Networks / কিউয়িং থিওরি

কিউয়িং থিওরি বেসিকস

Queuing theory basics
৮ মিনিট পড়া মধ্যবর্তী · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • Utilization (ρ) কী এবং এটি কীভাবে গণনা করা হয়
  • M/M/1 কিউ মডেলের L (গড় সংখ্যা) ও W (গড় অপেক্ষার সময়) সূত্র
  • একটি সম্পূর্ণ যাচাইকৃত উদাহরণ হাতে-কলমে ও Python কোডে গণনা করা
  • কেন ρ ১-এর কাছাকাছি গেলে ডিলে অ-রৈখিকভাবে বিস্ফোরিত হয় — নেটওয়ার্ক অপারেটররা কেন লিংক পুরোপুরি লোড করে চালান না

১ · কিউ কেন তৈরি হয় ও Utilization (ρ)

একটি রাউটার প্রতি সেকেন্ডে গড়ে μ (mu) সংখ্যক প্যাকেট প্রসেস/ফরওয়ার্ড করতে পারে — এটি তার সার্ভিস রেট। কিন্তু প্যাকেট আসে গড়ে প্রতি সেকেন্ডে λ (lambda) সংখ্যক হারে — এটি আগমন হার (arrival rate)। যদি মুহূর্তে মুহূর্তে আগমনের হার সাময়িকভাবে সার্ভিস রেট ছাড়িয়ে যায় (বাস্তবে ট্রাফিক কখনোই একদম মসৃণভাবে আসে না, বার্স্টে আসে), অতিরিক্ত প্যাকেট একটি বাফারে কিউ করে অপেক্ষা করে।

এই সিস্টেম কতটা "ব্যস্ত" তা মাপে utilization —

$$\rho = \frac{\lambda}{\mu}$$

ρ সবসময় ০ ও ১-এর মধ্যে থাকা উচিত একটি স্থিতিশীল (stable) সিস্টেমের জন্য (ρ ≥ ১ মানে কিউ চিরতরে বাড়তে থাকবে, কখনো খালি হবে না)। ρ = ০.৫ মানে রাউটার তার ক্ষমতার অর্ধেক ব্যবহার করছে; ρ = ০.৯৫ মানে প্রায় পুরো ক্ষমতায় চলছে — খুবই সামান্য হেডরুম বাকি।

২ · M/M/1 কিউ মডেল

সবচেয়ে সরল, প্রমিত কিউয়িং মডেল হলো M/M/1 (Markovian আগমন, Markovian সার্ভিস টাইম, ১টি সার্ভার) — এটি ধরে নেয় আগমন ও সার্ভিস টাইম উভয়ই র‍্যান্ডম কিন্তু পরিসংখ্যানগতভাবে সুনির্দিষ্ট বণ্টন মেনে চলে। এই মডেল থেকে দুটি গুরুত্বপূর্ণ সূত্র পাওয়া যায় —

  • সিস্টেমে গড় সংখ্যা (L) — কিউতে অপেক্ষমাণ + বর্তমানে সার্ভিস পাচ্ছে এমন মোট গড় প্যাকেট সংখ্যা: $$L = \frac{\rho}{1-\rho}$$
  • গড় অপেক্ষার সময় (W) — একটি প্যাকেট সিস্টেমে গড়ে কত সময় কাটায় (কিউ + সার্ভিস): $$W = \frac{1}{\mu - \lambda}$$

এই দুটি সূত্র Little's Law ($L = \lambda W$) দিয়ে পরস্পর সম্পর্কিত — অর্থাৎ $W = L/\lambda$ দিয়েও W গণনা করা যায়, এবং দুই পদ্ধতির ফলাফল সবসময় একই হওয়া উচিত (এটি নিচের কোডে ক্রস-চেক করা হয়েছে)।

৩ · যাচাইকৃত উদাহরণ ও Non-linear Blowup

ধরা যাক একটি রাউটারে λ=৮ প্যাকেট/সেকেন্ড আসে এবং μ=১০ প্যাকেট/সেকেন্ড প্রসেস হতে পারে। তাহলে ρ=০.৮ (৮০% ইউটিলাইজেশন), L=৪টি প্যাকেট সিস্টেমে গড়ে থাকে, এবং W=০.৫ সেকেন্ড গড় অপেক্ষার সময়। নিচের কোড এই মানগুলো সরাসরি সূত্র থেকে গণনা করে, এবং আরও দুটি ρ মান (০.৫ ও ০.৯৫) দিয়ে দেখায় ρ যত ১-এর কাছাকাছি যায়, W ততই দ্রুতগতিতে (অ-রৈখিকভাবে) বেড়ে যায় — মাত্র ρ=০.৫ থেকে ০.৯৫-এ যাওয়া (মাত্র ৯০% বেশি ইউটিলাইজেশন) W-কে ১০ গুণ বাড়িয়ে দেয়।

Python
# M/M/1 কিউ মডেল -- utilization, average number, average wait
def mm1_metrics(lam, mu):
    """rho = lambda/mu, L = rho/(1-rho), W = 1/(mu-lambda)"""
    rho = lam / mu
    L = rho / (1 - rho)
    W = 1 / (mu - lam)
    return rho, L, W

# --- যাচাইকৃত মূল উদাহরণ: lambda=8, mu=10 ---
lam1, mu1 = 8, 10
rho1, L1, W1 = mm1_metrics(lam1, mu1)
print(f"lambda={lam1}, mu={mu1}  ->  rho={rho1:.2f}, L={L1:.2f} প্যাকেট, W={W1:.3f} সেকেন্ড")
print(f"   ক্রস-চেক (Little's Law): L/lambda = {L1/lam1:.3f}  (W-এর সমান হওয়া উচিত)")

# --- একই mu রেখে ভিন্ন ভিন্ন rho দেখানো: 0.5, 0.8 (উপরের), 0.95 ---
print("\nrho বাড়ার সাথে সাথে W কীভাবে অ-রৈখিকভাবে বাড়ে:")
for lam, mu in [(5, 10), (8, 10), (9.5, 10)]:
    rho, L, W = mm1_metrics(lam, mu)
    print(f"  rho={rho:.2f}  ->  L={L:5.2f} প্যাকেট,  W={W:5.3f} সেকেন্ড")

rho_low, _, W_low = mm1_metrics(5, 10)
rho_high, _, W_high = mm1_metrics(9.5, 10)
print(f"\nrho মাত্র {rho_low:.2f} থেকে {rho_high:.2f}-এ (~{rho_high/rho_low:.1f}x) গেলে,")
print(f"W বাড়ে {W_low:.2f}s থেকে {W_high:.2f}s -- অর্থাৎ ~{W_high/W_low:.1f}x")

    
মূল অন্তর্দৃষ্টি

ইউটিলাইজেশন দ্বিগুণ হওয়া মানে ডিলে দ্বিগুণ হওয়া নয় — সূত্রের হর $(1-\rho)$ বা $(\mu-\lambda)$ ρ যখন ১-এর কাছাকাছি যায় তখন প্রায় শূন্যের কাছাকাছি চলে যায়, ফলে ডিলে তীব্রভাবে বেড়ে যায়। এই কারণেই নেটওয়ার্ক অপারেটররা ইচ্ছাকৃতভাবে লিংক ইউটিলাইজেশন ৭০-৮০%-এর নিচে রাখার চেষ্টা করেন — বার্স্ট ট্রাফিকের জন্য হেডরুম রাখতে, লিংককে "পুরোপুরি লোড" করে চালানোর বদলে।

লক্ষ্য করুন — কোডে ρ=০.৯৫-এর জন্য λ=৯.৫ ব্যবহার করা হয়েছে (μ=১০ অপরিবর্তিত রেখে), যাতে λ/μ ঠিক ০.৯৫ হয়। এভাবে μ স্থির রেখে শুধু λ পরিবর্তন করে বিভিন্ন ρ মান তৈরি করা একটি সাধারণ, স্বচ্ছ পদ্ধতি এই তুলনা দেখানোর জন্য।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ ইউটিলাইজেশন ৫০% থেকে ৯৫%-এ গেলে (মাত্র প্রায় দ্বিগুণ) গড় অপেক্ষার সময় ১০ গুণ বেড়ে যায় কেন?

কারণ W-এর সূত্র $W = 1/(\mu-\lambda)$-এর হর ρ যত ১-এর কাছে যায় ততই শূন্যের কাছাকাছি চলে যায় — একটি ছোট সংখ্যা দিয়ে ভাগ করলে ফলাফল বিশাল হয়ে যায়। এটি একটি ক্লাসিক non-linear (asymptotic) সম্পর্ক, যেখানে ইনপুটের সামান্য পরিবর্তন আউটপুটে বিশাল পরিবর্তন আনে যখন সিস্টেম তার সীমার কাছাকাছি চলে যায়।

প্র ০২ একজন নেটওয়ার্ক অপারেটর কেন ইচ্ছাকৃতভাবে তার লিংক ১০০% ক্যাপাসিটিতে না চালিয়ে ৭০-৮০%-এ রাখেন?

কারণ বাস্তব ট্রাফিক কখনোই একদম মসৃণ, স্থির হারে আসে না — এটি বার্স্টি (হঠাৎ বেড়ে যায়, হঠাৎ কমে)। যদি গড় ইউটিলাইজেশনই ৯৫-১০০%-এর কাছাকাছি রাখা হয়, একটি সাধারণ ট্রাফিক বার্স্টও ρ-কে ১-এর উপরে ঠেলে দিতে পারে, যেখানে কিউ ডিলে তাত্ত্বিকভাবে অসীমের দিকে ছুটবে। ৭০-৮০%-এ রাখলে বার্স্ট সামলানোর মতো হেডরুম থাকে।

প্র ০৩ এই কিউয়িং গণিতের সাথে একটি DoS (Denial of Service) আক্রমণের কী সম্পর্ক থাকতে পারে (M10-এ বিস্তারিত)?

একটি DoS আক্রমণ মূলত λ (আগমন হার) কৃত্রিমভাবে বিশাল করে তোলে — টার্গেটের μ (সার্ভিস ক্ষমতা)-এর চেয়ে বহুগুণ বেশি অনুরোধ পাঠিয়ে। এতে ρ = λ/μ দ্রুত ১-এর উপরে চলে যায়, এবং উপরের গণিত অনুযায়ী কিউ ডিলে/অপেক্ষার সময় অনিয়ন্ত্রিতভাবে বেড়ে যায়, বৈধ ব্যবহারকারীদের জন্য সার্ভিস কার্যত অব্যবহারযোগ্য হয়ে পড়ে — এটিই M10/L45-এ আলোচিত থ্রেট মডেলের একটি সরাসরি গাণিতিক ব্যাখ্যা।

অনুশীলন

  1. চিন্তা করুন: আপনার বাসার রাউটারে একসাথে অনেক ডিভাইস (ফোন, ল্যাপটপ, স্মার্ট টিভি) ভারী ডাউনলোড চালালে ইন্টারনেট "স্লো" মনে হয় কেন — এটি কি ব্যান্ডউইথ কমে যাওয়া, নাকি কিউয়িং ডিলে বেড়ে যাওয়া?

    এটি মূলত কিউয়িং ডিলে বেড়ে যাওয়া — রাউটারের আপলিংক ব্যান্ডউইথ (μ, সার্ভিস ক্ষমতা) অপরিবর্তিত থাকলেও, অনেক ডিভাইস একসাথে ডেটা পাঠালে λ (আগমন হার) বেড়ে যায়, ρ বেড়ে যায়, এবং প্রতিটি প্যাকেটকে বাফারে বেশি সময় অপেক্ষা করতে হয় — এটিই ব্যবহারকারীর কাছে "স্লো ইন্টারনেট" হিসেবে অনুভূত হয়, যদিও ব্যান্ডউইথ নিজে কমেনি।

  2. পরীক্ষা করুন: উপরের কোড সেলে mu1-এর মান ১০ থেকে বাড়িয়ে ২০ করুন (λ=৮ অপরিবর্তিত রেখে) এবং দেখুন ρ ও W কীভাবে বদলায়।

    μ=২০ হলে ρ = ৮/২০ = ০.৪ (আগের ০.৮ থেকে অর্ধেক), এবং W = ১/(২০-৮) = ১/১২ ≈ ০.০৮৩ সেকেন্ড — আগের ০.৫ সেকেন্ডের তুলনায় প্রায় ৬ গুণ কম। এটি দেখায় সার্ভিস ক্ষমতা (μ) বাড়ানো (যেমন দ্রুত হার্ডওয়্যার, বেশি ব্যান্ডউইথ) কতটা নাটকীয়ভাবে অপেক্ষার সময় কমাতে পারে যখন সিস্টেম আগে থেকে উচ্চ-ইউটিলাইজেশনে ছিল।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

আগের পাঠ
লেটেন্সি, ব্যান্ডউইথ, থ্রুপুট ও জিটার