ভার্টিক্যাল স্কেলিং এবং হরিজন্টাল স্কেলিং

in স্কেলিং ওয়েব সার্ভার,

ভার্টিক্যাল স্কেলিং এবং হরিজন্টাল স্কেলিং নিয়ে আমার আগের পোস্ট “স্কেলিং ওয়েব সার্ভার এবং গেদু ভাইয়ের আদি ফ্যামিলি” এর ট্যাকনিক্যাল ব্যাখ্যা নিয়ে আজকের এই পর্ব । একটা ফরমাল সঙ্গা দিয়ে শুরু করা যাক :

আপনার সিস্টেমের বর্তমান ইউজার এক্সপেরিয়েন্স অক্ষুন্ন রেখে,  এ্যাপ্লিকেশন কোডে পরিবর্তন না এনে;  হার্ডওয়্যার, ওএস বা সফ্টওয়্যার কম্পোনেন্টে পরিবর্তনের মাধ্যমে সিস্টেমের নতুন ট্রাফিক লোড হ্যান্ডেল করাকে সার্ভার স্কেলিং বলে। স্কেলিং সাধারনত দুই প্রকার : ভার্টিক্যাল স্কেলিং এবং হরিজন্টাল স্কেলিং ।

ভার্টিক্যাল স্কেলিং বা Scale Up

আগের তুলনায় হাই পারফরমেন্সের কম্পোনেন্ট সার্ভারে  ডেপ্লয় করে স্কেলিং করার পদ্ধতিকে ভার্টিক্যাল স্কেলিং বলে। যেমন : নতুন প্রসেসর, র‍্যাম, হার্ড ডিস্ক ইত্যাদি ।

ভার্টিক্যাল স্কেলিং

ভার্টিক্যাল স্কেলিং এর সুবিধা

  • ঝামেলা কম ! সহজেই শুরু করা যায়।
  • ট্রাফিক লোড খুব বেশি না হলে এবং মোটামুটি একটি ভাল মানের সার্ভার হ্যান্ডেল করতে পারলে ম্যানেজমেন্ট এবং মেইন্টেনেন্স খরচ কম।

হরিজন্টাল স্কেলিং বা Scale Out

হরিজন্টাল স্কেলিং হল আপনার সফ্টওয়্যার সিস্টমের জন্য একটি ডিস্ট্রিবিউটেড এনভার্নমেন্ট যার সাবটাইটেল হতে পারে “দশে মিলে করি কাজ, হারি জিতি নাহি লাজ” । এক্ষেত্রে আপনি শুধু সার্ভারের লোড বিভিন্ন মেশিনে ডিস্ট্রিবিউট করে দিচ্ছেন । সোজা কথায় হরিজন্টাল স্কেলিং হল সার্ভারে ক্লাস্টারে সংখ্যা বাড়ানো এবং একটি কম্পোনেন্টের উপর থেকে প্রেসার কমানো । যাতে প্রত্যেকটি নোড তার ক্যাপাসিটি অনুযায়ী সাভাবিক ভাবে রান করতে পারে ।

হরিজন্টাল স্কেলিং

হরিজন্টাল স্কেলিং এর সুবিধা

  • High availability (HA) : সিস্টেমের ডাউন টাইম কমিয়ে সেটা সার্বাধিক বেশি সময়ের জন্য লাইভ রাখা । একটি ক্লাস্টার কোন কারনে ক্রাশ করলে আরেকটি সার্ভার ব্যাকআপ দিতে পারে ।
  • Capacity বা ধারন ক্ষমতা : হরিজন্টাল স্কেলিং এর একটি গুরুত্বপূর্ন সুবিধা হল সিস্টেম ডাউন না করে, মেশিন যোগ করে রান টাইম আপনার সিস্টেমের ক্যাপাসিটি বাড়াতে পারবেন ।
  • Performance: একটি মেশিনের উপর চাপ কম থাকায় সিস্টেমের পারফরমেন্স ভাল থাকে । তাছাড়া আপনার ডাটা সেন্টার অনেক হলে আপনি রিজিওনাল ডাটা সেন্টার থেকে ডাটা প্রোভাইড করতে পারেন, এতে পারফরমেন্স অনেক ভাল হয় । যেমন: বাংলাদেশে বসে CDN নেটওয়ার্ক থেকে কোন ডাটা ডাউনলোড করলে CDN প্রোভাইডার আপনার অবস্থান থেকে সবচেয়ে কাছের ডাটা সেন্টার থেকে ডাটা প্রোভাইড করবে ।

ডেভেলপারা কোনটা কিভাবে দেখেন

