পাঠ ১৪ · ৫৭-এর মধ্যে · মডিউল ৪
Home / Courses / Cloud Computing & DevOps / লোড ব্যালেন্সার ও CDN

ক্লাউডে লোড ব্যালেন্সার ও CDN

Cloud load balancers & CDN
৭ মিনিট পড়া শুরু · Beginner Python কোডসহ সম্পূর্ণ বাংলায়

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

  • ক্লাউড ম্যানেজড লোড ব্যালেন্সার সিস্টেম-ডিজাইনের লোড ব্যালেন্সিং ধারণাকে কীভাবে একটি সম্পূর্ণ ম্যানেজড সার্ভিসে রূপান্তর করে
  • Application Load Balancer (L7) ও Network Load Balancer (L4)-এর পার্থক্য
  • ক্লাউড-ইন্টিগ্রেটেড CDN কীভাবে স্ট্যাটিক অ্যাসেট দ্রুত সার্ভ করে
  • Python দিয়ে path-based রাউটিং সিমুলেশন

১ · ক্লাউড লোড ব্যালেন্সার — একটি সম্পূর্ণ ম্যানেজড সার্ভিস

ক্লাউড লোড ব্যালেন্সারCloud Load Balancerএকটি ম্যানেজড সার্ভিস যা একাধিক availability zone/region জুড়ে ইনস্ট্যান্সের মধ্যে ট্রাফিক বিতরণ করে। সিস্টেম ডিজাইন কোর্সে আলোচিত লোড ব্যালেন্সিং ধারণারই একটি পূর্ণাঙ্গ ম্যানেজড সংস্করণ — নিজে সফটওয়্যার ইনস্টল, প্যাচ বা স্কেল করতে হয় না। এর একটি গুরুত্বপূর্ণ ক্লাউড-নির্দিষ্ট বৈশিষ্ট্য হলো এটি একাধিক availability zone এমনকি একাধিক region জুড়ে ইনস্ট্যান্স পুলে ট্রাফিক বিতরণ করতে পারে — একটি পুরো zone ডাউন হলেও ট্রাফিক স্বয়ংক্রিয়ভাবে বাকি সুস্থ zone-এ চলে যায়।

লোড ব্যালেন্সার ও অটো-স্কেলিং গ্রুপ একসাথে কাজ করে

L06-এ দেখা অটো-স্কেলিং গ্রুপ (ASG) যখন ইনস্ট্যান্স যোগ/বাদ দেয়, লোড ব্যালেন্সার ক্রমাগত সেই পরিবর্তনের সাথে নিজেকে মানিয়ে নেয় — নতুন ইনস্ট্যান্স স্বাস্থ্য-পরীক্ষা পাস করার পরই ট্রাফিক পাওয়া শুরু করে, বাদ দেওয়া ইনস্ট্যান্স অবিলম্বে রোটেশন থেকে সরিয়ে দেওয়া হয়। এটি ক্লাউডের মূল প্যাটার্ন — LB ও ASG দুটো আলাদা সার্ভিস, কিন্তু একসাথে সিমলেসলি কাজ করে।

২ · Application Load Balancer বনাম Network Load Balancer

Application Load Balancer (L7)
HTTP-সচেতন — URL পাথ, হেডার বা হোস্টনেম অনুযায়ী রিকোয়েস্ট ভিন্ন ভিন্ন ব্যাকএন্ড সার্ভিসে রুট করতে পারে।
Network Load Balancer (L4)
raw TCP/UDP লেভেলে কাজ করে — HTTP কন্টেন্ট দেখে না, তাই অনেক বেশি থ্রুপুট ও কম ল্যাটেন্সি দেয়।

সাধারণ ওয়েব অ্যাপ্লিকেশনের জন্য ALB-এর path-based রাউটিং ক্ষমতা প্রায়ই প্রয়োজনীয়, কিন্তু অতি উচ্চ-থ্রুপুট, ল্যাটেন্সি-সংবেদনশীল ওয়ার্কলোডের (যেমন গেমিং সার্ভার) জন্য NLB বেছে নেওয়া হয়।

৩ · ক্লাউডে CDN — ইন্টিগ্রেটেড এজ ক্যাশিং

