Process, VM ও Container: isolation-এর পার্থক্য
Processes, VMs, and Containers
এই পাঠের সূচিপত্র
এই পাঠে যা শিখবেন
- Process, VM ও container-এর isolation আলাদা করা
- Laravel web ও worker-এর resource boundary বোঝা
- Persistent data কোথায় রাখবেন ঠিক করা
সমস্যা দিয়ে শুরু
একটি Laravel দোকানে image resize job চললেই checkout ধীর হয়। একই machine-এ PHP-FPM, queue worker এবং database memory নিয়ে লড়ছে। Developer বলেন container করলেই সমস্যাটি যাবে। কিন্তু container-এ limit না থাকলে একই host-এর resource শেষ হতে পারে। প্রথমে বুঝতে হবে application-এর process কোথায় চলে, কোন সম্পদ ভাগ করে এবং host বন্ধ হলে কী হারায়।
সহজ করে বুঝি
Process হলো চলমান program; operating system তাকে memory ও CPU time দেয়। VM virtual hardware-এর উপরে নিজের guest kernel চালায়। Container host kernel ভাগ করে, তবে process, filesystem ও network-এর কিছু অংশ আলাদা করে। Image হলো চলার recipe ও filesystem snapshot; container তার চলমান instance। এই isolation performance guarantee বা নিখুঁত security boundary নয়। একই host নষ্ট হলে তার সব container প্রভাবিত হয়।
পরিচিত একটি উপমা
একটি বাড়ির আলাদা ঘর container-এর মতো: দরজা আলাদা হলেও বিদ্যুৎ সংযোগ এক। VM তুলনামূলকভাবে আলাদা apartment-এর মতো। ঘর বাড়ালে মূল বিদ্যুতের ক্ষমতা বাড়ে না; resource budget তাই দরকার।
নকশাটি দেখুন
Diagram লোড হচ্ছে…
Diagram-এর text flow দেখুন
flowchart TD H[Host kernel] --> W[PHP FPM container] H --> Q[Queue worker container] W --> D[(External database)] Q --> D
Host kernel থেকে web ও worker দুটি আলাদা process group পায়। HTTP request web-এ যায়; দীর্ঘ কাজ worker করে। দুইটি database-এ স্থায়ী ফল লেখে। Container বদলালে local file মুছে যেতে পারে, তাই database ও upload-এর persistence আলাদাভাবে design করতে হবে। একই host দেখানো হয়েছে বলে এই diagram high availability-এর দাবি করে না।
PHP ও Laravel-এ প্রয়োগ
নিচের fragment routes/web.php-তে local lab-এর জন্য। এটি PID দেখায়, secret নয়; production diagnostic endpoint হিসেবে প্রকাশ করবেন না। দুই replica-তে request পাঠিয়ে process বদলানো দেখুন। PHP process-এর ভেতরের static variable shared database-এর বিকল্প নয়।
use Illuminate\Support\Facades\Route;
Route::get('/lab/process', function () {
return response()->json([
'pid' => getmypid(),
'environment' => app()->environment(),
]);
})->middleware('auth');সুবিধা, সীমাবদ্ধতা ও trade-off
Container reproducible runtime ও দ্রুত replacement দেয়। VM সাধারণত বেশি kernel separation দেয়, কিন্তু guest OS patch ও resource overhead থাকে। Web ও worker আলাদা করলে independently scale করা যায়; host-level CPU contention তবু থাকে। Database container শেখার জন্য সুবিধাজনক হলেও production storage, backup ও restore-এর দায় দূর হয় না।
সাধারণ ভুল
- Container image-এ upload বা runtime secret রেখে দেওয়া।
- এক host-এ তিন replica মানেই তিন failure domain ধরা।
- Worker memory limit ছাড়া CPU-heavy কাজ চালানো।
আরও একটু গভীরে
CPU quota, memory limit, process privileges ও filesystem permissions আলাদা সিদ্ধান্ত। Memory exhaustion-এ process kill হলে job পুনরায় আসতে পারে; তাই business operation idempotent রাখতে হয়। Long-running Laravel worker নতুন code নিজে পড়ে নেবে ধরে নেবেন না। Deployment-এ graceful restart এবং unfinished job পুনরুদ্ধারের পথ রাখুন। Container runtime ও host patch management-ও operational কাজের অংশ।
মনে রাখুন
Container process আলাদা করে; host failure, persistence ও resource budget আলাদাভাবে সামলাতে হয়।
নিজে চেষ্টা করুন
একই host-এ web এবং worker চালিয়ে resize workload দিন। CPU, resident memory, checkout latency নোট করুন। Worker limit বদলে ফল তুলনা করুন। Container restart করে কোন file টিকে থাকল লিখুন; কোনো কাল্পনিক benchmark ব্যবহার করবেন না।
নিজের বোঝা যাচাই করুন
1. Container কি ছোট VM?
না। সাধারণ Linux container host kernel ভাগ করে; VM নিজের guest kernel চালায়। এই পার্থক্য isolation ও patching-এর দায় বদলায়।
2. Image ও container এক?
Image immutable starting artifact; container চলমান instance যার writable layer থাকতে পারে। Layer-এ রাখা business data replacement-এ হারাতে পারে।
3. তিন replica কি availability নিশ্চিত করে?
একই host-এ থাকলে host failure সব replica থামায়। Placement ও independent failure domain যাচাই করতে হবে।
4. Worker আলাদা কেন?
CPU-heavy background কাজ web capacity থেকে আলাদা budget পায়। Limits ভুল হলে shared host তবু saturate হতে পারে।
5. Upload কোথায় রাখব?
স্থায়ী object storage বা যথাযথ persistent volume-এ। কোনটি নেবেন তা durability, sharing ও restore requirement দিয়ে নির্ধারণ করুন।
আরও পড়ুন
এই পাঠের কুইজ
এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।
এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।
জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।
অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।