ডেভেলপারদের দৃষ্টি কোন থেকে ভার্টিক্যাল স্কেলিং হল সফ্টওয়্যার স্কেলিং এর সবচেয়ে সহজ উপায় । সফ্টওয়্যার স্লো কাজ করে ? নতুন করে বড় সাইজের মেশিন ডেপ্লয় কর ব্যাস সফ্টওয়্যার আগের চেয়ে ভাল কাজ করবে । কিন্তু এ পদ্ধতি আপনাকে কতদুর নিয়ে যেতে পারে ? আপনার সিস্টেমে ভালো এবং বড় মাদারবোর্ড, হার্ড ডিস্ক এবং মাল্টিকোর প্রসেসর লাগিয়ে পারমেন্স কতটুকু বাড়াতে পারবেন ? যে টাকা আপনি খরচ করলেন তার তুলনায় পারফরমেন্স খুব বেশি একটা পাবেন না। আপনার হয়তো অনেকগুলো প্রসেসর থাকতে পারে কিন্তু আপনার একটি সফ্টওয়্যার কম্পোনেন্ট তো একসাথে মাল্টি-প্রসেসরে রান থাকবে না, তাহলে প্রসেসর বাড়িয়ে কি লাভ?

হরিজন্টাল স্কেলিং ডেভেলপারদের জন্য অনেকটা মরুভূমি পাড়ি দেয়ার মত । একাধিক পিসি বা নোড থেকে প্রসেসিং পাওয়ার পেতে আপনার সিস্টেমটিকে প্যারালাল কাজ হ্যান্ডেল করা জানতে হবে। ক্লাস্টার সেটাপ , টেস্টিং এবং মেইনটেনইন করা অনেক ঝামেলা ।তবে হ্যা ! জটিলতা বাড়লেও লং-রান এ  সিস্টেম ডাউন টাইম এবং খরচ অনেক কমবে;  রিলায়েবিলিটি এবং এভেইলেবেলিটি বাড়বে।

কিভাবে সিদ্ধান্ত নিবেন ?

ওয়ের সার্ভার স্কেলিং কিভাবে করা উচিত তা সিদ্ধান্ত নেয়ার আগে সবচেয়ে গুরুত্বপূর্ন বিষয় হল এই দুই মেথডের মাঝে পার্থক্যটা ভালো ভাবে খেয়াল করা । তারপর চিন্তা করে দেখুন যে কোন মেথড আপনার সিস্টেমের জন্য সবচেয়ে উপযোগী।

হরিজন্টাল স্কেলিং এর জন্য অনেকগুলো ক্লাস্টার সেটাপ করা, সেগুলো ম্যানেজমেন্ট, মেইন্টেনেন্স খরচ এবং এর জটিলতা সম্পর্কে আপনি কতটুকু অবগত আছেন? জেনে রাখা ভাল, হরিজন্টাল স্কেলিং এর আর্কিটেকচার ডিজাইন এবং প্রোগ্রামিং মডেল ক্রমাগত আপনাকে জটিলতার মাঝে হাবুডুবু খাওয়াতে পারে। তাই শুধু নতুন মেশিন বা ক্লাস্টার যোগ করাই হরিজন্টাল স্কেলিং এর শুরু হওয়া উচিত নয়। প্রথমে দেখুন যে একটি মেশিনে ভার্টিক্যাল স্কেলিং করে আপনার সিস্টেম রিকোয়েমেন্ট সম্পূর্ন করা সম্ভব কি না? যদি মনে হয় একটা মেশিন বেশি দিন হ্যান্ডেল করতে পারবে না তবে হরিজন্টাল স্কেলিং এর কথা চিন্তা করুন । অথবা চাইলে দুইটার একটা কম্বিনেশন ।

খরচের দিক থেকে  একটি মেশিনে অধিকতর থেকে অধিকতর ভাল কনফিগারেশনের সিস্টেম দাড় করতে গেলে আপনার খরচ এক্সপোনেনশিয়াল হারে বৃদ্ধি পাবে এবং একটি মেশিন যতই বড় হোক তারও একটি সীমাবদ্ধতা আছে । এ তুলনায় হরিজন্টাল স্কেলিং এর প্রাথমিক ঝামেলা বা খরচ বেশি মনে হলেও সার্ভারের ট্রাফিক বা চাপ বৃদ্ধির সাথে এর খরচ অনেক কম ।

আপনার সিস্টেমটি কেমন ?

আপনি যে সিস্টেমের স্ক্যালিবিলির কথা ভাবছেন সেটা আসলে কোন ধরনের কাজ বেশি করে থাকে? আপনার সাইট টি কি read-heavy? write-heavy? নাকি মোটামুটি দুইটাই?  read-heavy ওয়েব সাইটের উদাহরন হিসেবে একটি অনলাইন শপিং সাইটকে ধরে নেয়া যেতে পারে , যেখানে ব্যবহারকারী বেশিরভাগ সময় ব্রাউজ [ read ] করে কাটায়, শুধু মাত্র কিছু সংখ্যক পরিমানে অর্ডার চেকআউট [ writes ] করা হয়। কিংবা আমার এই ব্লগটি ও একটি read-heavy এর উদাহরন হতে পারে, এখানে একজন পাঠক ১ ঘন্টায় হয়তো ১০টি পোস্ট পড়বে [reads] এবং একটা বা দুইটাতে কমেন্ট [writes] করবে। কিন্তু গুগল এনালিটিক্স এর যে ট্রাফিক লোড থাকে, হয়ত তার ৯০ ভাগের উপরই writes অর্থাৎ ওয়েব সাইটের ভিজিটের তথ্য ডাটাবেজে স্টোর করে । মাঝে মাঝে ঐ সাইটের এডমিন তার সাইটের গ্রাফ দেখতে চায় [reads] ।

