আসসালামু আলাইকুম, কেমন আছেন টেকটিউনস কমিউনিটি? আশা করছি সবাই ভাল আছেন। আজকে আবার হাজির হলাম নতুন টিউন নিয়ে।
আজকের টিউনের মূল বিষয় হচ্ছে Emulation এবং Virtualization এর মধ্যে পার্থক্য বের করা। সাধারণ ভাবে বলতে গেলে Emulation এবং Virtualization এর উদ্দেশ্য একটাই, ভার্চুয়াল মেশিনের অন্য অপারেটিং সিস্টেম রান করানো। তবে তারা ভিন্ন ভাবে কাজ গুলো করে এবং এখানে Virtualization এর স্পীড বেশি।
আমরা যদি এই দুই পদ্ধতিতে পারফরম্যান্সের হিসাব করি তাহলে দেখতে পাবো Emulation বেশ স্লো Virtualization থেকে এবং এটি হার্ডওয়্যারের অপটিমাইজেশনের মাধ্যমে হয়।
ভিন্ন হোস্টে অ্যাপ রান করানোর ব্যাসিক একটি মেথড হচ্ছে Emulation। হোস্ট কম্পিউটার বুঝতে পারে এমন কমান্ড গুলো Emulator গ্রহণ করে এবং ট্রান্সলেট করে এবং রান হতে সাহায্য করে। সাধারণত এর মধ্যে সিপিইউ Opcodes এবং রেজিস্টারগুলি অনুকরণ করা হয়। পুরনো গেম গুলো এমুলেট করা এর একটি দারুণ উদাহরণ হতে পারে যেমন, Nintendo N64 গেম গুলো মডার্ন পিসিতে রান করানো। সাধারণ ভাবে এখনকার পিসি গুলো Nintendo N64 গেম গুলো ডিরেক্টলি রান করাতে পারে না কিন্তু Emulator নির্দিষ্ট ইন্সট্রাকশনের মাধ্যমে যতটা সম্ভব পারফেক্ট ভাবে গেম গুলো রান করাতে সাহায্য করে।
সাধারণ ভাবে “Emulation” কথাটি ভিডিও গেম এমুলেশনের ক্ষেত্রে পরিচিত হলেও এটি বিজনেস আপ্লিকেশনে ব্যবহৃত হয়ে থাকে। যেমন আপনার একটি লিগ্যাসি সফটওয়্যার রয়েছে যা DOS এর মত সিস্টেম গুলোতে রান করতে হবে, সেক্ষেত্রে এটি নির্দিষ্ট মেশিনে রান না করে Emulator এ রান করা বেশ সহজ। পুরনো নেটওয়ার্ক কন্ট্রোলার গুলো এমুলিটিং করাও এর অন্তর্ভুক্ত হতে পারে।
যখন হোস্ট অপারেটিং সিস্টেমে মাল্টিপল লিনাক্স রান করা হবে তখন Emulation বেশ স্লো করতে পারে। যখন আপনার হোস্ট অপারেটিং সিস্টেম এবং ভার্চুয়াল সিস্টেম একই হবে তখন পুরো CPU লোড বেড়ে যেতে পারে এবং স্লো কাজ করতে হবে।
এই সমস্যা সমাধানের জন্য অধিকাংশ ভার্চ্যুয়াল মেশিন গুলো হার্ডওয়্যার অপটিমাইজেশন Virtualization টেকনোলজি ব্যবহার করে। Intel এ এই টেকনোলজি কে বলা হয় Intel-VT, এবং AMD তে একে বলা হয় AMD-V। উভয় প্রযুক্তি x86 আপ্লিকেশন গুলোকে ভার্চুয়ালাইজিং করে। আপনার ডেক্সটপ কম্পিউটারের ক্ষেত্রে এই প্রযুক্তি ব্যবহারের জন্য আপনাকে BIOS থেকে Virtualization এনেভল করতে হবে কারণ এটি ডিফল্ট ভাবে ডিজেবল করা থাকে।
Virtualization প্রায়শই Hypervisor এর সাথে একত্রে ব্যবহৃত হয়, যা Barebone OS যেটি একাধিক ভার্চুয়াল প্রাইভেট সার্ভার পরিচালনা করে। আপনি যদি AWS এর মত ক্লাউড কম্পিউটিং কোম্পানি গুলোর কাছ থেকে কোন VPS ভাড়া করেন তাহলে এটি Nitro, Proxmox, অথবা Hyper-V এর মত Hypervisor গুলোতে রানিং হবে। মডার্ন এই Hypervisor গুলো দারুণ কাজ করে যেখানে Emulation এর ইস্যু গুলো থাকে না।
আপনি যদি একই আর্কিটেকচারে ভার্চুয়ালাইসিং করেন তাহলে Virtualization সবচেয়ে ভাল কাজ করে। যেমন Intel বা AMD এর x86 CPU গুলোর মাধ্যমে স্ট্যান্ডার্ড Windows এবং লিনাক্স অপারেটিং সিস্টেম গুলো চমৎকার ভাবে ভার্চুয়ালাইজ করা যায়। যদিও ARM CPU গুলোতে x86 Virtualize করা অসম্ভব নয় তবে সেখানে কিছু সমস্যা রয়েছে। যেমন অ্যাপলের নতুন M1 প্রসেসরের ম্যাক-বুক গুলোতে x86 Virtualization সাপোর্ট করে না।
সুতরাং আপনি যদি অন্য অপারেটিং সিস্টেমের সফটওয়্যার ব্যবহার করতে চান এবং শত ভাগ স্পীড নিশ্চিত করতে চান তাহলে অবশ্যই Virtualization টেকনোলজি ব্যবহার করুন।
Docker এর মাধ্যমে আপনি আলাদা ভার্চুয়াল মেশিন ইন্সটল না দিয়েই বিভিন্ন অ্যাপ ব্যবহার করতে পারবেন। এর মাধ্যমে বিভিন্ন App Container রান করা যায়। App Container হচ্ছে বিভিন্ন প্যাকেজ যেখানে একটি নির্দিষ্ট অ্যাপ রান করানোর মত সকল প্রয়োজনীয় কোড গুলো থাকে। এটি বেশ নিরাপদ। অ্যাপ ব্রেক করা বা নষ্ট হবার কোন ভয় ছাড়াই একটি হোস্ট কম্পিউটারে মাল্টিপল Docker Container রান করানো যায়।
প্রাইভেট একটি লিনাক্স ভার্চুয়াল মেশিনে অ্যাপ রান করার কাজটি করা যায় Docker এর মাধ্যমে তবে এটি একটু ভিন্ন ভাবে হয়। আপনার অ্যাপ গুলোর জন্য যতটা রিসোর্স দরকার ঠিক ততটাই ব্যয় হবে, ভার্চুয়াল মেশিনের জন্য আলাদা রিসোর্স স্টোর হয়ে থাকবে না।
যদিও আগে বলেছি তারপরেও আরও পরিষ্কার ভাবে বলি, Docker কোন Emulation অথবা Virtulization প্রযুক্তি ব্যবহার করে না। এটি CPU এবং হোস্ট সিস্টেম থেকে সরাসরি কোড গুলো রান করায়। এখানে আলাদা আলাদা কন্টেইনারে কাজ গুলো হয় বলে সিস্টেম রিসোর্স বা প্রোগ্রাম ফাইল গুলো মিক্স আপ হয়ে কোন ঝামেলা তৈরি হয় না।
এই পদ্ধতিতে একটি হোস্টে মাল্টিপল অ্যাপ রান হতে পারে, ভার্চুয়াল অপারেটিং সিস্টেমের ওভারহিট হওয়ার ঝামেলা ছাড়াই। এটি AWS এর মত কাজ করবে যা আপনার অনেক টাকা বাঁচিয়ে দিতে পারে।
আপনি যদি Virtualizing নিয়ে ভেবে থাকেন এবং কোন ঝামেলা ছাড়াই দুর্দান্ত পারফরম্যান্স চান তাহলে একই সাথে Docker ও ট্রাই করে দেখতে পারেন।
আজকে এই পর্যন্তই, দেখা হবে পরবর্তী টিউনে সে পর্যন্ত ভাল থাকুন। আল্লাহ হাফেজ!
আমি সোহানুর রহমান। সুপ্রিম টিউনার, টেকটিউনস, ঢাকা। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 11 বছর 2 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 627 টি টিউন ও 200 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 118 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
কখনো কখনো প্রজাপতির ডানা ঝাপটানোর মত ঘটনা পুরো পৃথিবী বদলে দিতে পারে।