স্কেলিং
একাই একশো নাকি দশে মিলে করি কাজ?
মন্টু মিয়াঁ যখন প্রথম 'বিড়ালটিউব' বানালেন, তখন তার হাতের কাছে থাকা বহু পুরোনো, ধুলোবালি জমা একটা ল্যাপটপকেই সার্ভার বানিয়ে ফেললেন। ভাবলেন, "শুরুতে আর কতজনই বা আসবে!"
কিন্তু অ্যাপ পাবলিশ করার কিছুদিন পরেই মন্টু বুঝলেন, তিনি আসলে মৌচাকে ঢিল মেরেছেন। ইউজাররা কমপ্লেইন করা শুরু করল, অ্যাপ নাকি কচ্ছপের গতিতে চলে! চেক করে দেখলেন, মাত্র ১০০ জন ইউজার হ্যান্ডেল করতে গিয়েই তার ল্যাপটপের ফ্যান হেলিকপ্টারের মতো শব্দ করছে। র্যাম আর সিপিইউ ইউসেজ (Usage) লাল দাগে, অর্থাৎ ১০০%-এ ঠেকেছে। কিছুক্ষণ পরপরই বেচারা ল্যাপটপ জ্ঞান হারাচ্ছে (অ্যাপ ক্র্যাশ করছে)।
মন্টু মিয়াঁ আর দেরি করলেন না। সোজা বাইক নিয়ে ছুটলেন আইডিবি (IDB) ভবনে। পকেটের জমানো টাকা দিয়ে বিশাল কনফিগারেশনের এক 'দানব' পিসি কিনে আনলেন। পুরোনো ল্যাপটপ বাদ দিয়ে নতুন এই সুপার কম্পিউটারে অ্যাপ হোস্ট করলেন। যাক বাবা! এবার ৫০০-কেন, ১০০০ ইউজার আসলেও সমস্যা নেই।

কিন্তু মন্টু মিয়াঁর সুখ বেশিদিন সইল না। বিড়ালের ভিডিওর যা ডিমান্ড! অল্প কদিনেই ইউজার ১০০০ ছাড়িয়ে গেল। ভিডিও আপলোড, লাইক, কমেন্টের বন্যায় তার সেই নতুন দামী কম্পিউটারও হাঁপিয়ে উঠল।
মন্টু মিয়াঁ মহাচিন্তায় পড়ে গেলেন। "আর কত বড় কম্পিউটার কিনব আমি? সুপার কম্পিউটারও তো একসময় ফেল করবে!"
আবার শুরু হলো পড়াশোনা। মন্টু মিয়াঁ আবিষ্কার করলেন, সমস্যা কম্পিউটারের না, সমস্যা তার স্ট্র্যাটেজিতে। তিনি জানলেন, একটা সিস্টেমকে মূলত দুইভাবে বড় বা 'স্কেল' (Scale) করা যায়:
-
ভার্টিক্যাল স্কেলিং (Vertical Scaling): এটাকে বলা হয় 'Scaling Up'। অর্থাৎ, আপনার সার্ভার (কম্পিউটার) একটাই থাকবে, কিন্তু তার ক্ষমতা বাড়ানো হবে। যেমন: র্যাম ৪ জিবি থেকে ১৬ জিবি করা, প্রসেসর আপগ্রেড করা ইত্যাদি। (মন্টু মিয়াঁ এতদিন এটাই করে আসছিলেন)।
-
হরাইজন্টাল স্কেলিং (Horizontal Scaling): এটাকে বলা হয় 'Scaling Out'। অর্থাৎ, একটা কম্পিউটারের ক্ষমতা না বাড়িয়ে, পাশাপাশি নতুন আরও কয়েকটা কম্পিউটার (সার্ভার) বসিয়ে দেওয়া এবং কাজের লোড সবার মধ্যে ভাগ করে দেওয়া।

মন্টু মিয়াঁ দুই পদ্ধতির সুবিধা-অসুবিধাগুলো নোট করে ফেললেন:
ভার্টিক্যাল স্কেলিং (একাই একশো)
সুবিধা:
- সেটআপ করা খুব সহজ (বাজার থেকে র্যাম কিনে লাগালেই হলো)।
- মেইনটেইন করা সহজ, কারণ সার্ভার একটাই।
অসুবিধা:
- লিমিটেশন: একটা কম্পিউটারের ক্ষমতা তো আর অসীম পর্যন্ত বাড়ানো যায় না। মাদারবোর্ডের একটা লিমিট আছে।
- খরচ: শুরুতে কম হলেও, হাই-এন্ড হার্ডওয়্যারের দাম জ্যামিতিক হারে (Exponentially) বাড়ে।
- সিঙ্গেল পয়েন্ট অফ ফেইলার: ওই একটা সার্ভার যদি কোনো কারণে নষ্ট হয় বা রিস্টার্ট দিতে হয়, তখন পুরো অ্যাপ বন্ধ। ইউজাররা কিচ্ছু দেখতে পাবে না।
হরাইজন্টাল স্কেলিং (দশে মিলে করি কাজ)
মন্টু দেখলেন, হরাইজন্টাল স্কেলিং দিয়েই আসলে বড় বড় কোম্পানি চলে। সুবিধা:
- আনলিমিটেড পাওয়ার: ইউজার বাড়লে শুধু নতুন আরেকটা সস্তা সার্ভার পাশে বসিয়ে দিলেই হলো। তাত্ত্বিকভাবে এর কোনো লিমিট নেই।
- সাশ্রয়ী: একটা সুপার কম্পিউটারের চেয়ে দশটা সাধারণ কম্পিউটার কেনা অনেক সময় সস্তা।
- ফল্ট টলারেন্স (Fault Tolerance): একটা সার্ভার নষ্ট হয়ে গেলে বাকি নয়টা সার্ভার ব্যাকআপ দেবে। অ্যাপ কখনো বন্ধ হবে না।
অসুবিধা:
- সিস্টেম মেইনটেইন করা কঠিন। ১০টা কম্পিউটার সামলানো চাট্টিখানি কথা নয়।
- আর্কিটেকচার জটিল হয়ে যায়। লোড ব্যালেন্সিং, ডিস্ট্রিবিউটেড ডাটাবেজের মতো কঠিন বিষয়গুলো চলে আসে।
- নেটওয়ার্ক ল্যাটেন্সি (Latency) বা ধীরগতি তৈরি হতে পারে, কারণ এক মেশিনকে আরেক মেশিনের সাথে কথা বলতে হয়।
সবকিছু বিচার করে মন্টু মিয়াঁ সিদ্ধান্ত নিলেন, তার দরকার হরাইজন্টাল স্কেলিং। দামী কম্পিউটার না কিনে তিনি অনেকগুলো সাধারণ সার্ভার দিয়ে তার বিড়ালটিউব চালাবেন।
কিন্তু তখনই তার মাথায় আরেকটা প্রশ্ন এল।
"আচ্ছা, আমি যদি ১০টা কম্পিউটার বসাই, তাহলে ইউজারের ফোন বা ব্রাউজার বুঝবে কীভাবে যে কোন কম্পিউটারের সাথে কানেক্ট হতে হবে? ১০টা কম্পিউটারের তো ১০টা আলাদা আইপি (IP) এড্রেস!"

মন্টু মিয়াঁ আবার মাথায় হাত দিয়ে বসে পড়লেন। নতুন সমস্যার নাম, ট্রাফিক কন্ট্রোল বা লোড ব্যালেন্সিং। আবার খুলতে হলো বই...