ভার্চুয়ালাইজেশন কি? (Virtualization) | ডকার কন্টেইনার vs ভার্চুয়াল মেশিন
Tags: devops, cloud, virtualization, docker
Published: 2023-01-24 13:28:26

> ভার্চুয়ালাইজেশনের সহজ বর্ণনা । কন্টেইনার এবং ভার্চুয়াল মেশিন (VM) এর মধ্যে তুলনা

Originally published [here](https://techmormo.com/posts/bangla-what-is-virtualization/).
Link to video: https://youtu.be/K2pBaJeFD7E

---

ক্লাউড কম্পিউটিং! ডকার! কুবারনেটস! Serverless!…

একজন সফটওয়্যার ইঞ্জিনিয়ার হিসাবে এই সকল শব্দ যদি আপনি না শুনে থাকেন তাহলে আপনি সম্ভবত কোন পাথরের নিচে বসবাস করছেন।

কিন্তু এই সব প্রযুক্তির মধ্যে কোন জিনিসটা কমন আছে?

ভার্চুয়ালাইজেশন!!!

কিন্তু সেটা আসলে কি? এবং এটার সাথে ডকার কন্টেইনার বা ভার্চুয়াল মেশিন এর কি সম্পর্ক?

এই টিউটোরিয়ালটিতে যতটা সম্ভব সহজভাবে আমরা এগুলো বোঝার চেষ্টা করবো।

আমরা একটা উদাহরণ দিয়ে এটা বোঝার চেষ্টা করি।

## উদাহরণ - কি সমস্যার সমাধান দরকার?

ধরুন একটি কাল্পনিক কোম্পানি 'XYZ' এর দুটো সফটওয়্যার অ্যাপ্লিকেশান চালাতে হবে: App A ও App B। এখন কোন কারনে একটা অ্যাপ অন্যটার সাথে মানানসই (compatible) নয়।

ধরেন অ্যাপ এ হচ্ছে একটা পাইথন অ্যাপ যেটা লিনাক্সে চালাতে হবে। এবং অন্যটা হচ্ছে একটা C# Dot Net অ্যাপ যেটা Windows এ চালাতে হবে।

দুটো অ্যাপের অপারেটিং সিস্টেম এবং লাইব্রেরি dependency গুলো আলাদা।

এখন কোম্পানি 'XYZ' কি কড়তে পারে?

যদি ভার্চুয়ালাইজেশন বলতে কিছু না থাকে, তখন স্বাভাবিকভাবে কোম্পানি 'XYZ' দুটো কম্পিউটার কিনে আনবে। তারপর দুটো অ্যাপ দুই কম্পিউটার এ সেটআপ করে চালাবে।


![img 1](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pel49ad9fvdm8to1ki0x.png)

চালানর পর হইলো কাহিনী।

লক্ষ্য করুন যে, অ্যাপ A ব্যবহার করছে প্রথম মেশিনের ৩০%, আর অ্যাপ B দ্বিতীয় মেশিনের ৪০%।

আমরা খুব সহজেই এই পদ্ধতির অসুবিধা দেখতে পাই:

প্রতিটি অ্যাপই তার কম্পিউটার পুরোপুরি ব্যবহার করছে না - resource অপচয় 

অ্যাপ এর resource (CPU/Ram, etc) কত লাগবে তা অনুমান করা কঠিন - হয় বেশি বা কম অনুমান করা হবে 

প্রতিটি নতুন অ্যাপ্লিকেশনের জন্য অতিরিক্ত হার্ডওয়্যার কিনতে হবে - ব্যয়বহুল

নিরাপত্তা ও ম্যানেজমেন্ট প্রতিটি সিস্টেমের জন্য আলাদাভাবে কড়তে হবে - ম্যানেজ করার পেড়া

এই সমস্যাগুলার যদি কোন সমাধান না থাকতো, তাহলে এগুলো খুব একটা বড় বিষয় মনে হত না।

সৌভাগ্যবশত, আমাদের কাছে এই সমস্যাগুলার সমাধান আছে - এবং এটিকে বলা হয়...

ভার্চুয়ালাইজেশন।

## ভার্চুয়ালাইজেশন এর সংজ্ঞা (Definition)

ভার্চুয়ালাইজেশন হল সেই প্রযুক্তি যা দিয়ে আমরা একটা physical resource কে ভাগ করে একাধিক virtual resource এ পরিণত করতে পারি।

যেমন, আমরা একটা কম্পিউটারের হার্ডওয়্যার অংশগুলো - যেমন CPU, RAM, Storage, ইত্যাদি এগুলো ভাগ করে অনেকগুলো ভার্চুয়াল ছোট কম্পিউটার বানাতে পারি।

এটা কি কোন গাজাখরি গল্প বললাম?

মোটেও না।

আপনি যদি ভার্চুয়াল মেশিন বা ডকার কন্টেইনার ব্যবহার করে থাকেন, তাহলে এটার ব্যাপারে আপনার ইতিমধ্যে কিছুটা জানার কথা।


![img 2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wsg5eudk4g42u6k1b3ct.png)

ভার্চুয়ালাইজেশনের সাহায্যে, একটি ফিজিক্যাল মেশিনকে কয়েকটি ছোট ভাগে ভাগ করা যায়। প্রত্যেকটি ছোট ভাগ নিজেকে মনে করে সে একজন রিয়েল ফিজিক্যাল মেশিন। কিন্তু সে আসলে জানেনা সে স্বপ্নের ভিতরে - তাই তাকে "ভার্চুয়াল" বলা হয়।

ভার্চুয়াল এনভায়রনমেন্টের ভেতরে যেই অ্যাপগুল চলবে, সেই অ্যাপগুলোর শুধু তার ভার্চুয়াল এনভায়রনমেন্টের নির্ধারিত resource এর অ্যাক্সেস থাকবে।

যদি অ্যাপ A ও অ্যাপ B চালানর পর মেশিনর আরো অতিরিক্ত resource থাকে, তাহলে কোম্পানি XYZ চাইলে আরো একটা অ্যাপ হয়তো চালাতে পারে। (যদিও দীর্ঘ সময়ের জন্য কোন কম্পিউটার ফুল লোডে ব্যবহার করা বুদ্ধিমানের কাজ হবে না)

ভার্চুয়ালাইজেশন থাকায় কি লাভ হোল?

### ভার্চুয়ালাইজেশন এর উপকারিতা (Benefits)

হার্ডওয়্যারের খরচ সঞ্চয়: একটা মেশিনর physical resource গুলো (CPU, RAM, etc.) আরো দক্ষতার সাথে ব্যবহার করে আমরা হার্ডওয়্যার খরচ কমাতে পেরেছি। এতেকরে একটি মেশিনে একাধিক প্রোজেক্ট বা এনভায়রনমেন্ট চালানো যাবে।

অ্যাপ্লিকেশন বিচ্ছিন্নতা (isolation): যেহেতু প্রতিটি ভার্চুয়াল এনভায়রনমেন্ট একটি ছোট 'রিয়েল' মেশিনের মত ভান করে, এতেকরে এক ভার্চুয়াল এনভায়রনমেন্টের অ্যাপগুলো অন্য ভার্চুয়াল এনভায়রনমেন্টের অ্যাপের কোন প্রবাভ ফেলে না। তাই, আমরা সহজেই প্রতিটি অ্যাপ আলাদাভাবে develop ও deploy কড়তে পারি।

আর ভালো scalability ও availability: নতুন হার্ডওয়্যার কেনার থেকে ভার্চুয়াল এনভায়রনমেন্ট তৈরি করা বা রিমুভ করা আরো সহজ এবং দ্রুত। ভার্চুয়ালাইজেশনের মাধ্যমে আমাদের অ্যাপগুলো আমরা আরো সহজে scale কড়তে পারব - অর্থাৎ, নতুন মেশিন এড বা রিমুভ করা। আর, অ্যাপের একাধিক কপি চালিয়ে আমরা availability বৃদ্ধি কড়তে পারবো - অর্থাৎ, অ্যাপটা যে চলছে সেটার সম্ভাবনা বাড়াতে পারবো।

আরও সহজ ম্যানেজমেন্ট ও নিরাপত্তা: যেহেতু অ্যাপ্লিকেশনগুলো তাদের ব্যবহার করা ফিসিকাল মেশিনগুলোর থেকে বিচ্ছিন্ন (ভার্চুয়ালাইজেশনের দ্বারা), তাই ফিসিকাল মেশিনগুলোকে কেন্দ্রীয়ভাবে পরিচালিত করা যেতে পারে এবং নিরাপত্তা নীতিগুলি (security policies) কেন্দ্রীয়ভাবে প্রয়োগ করা যেতে পারে। একশটা মেশিনে ঢুকে প্রত্যেকটা আপডেট করা, নাকি এক জায়গা থেকে একশোটা মেশিন আপডেট করা - কোনটা বেছে নিবেন?

### ভার্চুয়ালাইজেশনের প্রকারভেদ (Types)

ভার্চুয়ালাইজেশনের বিভিন্ন প্রকার রয়েছে, যেমন:

হার্ডওয়্যার (Hardware) ভার্চুয়ালাইজেশন - ভিএম (VM)

অপারেটিং সিস্টেম (OS) ভার্চুয়ালাইজেশন - কন্টেইনার (Containers)

নেটওয়ার্ক (Network) ভার্চুয়ালাইজেশন

ডেটা (Data) ভার্চুয়ালাইজেশন

ইত্যাদি।

কিন্তু আমরা শুধুমাত্র প্রথম দুইটিতে ফোকাস করবো এখন।

## তুলনা: কন্টেইনার, ভার্চুয়াল মেশিন ও বেয়ার মেটাল

![img 3](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fcd1vxo9btbt3hx54nc1.png)

### বেয়ার মেটাল (Bare metal)

এটি প্রথম পদ্ধতি যা কোম্পানি XYZ নিয়েছে।

কম্পিউটার আসার পর প্রথম প্রথম একটি অ্যাপ্লিকেশন চালানোর উপায় ছিল সরাসরি ডেডিকেটেড হার্ডওয়্যারের উপর। অর্থাৎ - একটি মেশিন, একটি অপারেটিং সিস্টেম (OS), একটি অ্যাপ।

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

যখন কেউ কাজ করার জন্য একটি কোম্পানির আইটি স্ট্যাক বেছে নিতো, তখন তারা সাধারণত সেই কোম্পানির নির্দিষ্ট হার্ডওয়্যার, ওএস বা লাইসেন্স চুক্তিতে লক-ইন হয়ে জেত। এতে করে - একক মেশিনে একাধিক অ্যাপ্লিকেশন চালানো খুব কঠিন হত।

ফলে, কম্পিউটারগুলোর resources অপচয় হতো, বিভিন্ন টিমের/অ্যাপের জন্য নতুন এনভায়রনমেন্ট সহজে বানানো জেত না, এবং scale করা কঠিন ছিল, কারণ প্রতিটা নতুন অ্যাপের জন্য নতুন মেশিন কেনাটা ব্যয়বহুল। 

সমাধান কি তাহলে?

### ভার্চুয়াল মেশিন (VM)

১৯৯০ এর দশকে ভার্চুয়াল মেশিনের ব্যবহার বৃদ্ধি পেয়ে ভার্চুয়ালাইজেশন ব্যাপক আকারে ছড়িয়ে পড়লো।

ভার্চুয়াল মেশিন বানানোর মুল প্রযুক্তি হোল হাইপারভাইজার (hypervisor)।

একটি হাইপারভাইজার হল এমন একটি সফ্টওয়্যার যা কম্পিউটার হার্ডওয়্যারের একটি নির্দিষ্ট অংশ বা সম্পূর্ণ কম্পিউটারকে অনুকরণ (emulation) করে। এতে করে ফিসিকাল কম্পিউটারটাকে ভাগ করে একাধিক ভার্চুয়াল কম্পিউটার বানানো জায় - যেগুলোকে ভার্চুয়াল মেশিন বলা হয়।

যে কম্পিউটারটি হাইপারভাইজার চালায় তাকে হোস্ট (host) সিস্টেম বলা হয়, এবং হাইপারভাইজার দ্বারা তৈরি ও পরিচালিত ভিএমগুলিকে গেস্ট (guest) সিস্টেম বলা হয়।

হাইপারভাইজাররা সরাসরি হার্ডওয়্যারের উপরে (টাইপ-1) অথবা একটি ওএসের উপরে (টাইপ-2) বসতে পারে।

ভার্চুয়াল মেশিন দারুণ এক প্রযুক্তি, কারণ তা দিয়ে আমরা বেয়ার মেটালের অনেক সমস্যার সমাধান করেছি।

কিন্তু ভার্চুয়াল মেশিনেরও কিছু ত্রুটি রয়েছে। 

যেমন, প্রতিটি ভিএম একটি সম্পূর্ণ অপারেটিং সিস্টেম এবং এর প্রয়োজনীয় হার্ডওয়্যার ভার্চুয়ালাইজ করে। এটা কিছু ক্ষেত্রে আসলেই কার্যকর, যেমন জখন আমরা সুরক্ষার জন্য উচ্চ বিচ্ছিন্নতা (isloation) চাই। 

তবে অনেক ক্ষেত্রেই তা অপ্রয়োজনীয়।

ভিএম থেকে হালকা কোন ভার্চুয়ালাইজেশন আছে কি?

 

### কন্টেইনার (Container)

কনটেইনারগুলি VM-এর মতো সম্পূর্ণ ফিজিক্যাল মেশিনকে ভার্চুয়ালাইজ না করে শুধুমাত্র অপারেটিং সিস্টেমকে ভার্চুয়ালাইজ করে।

তাদের একটি গেস্ট ওএস এবং হাইপারভাইজারের প্রয়োজন নেই। 

পরিবর্তে, একটি হোস্ট মেশিনে চলমান সমস্ত কন্টেইনার হোস্ট সিস্টেমের ওএস কার্নেল (OS Kernel) ভাগ করে। শুধুমাত্র অ্যাপ্লিকেশন কোড, তাদের লাইব্রেরি এবং dependency গুলো কন্টেইনার ধারণ করে।

তাই কন্টেইনার অত্যন্ত হালকা। এবং ভিএম বানানোর থেকে কন্টেইনার বানানো অনেক দ্রুত!

এছাড়াও, কন্টেইনার ভিএম থেকে বেশি portable. জেহুতু কন্টেইনার ফিজিক্যাল মেশিনের হার্ডওয়্যার ভার্চুয়ালাইজ করেনা, সেজন্যে কন্টেইনারগুলোকে বিভিন্ন cloud প্লাটফর্ম বা ডেটা সেন্টেরে সহজে চালানো সম্ভব।

এই কারণে কন্টেইনার দ্বারা অনেক DevOps সল্যুশন এবং বিষয় বৃদ্ধি পেয়েছে - যেমন মাইক্রোসার্ভিসেস, CI/CD পাইপলাইন, horizontal scaling, ইত্যাদি।

কিন্তু কন্টেইনারই সব সমস্যার সমাধান নয়।

যেহেতু অনেক কন্টেইনার একই হোস্ট মেশিনে চলে এবং হার্ডওয়্যার ভার্চুয়ালাইজ করে না, তাই তারা VM-এর তুলনায় কম বিচ্ছিন্নতা (isolation) প্রদান করে। 

এটি কিছু নিরাপত্তা বা সম্মতি (compliance) সংক্রান্ত সমস্যার জন্ম দিতে পারে, যা কিছু কিছু প্রকল্পে/প্রোজেক্টে একটি গুরুত্বপূর্ণ বিবেচনা হতে পারে।

কিন্তু এটি বেশিরভাগ অ্যাপ্লিকেশনের জন্য চিন্তার বিষয় নয়। So relax!

## উপসংহার (Conclusion)

বেয়ার মেটালের পেড়া থেকে আমরা ভার্চুয়ালাইজেশনের বিপ্লব পেয়েছি।

আজকের বেশিরভাগ অ্যাপ্লিকেশনগুলি ভার্চুয়ালাইজেশনের দ্বারা চলে। এমনকি ক্লাউড কম্পিউটিং ও এটার দ্বারা বাস্তবায়ন করা।

OS ভার্চুয়ালাইজেশনের ধারণাটি প্রায় ২০০০ দশকের প্রথম থেকেই প্রচারিত। কিন্তু আধুনিক কন্টেইনার যুগ ২০১৩ সাল থেকে শুরু হয়, ডকারের হাত ধরে।

TechMormo তে আমাদের ডকার কন্টেইনার খুব প্রিয়! আমাদের ইতিমধ্যে ডকার নিয়ে বেশ কিছু ইংলিশ ব্লগ ও ভিডিও বানানো হয়েছে।

Docker Made Easy 

Networking in Docker

Blogs on Docker

আপনি কি বাংলাতে ডকার শিখতে চান? নাকি অন্য কোন DevOps বিষয় শিখতে চান?

কমেন্ট করে বা Feedback পেইজ এ আমাদের জানবেন প্লিস।

আজ এই পর্যন্তই।

Be bold and keep learning.

But most importantly,

Tech care!

---

Subscribe to [TechMormo Newsletter](https://techmormo.com/newsletter/) for cutting-edge DevOps content! 🚀