CDNContent Delivery Networkবিশ্বজুড়ে ছড়ানো এজ সার্ভারের নেটওয়ার্ক যা কন্টেন্ট ব্যবহারকারীর কাছাকাছি ক্যাশ করে দ্রুত ডেলিভার করে। -এর মূল ধারণা System Design কোর্সে আলোচিত — এখানে ফোকাস অপারেশনাল দিকে। বেশিরভাগ প্রধান ক্লাউড প্রোভাইডার তাদের নিজস্ব স্টোরেজ ও কম্পিউট সার্ভিসের সাথে টাইট-ইন্টিগ্রেটেড একটি CDN সার্ভিস দেয় — যেমন অবজেক্ট স্টোরেজে (L09) রাখা স্ট্যাটিক অ্যাসেট (ছবি, CSS, JS) সরাসরি একটি CDN-এর মাধ্যমে এজ-ক্যাশ করা যায়, প্রায়ই মাত্র কয়েক ক্লিক বা কনফিগারেশনের কয়েকটি লাইনে — আলাদা কোনো তৃতীয়-পক্ষ CDN সেটআপ করার প্রয়োজন হয় না।

৪ · সিমুলেশন — Path-based রাউটিং

ALB-এর path-based রাউটিং আচরণ একটি ছোট Python ফাংশন দিয়ে সিমুলেট করা যায় — একটি URL পাথ প্যাটার্ন থেকে ব্যাকএন্ড সার্ভিসে ম্যাপিং, প্রথম ম্যাচ জেতে (first match wins), কোনো ম্যাচ না হলে ডিফল্ট ব্যাকএন্ডে যায়।

Python
# ALB-স্টাইল path-based রাউটিং সিমুলেশন
routing_rules = {
    "/api/":    "backend-api-service",
    "/images/": "backend-static-service",
    "/admin/":  "backend-admin-service",
}

def route_request(path, rules):
    for prefix, service in rules.items():
        if path.startswith(prefix):
            return service
    return "default-backend-service"   # কোনো রুল ম্যাচ না করলে ডিফল্ট

test_paths = ["/api/users/42", "/images/logo.png", "/admin/dashboard", "/about"]

for path in test_paths:
    print(f"{path:24} -> {route_request(path, routing_rules)}")

    
লক্ষ্য করুন /about কোনো রুলের সাথে ম্যাচ করেনি, তাই এটি ডিফল্ট ব্যাকএন্ডে গেছে — একটি বাস্তব ALB-তে এই ডিফল্ট রুল সাধারণত প্রধান ওয়েব অ্যাপ্লিকেশনের দিকে নির্দেশ করে, আর নির্দিষ্ট পাথ প্যাটার্নগুলো বিশেষায়িত মাইক্রোসার্ভিসে রুট করে।

৫ · System Design কোর্সের সাথে সম্পর্ক

লোড ব্যালেন্সিং অ্যালগরিদম (round-robin, least-connections) এবং CDN-এর ক্যাশিং কৌশলের গভীর আলোচনা System Design কোর্সে আছে। এই পাঠ শুধু দেখিয়েছে কীভাবে ক্লাউডে এই ধারণাগুলো একটি বোতাম-চাপা, সম্পূর্ণ ম্যানেজড সার্ভিস হিসেবে বাস্তবায়িত হয় — DevOps ইঞ্জিনিয়ারের দৃষ্টিকোণ থেকে, কীভাবে সেগুলো সেটআপ ও অপারেট করতে হয়।

মূল কথা · Key takeaway

ক্লাউড লোড ব্যালেন্সার L7/L4 উভয় স্তরে ম্যানেজড অপশন দেয় এবং অটো-স্কেলিং গ্রুপের সাথে সিমলেসলি কাজ করে, আর ইন্টিগ্রেটেড CDN কয়েক ক্লিকে স্ট্যাটিক কন্টেন্ট বিশ্বব্যাপী দ্রুত ডেলিভার করে — উভয়ই সিস্টেম ডিজাইনের ধারণাকে ক্লাউডে বাস্তবায়নের অপারেশনাল সহজতা প্রদর্শন করে।

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

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

