পাঠ ৫২ · ৫৭-এর মধ্যে · মডিউল ১১
Home / Courses / Computer Networks / ডেটা সেন্টার নেটওয়ার্কিং

ডেটা সেন্টার নেটওয়ার্কিং বেসিকস

Data center networking basics
৭ মিনিট পড়া উন্নত · Advanced Python কোডসহ সম্পূর্ণ বাংলায়

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

  • east-west বনাম north-south ট্রাফিক প্যাটার্নের পার্থক্য ও কেন ডেটা সেন্টারে east-west প্রাধান্য পায়
  • ঐতিহ্যবাহী থ্রি-টিয়ার ট্রি টপোলজি ও এর bottleneck সমস্যা
  • লিফ-স্পাইন (Clos) টপোলজির গঠন ও এর হপ-কাউন্ট গ্যারান্টি
  • Python দিয়ে একটি ছোট্ট লিফ-স্পাইন টপোলজি মডেল করে হপ কাউন্ট যাচাই

১ · east-west বনাম north-south ট্রাফিক

সাধারণ ইন্টারনেট-ফেসিং ট্রাফিক north-southNorth-South Trafficক্লায়েন্ট থেকে ডেটা সেন্টারে (বা উল্টো) আসা-যাওয়া ট্রাফিক — যেমন একজন ব্যবহারকারী একটি ওয়েবসাইটে রিকোয়েস্ট পাঠাচ্ছেন। — একজন ব্যবহারকারী ব্রাউজার থেকে একটি রিকোয়েস্ট পাঠান, ডেটা সেন্টার একটি রেসপন্স ফেরত পাঠায়। কিন্তু আধুনিক ডেটা সেন্টারের ভেতরে সবচেয়ে ভারী ট্রাফিক আসলে east-westEast-West Trafficডেটা সেন্টারের ভেতরে সার্ভার থেকে সার্ভারে যাওয়া ট্রাফিক — যেমন একটি ওয়েব রিকোয়েস্ট অনেকগুলো ব্যাকএন্ড মাইক্রোসার্ভিসে fan out হওয়া। — একটি একক ইউজার রিকোয়েস্ট ডেটা সেন্টারের ভেতরে অনেকগুলো ব্যাকএন্ড মাইক্রোসার্ভিসে fan out হয় (উদাহরণ: একটি ই-কমার্স পেজ লোড হতে ইনভেন্টরি, প্রাইসিং, রিকমেন্ডেশন, ইউজার-প্রোফাইল — এরকম বহু সার্ভিস একে অপরের সাথে কথা বলে), এবং এই সার্ভার-টু-সার্ভার যোগাযোগই নেটওয়ার্কের বেশিরভাগ ট্রাফিক তৈরি করে।

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

একটি নেটওয়ার্ক যা শুধু north-south ট্রাফিকের জন্য ডিজাইন করা (যেমন একটি সাধারণ অফিস নেটওয়ার্ক) ডেটা সেন্টারের ভারী east-west ট্রাফিকের জন্য উপযুক্ত নয় — তাই ডেটা সেন্টার নেটওয়ার্ক টপোলজি সম্পূর্ণ ভিন্নভাবে ডিজাইন করা হয়।

২ · ঐতিহ্যবাহী থ্রি-টিয়ার (Tree) টপোলজি ও এর সীমাবদ্ধতা

পুরনো ডেটা সেন্টার ডিজাইন সাধারণত তিন স্তরের একটি গাছের মতো (tree) কাঠামো ব্যবহার করত — core স্তর (সবচেয়ে উপরে, সবকিছুর কেন্দ্রীয় সংযোগ), aggregation স্তর (মাঝখানে, একাধিক access সুইচকে একত্র করে), এবং access স্তর (সবচেয়ে নিচে, সরাসরি সার্ভারের সাথে সংযুক্ত)। এই কাঠামোর দুটি বড় সমস্যা —

  • Bandwidth bottleneck — গাছের উপরের দিকে যত উঠবেন, লিংকের সংখ্যা কমতে থাকে, তাই সব নিচের ট্রাফিককে অল্প কিছু উপরের লিংক দিয়ে চাপতে হয়।
  • কম fault tolerance — core বা aggregation স্তরের একটি ডিভাইস নষ্ট হলে অনেকগুলো সার্ভার একসাথে বিচ্ছিন্ন হয়ে যেতে পারে।

৩ · লিফ-স্পাইন (Clos) টপোলজি