আপনি কোন ধরনের সিস্টেম ডেভেলপ করতে চাচ্ছেন এবং তার ট্রাফিক লোড এনালাইসিস করে আপনাকে সিদ্ধান্ত নিতে হবে আপনি কোন আর্কিটেকচার/টেকনোলজি ব্যবহার করবেন।

স্কেলিং read-heavy সিস্টেম

যদি আপনার সিস্টেমটি মুলত একটি read-heavy সিস্টেম হয় তবে আপনার ডাটাস্টোরটি রিলেশনাল ডাটাবেজে ভার্টিক্যাল স্কেলিং করাই ভাল। RDBMS এর সাথে একটি ফাস্ট ক্যাশিং মেথড যোগ করে দিয়ে সহজেই ভার্টিক্যাল স্কেলিং করতে পারেন। ডাটাবেজ যদি ক্যাপাসিটির বাইরে চলে যায় তবে ক্যাশ-এ আরো বেশি পরিমান ডাটা রাখার চেষ্টা করুন । আর তাতেও না হলে হার্ডওয়্যার আপগ্রেড করুন ।

স্কেলিং write-heavy সিস্টেম

সিস্টেমে প্রচুর পরিমান রাইট হলে ভার্টিক্যাল স্কেলিং যথেষ্ট রিস্ক, কারন এতে ক্যাশিং লেয়ার আপনাকে তেমন কোন সুবিধা দিতে পারবে না । অনেক write-heavy সিস্টেম ভার্টিক্যাল স্কেলিং এ শুরু করলেও খুব বেশি দিন তারা টিকে থাকতে পারে নি।  কেন ? কারন হার্ড ডিস্ক কিংবা একটি প্রসেসর স্পিডের আধিপত্য একটি নির্দিষ্ট সীমার ভিতর  এবং একটু সামান্য I/O অপারেশন পার সেকেন্ড সমৃদ্ধ হার্ডওয়্যার, পাওয়ার এবং ম্যানেজমেন্ট খরচ যথেষ্ট বেশি ।

অন্যান্য বিবেচ্য বিষয়

আরেকটা বিষয় আপনার মাথায় থাকা উচিত, যে কোন সময় আপনার স্কেলিং স্ট্র্যাটেজিতে কিছু অচেনা খরচ যোগ হতে পারে। ভার্টিক্যাল স্কেলিং এ, বেশিকার্য ক্ষমতাধর কম্পোনেন্ট যোগ করে দিলে আপনার একদিকের সমস্যার আপাত সমাধান হলেও অন্য দিকে নতুন সমস্যার সৃষ্টি করতে পারে।

উদাহরন সরূপ: যদি একজন কাঠ ব্যবসায়ী চান সে ট্রাকে করে আগের ক্যাপাসিটির তুলনায় ডাবল গাছ বা কাঠ ডেলিভারি দিবেন । তাহলে ট্রাকটির প্রস্থ বাড়াতে হতে হবে, নয়তো উচ্চতা বাড়াতে হতে হবে অথবা দৈর্ঘ বাড়াতে হবে। যদি উচ্চতা বাড়ান তাহলে রেল লাইনের নিচে দিয়ে যে রাস্তা গেছে তা অতিক্রম করতে গিয়ে দেখলেন যে ব্রিজের উচ্চতা কম। প্রস্থ বাড়ালে হয়তো দেখবেন দুই লেনের এক রাস্তা আপনার একারই লাগে আর সেখানে রাস্তা এক লেনের । দৈর্ঘ্য বাড়ালে সব রাস্তায় আপনি মোড় ঘুরাতে পারবেন না,, ইত্যাদি ইত্যাদি ।

এক্ষেত্রে আপনি যদি হরিজন্টাল স্কেলিং মেথড ফলো করে দুইটি ট্রাকে করে কাঠ ডেলিভারি দিতেন তবে এ সমস্যায় পড়তে হতো না।

শেষ কথা

স্কেলিং এর দুইটা মেথড এখানে যত সহজেই বনর্না করা হয়েছে একটি ভাল সমাধান এতটা সহজ না । স্কেলিং একটি বড় সমস্যা যেটা সমাধানের প্রতিটি পদে আপনাকে বাস্তবমুখী এবং যৌক্তিক চিন্তা করতে হবে। স্কেলিং এর জন্য ম্যাজিক্যাল কোন বাইবেল বা সফ্টওয়্যার নেই যেটা আপনাকে সম্পূর্ন রিলায়েবল, স্কেলেবল সিস্টেম বানাতে সাহায্য করবে। একটি বড় সমাধান আসলে শত শত ছোট ছোট সমাধানের সমষ্টি এবং প্রত্যেকটির জন্য দরকার পড়ে যথেষ্ট সচেতন ভাবনা।

পরবর্তী পোস্ট   »  সাধু বাবার লোড ব্যালেন্সিং


মুক্ত জ্ঞান ছড়িয়ে দিন সবার মাঝে!