প্র ০১ একটি মাইক্রোসার্ভিস আর্কিটেকচারের জন্য ALB কেন NLB-এর চেয়ে বেশি উপযুক্ত হতে পারে?

মাইক্রোসার্ভিসে সাধারণত একই ডোমেইনের নিচে বিভিন্ন পাথ (/users, /orders ইত্যাদি) বিভিন্ন সার্ভিসে রুট করতে হয় — এটি একটি L7 বৈশিষ্ট্য, যা শুধু ALB-ই দিতে পারে। NLB HTTP কন্টেন্ট দেখে না, তাই পাথ-ভিত্তিক রাউটিং করতে পারে না।

প্র ০২ একটি লোড ব্যালেন্সার একাধিক availability zone জুড়ে কাজ করলে সেটি কীভাবে একটি ডিজাস্টার-রিকভারি সুবিধা দেয় (L12-এর সাথে সম্পর্কিত)?

যদি একটি zone-এ কোনো বিপর্যয় ঘটে (পাওয়ার আউটেজ, হার্ডওয়্যার ফেইলিওর), লোড ব্যালেন্সার স্বয়ংক্রিয়ভাবে সেই zone-এর অসুস্থ ইনস্ট্যান্সে ট্রাফিক পাঠানো বন্ধ করে বাকি সুস্থ zone-এ পাঠায় — এটি কার্যকরভাবে একটি স্বয়ংক্রিয় RTO-হ্রাসকারী প্রক্রিয়া, যেখানে ম্যানুয়াল ফেইলওভারের প্রয়োজন হয় না।

প্র ০৩ স্ট্যাটিক অ্যাসেট (ছবি, CSS) সরাসরি অ্যাপ সার্ভার থেকে সার্ভ না করে CDN দিয়ে সার্ভ করলে অ্যাপ সার্ভারের উপর কী প্রভাব পড়ে?

অ্যাপ সার্ভার (এবং তার অটো-স্কেলিং গ্রুপ, লোড ব্যালেন্সার) শুধু ডাইনামিক, ব্যক্তিগতকৃত রিকোয়েস্ট হ্যান্ডেল করার জন্য মুক্ত থাকে — স্ট্যাটিক ট্রাফিকের বিশাল অংশ CDN এজ সার্ভারেই সমাধান হয়ে যায়, কখনো অ্যাপ সার্ভার পর্যন্ত পৌঁছায় না। এর ফলে কম ইনস্ট্যান্স দিয়েই একই লোড সামলানো যায় — সরাসরি খরচ সাশ্রয়।

অনুশীলন

  1. চিন্তা করুন: আপনার পরিচিত একটি ওয়েবসাইটের জন্য কোন কোন URL পাথ আলাদা ব্যাকএন্ড সার্ভিসে রুট হতে পারে বলে মনে হয় (যেমন /checkout বনাম /blog)।

    উদাহরণ: একটি ই-কমার্স সাইটে /checkout ও /payment হয়তো একটি বিশেষায়িত, অতিরিক্ত-সুরক্ষিত পেমেন্ট সার্ভিসে যায়, আর /blog একটি হালকা কন্টেন্ট-সার্ভিং সার্ভিসে যায় — দুটোর স্কেলিং, নিরাপত্তা প্রয়োজনীয়তা সম্পূর্ণ আলাদা, তাই আলাদা ব্যাকএন্ডে ভাগ করা ব্যবহারিক।

  2. পরীক্ষা করুন: উপরের কোড সেলের routing_rules-এ একটি নতুন এন্ট্রি "/checkout/": "backend-payment-service" যোগ করুন এবং test_paths-এ /checkout/cart যোগ করে ফলাফল দেখুন।

    /checkout/cart পাথটি "/checkout/" প্রিফিক্সের সাথে ম্যাচ করবে এবং backend-payment-service রিটার্ন করবে — এটি দেখায় নতুন রুল যোগ করা কতটা সহজ, এবং ডিকশনারির ক্রম (dict ordering, Python 3.7+ এ ইনসার্শন অর্ডার সংরক্ষিত থাকে) কীভাবে "প্রথম ম্যাচ জেতে" আচরণ নিয়ন্ত্রণ করে।

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

আগের পাঠ
VPC ও সাবনেট ডিজাইন