আধুনিক ডেটা সেন্টার তাই লিফ-স্পাইন (Clos) টপোলজিLeaf-Spine (Clos) Topologyপ্রতিটি leaf সুইচ (সার্ভারের সাথে সংযুক্ত) প্রতিটি spine সুইচের সাথে সংযুক্ত থাকে, কিন্তু কোনো leaf সরাসরি অন্য কোনো leaf-এর সাথে সংযুক্ত থাকে না। ব্যবহার করে — প্রতিটি leaf সুইচ (যেটার সাথে সার্ভার সরাসরি সংযুক্ত) প্রতিটি spine সুইচের সাথে সংযুক্ত থাকে, আর কোনো leaf সুইচ সরাসরি অন্য কোনো leaf-এর সাথে সংযুক্ত থাকে না। এর ফলাফল — যেকোনো দুইটি ভিন্ন leaf-এর মধ্যে পথ সবসময় ঠিক একই সংখ্যক হপের — leaf → spine → leaf, মানে সবসময় ঠিক ২ হপ, কোন জোড়া বেছে নেওয়া হচ্ছে তার উপর নির্ভর করে না।

কেন এটি গুরুত্বপূর্ণ — ECMP

যেহেতু একাধিক spine একসাথে সব leaf-কে সংযুক্ত করে, দুই leaf-এর মধ্যে একাধিক সমান-খরচের (equal-cost) পথ থাকে — এই একাধিক পথে ট্রাফিক ছড়িয়ে দেওয়ার কৌশলকে বলা হয় ECMP (Equal-Cost Multi-Path) রাউটিং। এতে একটি single bottleneck ছাড়াই মোট bandwidth অনেক বেশি হয়, এবং একটি spine নষ্ট হলেও বাকি spine-গুলো দিয়ে যোগাযোগ চালু থাকে — থ্রি-টিয়ার ট্রি-এর তুলনায় অনেক বেশি fault-tolerant।

Python
import itertools

# একটি ছোট্ট লিফ-স্পাইন (Clos) টপোলজি — প্রতিটি leaf প্রতিটি spine-এর সাথে সংযুক্ত
spines = ["spine-1", "spine-2", "spine-3", "spine-4"]
leaves = {
    "leaf-1": list(spines),
    "leaf-2": list(spines),
    "leaf-3": list(spines),
    "leaf-4": list(spines),
    "leaf-5": list(spines),
    "leaf-6": list(spines),
}

def hop_count(leaf_a, leaf_b, leaves):
    """leaf_a -> spine -> leaf_b: দুই ভিন্ন leaf-এর মধ্যে হপ কাউন্ট গণনা করে।"""
    if leaf_a == leaf_b:
        return 0
    shared_spines = set(leaves[leaf_a]) & set(leaves[leaf_b])
    if not shared_spines:
        return None  # কোনো সাধারণ spine নেই -> সংযুক্ত নয়
    return 2  # leaf -> spine -> leaf, ঠিক ২ হপ

print("লিফ-স্পাইন টপোলজি — কয়েকটি leaf-জোড়ার মধ্যে হপ কাউন্ট:\n")
all_exactly_two = True
for leaf_a, leaf_b in itertools.combinations(leaves, 2):
    hops = hop_count(leaf_a, leaf_b, leaves)
    print(f"  {leaf_a} -> {leaf_b}: {hops} হপ")
    if hops != 2:
        all_exactly_two = False

print(f"\nমোট {len(list(itertools.combinations(leaves, 2)))} টি leaf-জোড়া পরীক্ষা করা হলো।")
print("সব জোড়ার হপ কাউন্ট ঠিক ২?", all_exactly_two)

    
spine-1 spine-2 spine-3 leaf-1 leaf-2 leaf-3 leaf-4
প্রতিটি leaf সুইচ প্রতিটি spine সুইচের সাথে সংযুক্ত — কোনো leaf সরাসরি অন্য leaf-এর সাথে সংযুক্ত নয়, তাই যেকোনো দুই leaf-এর মধ্যে পথ সবসময় ঠিক ২ হপ।
লিফ-স্পাইন ডিজাইনের এই পূর্বাভাসযোগ্যতা (predictability) বড় স্কেলের মাইক্রোসার্ভিস আর্কিটেকচারে বিশেষভাবে গুরুত্বপূর্ণ, যেখানে হাজার হাজার সার্ভিস একে অপরের সাথে অবিরাম কথা বলে — এই বিষয়ে আরও বিস্তারিত জানতে System Design কোর্সে দেখুন।
মূল কথা · Key takeaway

ডেটা সেন্টার নেটওয়ার্কিং সাধারণ ইন্টারনেট নেটওয়ার্কিং থেকে আলাদা কারণ এর ট্রাফিক প্যাটার্ন আলাদা — ভারী east-west সার্ভার-টু-সার্ভার যোগাযোগের জন্য লিফ-স্পাইন (Clos) টপোলজি প্রতিটি সার্ভার-জোড়ার মধ্যে সমান, অনুমানযোগ্য ও উচ্চ-bandwidth পথ নিশ্চিত করে — এটিই এই মডিউলের (M11) আধুনিক নেটওয়ার্কিং কৌশলগুলোর (SDN, NFV, CDN) সাথে মিলে বড় স্কেলের নেটওয়ার্ক পরিচালনার ভিত্তি তৈরি করে।

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

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

প্র ০১ একটি ই-কমার্স ওয়েবসাইটের একটিমাত্র পেজ লোড কেন ডেটা সেন্টারের ভেতরে অনেক east-west ট্রাফিক তৈরি করতে পারে?

একটি পেজ লোডের পেছনে সাধারণত একাধিক মাইক্রোসার্ভিস জড়িত থাকে — ইনভেন্টরি চেক, প্রাইসিং ক্যালকুলেশন, ইউজার প্রোফাইল, রিকমেন্ডেশন ইঞ্জিন ইত্যাদি। ইউজারের একটিমাত্র রিকোয়েস্ট ডেটা সেন্টারের ভেতরে এই সব সার্ভিসের মধ্যে বহু সার্ভার-টু-সার্ভার কল-এ পরিণত হয় — এবং এই সব কলই east-west ট্রাফিক।

প্র ০২ থ্রি-টিয়ার ট্রি টপোলজিতে core স্তরের একটি সুইচ নষ্ট হলে কী সমস্যা হতে পারে, যা লিফ-স্পাইনে হয় না?

থ্রি-টিয়ার ট্রিতে core স্তরের ডিভাইস সংখ্যা কম, তাই একটি core সুইচ নষ্ট হলে তার নিচের পুরো শাখার aggregation ও access সুইচ একসাথে বিচ্ছিন্ন হয়ে যেতে পারে — একটি single point of failure। লিফ-স্পাইনে একাধিক spine একসাথে সব leaf-কে সংযুক্ত করে, তাই একটি spine নষ্ট হলেও বাকি spine-গুলো দিয়ে সব leaf একে অপরের সাথে সংযুক্ত থাকতে পারে।

প্র ০৩ ECMP-এর সুবিধা শুধু bandwidth বাড়ানো, নাকি এর সাথে fault tolerance-এরও সম্পর্ক আছে?

দুটোই। একাধিক সমান-খরচের পথে ট্রাফিক ছড়িয়ে দেওয়ার ফলে মোট bandwidth বাড়ে, কিন্তু একই সাথে — একটি পথ (যেমন একটি spine) ব্যর্থ হলে ট্রাফিক স্বয়ংক্রিয়ভাবে বাকি সুস্থ পথে সরে যেতে পারে, তাই ECMP fault tolerance-ও বাড়ায়, শুধু bandwidth অপ্টিমাইজেশন নয়।

অনুশীলন

  1. চিন্তা করুন: কোড সেলে spines লিস্টে আরও একটি spine ("spine-5") যোগ করুন এবং Run চেপে দেখুন হপ কাউন্টের ফলাফল বদলায় কি না।

    হপ কাউন্ট (২) বদলাবে না — কারণ লিফ-স্পাইন টপোলজিতে যত spine-ই থাকুক না কেন, প্রতিটি leaf প্রতিটি spine-এর সাথে সংযুক্ত থাকলে যেকোনো দুই leaf-এর মধ্যে পথ সবসময় leaf → spine → leaf, অর্থাৎ ঠিক ২ হপ-ই থাকবে। বেশি spine যোগ করলে শুধু মোট bandwidth ও redundancy বাড়ে, হপ কাউন্ট নয়।

  2. পরীক্ষা করুন: hop_count ফাংশনে এমন একটি leaf বানান যার leaves ডিকশনারিতে কোনো spine যুক্ত নেই (খালি লিস্ট) এবং দেখুন ফলাফল কী আসে।

    সেই leaf-এর সাথে অন্য কোনো leaf-এর কোনো সাধারণ (shared) spine না থাকায় shared_spines খালি সেট হবে, এবং ফাংশনটি None ফেরত দেবে — অর্থাৎ এই leaf বাকি টপোলজি থেকে সম্পূর্ণ বিচ্ছিন্ন, যা বাস্তবে একটি ভুল কনফিগারেশন নির্দেশ করে।

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

আগের পাঠ
CDN ও এজ নেটওয়ার্কিং