সরাসরি পর্বে যান
পর্ব ১৫ · ৮১-এর মধ্যে · মডিউল ৩

Cloud VM — instance type, vCPU, boot আর lifecycle

Cloud VMs — Instance Types, vCPUs, Boot and Lifecycle

Taught in Bangla, this lesson explains a cloud VM as a rented share of a host, decodes instance type names on AWS, Azure and Google Cloud, and clarifies what a vCPU is. A simulator runs burstable CPU credits through a day. It also covers noisy neighbours, boot volumes versus instance store, lifecycle states with their cost and IP outcomes, metadata service risks, placement, and rightsizing from measured p95.

এই পর্বে যা শিখবেন

  • AWS, Azure আর Google Cloud-এর instance type-এর নাম ভেঙে পড়া
  • Burstable VM-এর credit হিসাব করা, আর কখন CPU হঠাৎ কমে যায় তা আগে থেকে বলা
  • Boot volume আর instance store-এর পার্থক্য, আর কোন অবস্থায় কী হারায়
  • VM-এর lifecycle, প্রতিটি অবস্থার খরচ, আর public ও private IP-র ভাগ্য
  • Metadata service-এর ঝুঁকি কমানো, maintenance আর placement বোঝা
  • মাপা CPU, memory, I/O আর bandwidth থেকে সবচেয়ে ছোট উপযুক্ত VM বাছাই

১ · Cloud VM আসলে কী — একটি বড় যন্ত্রের ভাড়া করা ভাগ

আগের মডিউলে ধরে নিয়েছিলাম, একটি server হাতে আছে। এবার প্রশ্ন, সেই server আসে কোথা থেকে? ক্লাউডে একটি কমান্ড চালালে এক মিনিটের মতো সময়ের মধ্যে একটি Linux যন্ত্র পাওয়া যায়, যার public ঠিকানা আছে, আর আপনি SSH করতে পারেন। কেউ তো দৌড়ে গিয়ে একটি নতুন server বসিয়ে দিলেন না। আসলে কী ঘটল?

Provider-এর data center-এ শক্তিশালী physical server চালু হয়েই আছে। একে বলে host. তার ওপর চলে hypervisor, যা একটি host-এর CPU, memory, disk আর network ভাগ করে কয়েকটি virtual machine বানায়। Cloud VM মানে সেই host-এর একটি ভাগ। AWS একে বলে EC2 instance, Azure বলে Virtual Machine, আর Google Cloud বলে Compute Engine VM. আমরা “VM” আর “instance”, দুটি শব্দই একই অর্থে ব্যবহার করব।

একটি বড় মেসবাড়ি ভাবুন। ভবন একটি, কিন্তু ঘর অনেক। প্রতিটি ঘরে আলাদা তালা, আলাদা ভাড়াটিয়া। পানি, বিদ্যুৎ আর সিঁড়ি সবার জন্য একই, আর ম্যানেজার ঠিক করেন কে কতটা পাবেন। Host হলো ভবন, hypervisor হলো ম্যানেজার, VM হলো ঘর। ঘর ছেড়ে দিলে পরের দিনই সেখানে অন্য কেউ উঠতে পারেন। একারণে ঘরের কোনায় ফেলে যাওয়া জিনিস আপনার আর থাকে না।

একটি host, তিনটি VM, আর দুই রকম disk

Physical host, hypervisor, VMs, instance store and network-attached boot volume

Host, hypervisor, VM, instance store আর boot volume Physical host (provider-এর যন্ত্র) আপনার VM 2 vCPU 8 GiB RAM অন্য গ্রাহক 4 vCPU 16 GiB RAM অন্য গ্রাহক 8 vCPU 32 GiB RAM Hypervisor · ভাগ করে, আলাদা রাখে CPU core RAM Network card Instance store (host-এর NVMe) খুব দ্রুত, কিন্তু host ছাড়লেই ডেটা নেই Data center network Block storage ব্যবস্থা Boot volume · data volume Host-এর বাইরে, আলাদা জীবন Stop করলেও ডেটা থাকে
ছবি ১৫.১ — VM host-এর ভেতরে চলে, কিন্তু তার boot disk সাধারণত host-এর বাইরে, network-এর ওপারে। পুরো পর্বের অনেক সিদ্ধান্ত এই একটি ছবি থেকে আসে।

Virtualization কীভাবে কাজ করে, CPU-র VT-x, memory-র EPT, virtio: এসব তাত্ত্বিক দিক আছে Operating Systems-এর virtual machine পর্বে। এখানে আবার নতুন করে করব না। আমাদের প্রশ্ন operational: কোন VM নেবেন, তার কী কী হারাতে পারে, আর বিল কত আসবে।

Amazon EC2 ২০০৬ সালের আগস্টে beta হিসেবে আসে। তখন মূলত একটিই আকার ছিল: প্রায় ১.৭ GB RAM আর ঘণ্টায় $০.১০ দামের একটি small instance, যা পরে m1.small নামে পরিচিত হয়। ২০১০-এর দশকের মধ্যে আকারের সংখ্যা শতকের ঘর পেরোয়। ২০১৭ সালের দিকে AWS তাদের Nitro নকশার কথা প্রকাশ্যে বলে: network, storage আর নিরাপত্তার কাজ host-এর CPU থেকে সরিয়ে আলাদা বিশেষ card-এ নেওয়া। Azure আর Google Cloud-ও নিজের মতো করে এ ধরনের offload ব্যবহার করে, তাই host-এর CPU-র প্রায় পুরোটাই গ্রাহকের জন্য ছাড়া যায়।

২ · Instance type — নামের ভেতরের সংকেত

Instance type হলো VM-এর ঠিক করে দেওয়া মাপ: কতগুলো vCPU, কত memory, কোন ধরনের disk সংযোগ, কত network bandwidth. আপনি ইচ্ছামতো ৩ vCPU আর ১৭ GiB চাইতে সাধারণত পারেন না, তালিকা থেকে বেছে নেন। Host-কে সমান টুকরোয় ভাগ করা সহজ, আর এতে ফাঁকা জায়গা কম নষ্ট হয়। ভাতের হোটেলের নির্দিষ্ট প্লেটের মতো: ফুল, হাফ, কোয়ার্টার। (Google Cloud-এ custom machine type-ও আছে, তবে সেখানেও সীমা থাকে।)

পাঁচটি family

কাজের ধরন অনুযায়ী অনুপাত বদলায়। নিচের অনুপাতগুলো চলতি পরিচিত নকশা; সঠিক মান প্রতিটি type-এর পাতায় দেখে নিন।

Familyসাধারণ vCPU : GiBকোন কাজেAWSAzureGoogle Cloud
General purpose১ : ৪Web app, ছোট databasemDn2-standard
Compute optimized১ : ২Batch, encoding, ব্যস্ত APIcFc3-highcpu
Memory optimized১ : ৮ বা বেশিDatabase, cache, analyticsr, xE, Mn2-highmem, m3
Storage optimizedLocal NVMe প্রধানSearch, log, replicated databasei, dLz3
GPU / acceleratedGPU বা বিশেষ chip যুক্তAI training, inference, videop, gNa3, g2

তিন provider-এর নাম ভেঙে পড়া

নামভেঙে পড়লেআকার
m7g.xlarge
(AWS)
m general, 7 generation, g নিজস্ব ARM chip (Graviton), xlarge size4 vCPU, 16 GiB
c7i.2xlarge
(AWS)
c compute, 7 generation, i Intel, 2xlarge size8 vCPU, 16 GiB
Standard_D4s_v5
(Azure)
D family, 4 vCPU, s premium storage সমর্থন, v5 version4 vCPU, 16 GiB
Standard_E8as_v5
(Azure)
E memory family, 8 vCPU, a AMD, s premium storage, v5 version8 vCPU, 64 GiB
n2-standard-4
(Google Cloud)
n2 series, standard memory-র অনুপাত, 4 vCPU4 vCPU, 16 GB
n2-highmem-8
(Google Cloud)
n2 series, highmem বেশি memory, 8 vCPU8 vCPU, 64 GB

AWS-এর অনেক family-তে আকারের সিঁড়ি দ্বিগুণ হয়ে চলে: large সাধারণত 2 vCPU, xlarge 4, 2xlarge 8. দামও মোটামুটি একই হারে বাড়ে, তাই দুটি ছোট VM আর একটি দ্বিগুণ VM-এর ঘণ্টার দাম প্রায়ই কাছাকাছি। নতুন generation প্রায়ই একই দামে বা কম দামে বেশি কাজ দেয়, তবে সেটি নিজের কাজে মেপে দেখাই ভালো। নতুন type-এর তালিকা আর অক্ষরের অর্থ বদলাতে থাকে, তাই ডকুমেন্ট মিলিয়ে নিন।

Type-এর দাম আর প্রাপ্যতা region-ভেদে আলাদা। সব type সব availability zone-এ থাকে না, আর চাহিদার সময়ে কোনো zone-এ জায়গা না-ও থাকতে পারে। Account-এর quota-ও আলাদা বাধা। তাই production নকশায় একটিমাত্র type আর একটিমাত্র zone-এর ওপর ভরসা করবেন না।

৩ · vCPU — আসলে কতটা CPU পাচ্ছেন

vCPU মানে virtual CPU. আধুনিক x86 server-এর একটি physical core সাধারণত দুটি hardware thread চালায়। Intel একে বলে Hyper-Threading, সাধারণ নাম SMT. Linux প্রতিটি thread-কে একটি আলাদা CPU হিসেবে দেখে। অনেক x86 instance-এ একটি vCPU মানে এই একটি thread. তাহলে 2 vCPU প্রায়ই একটি core-এর দুই thread, দুটি আলাদা core নয়।

একটি রান্নাঘরে একটি চুলা, কিন্তু দুজন রাঁধুনি। একজন পেঁয়াজ কাটার সময় অন্যজন চুলা ব্যবহার করেন, তাই একজনের চেয়ে কাজ বেশি হয়। কিন্তু দুজনেই একসাথে ভাজতে চাইলে চুলা একটিই। দুই thread-ও একই core-এর execution unit আর cache ভাগ করে। তাই ভারী CPU কাজে দুই thread আলাদা দুই core-এর সমান হয় না, আর কতটা পিছিয়ে থাকে তা কাজের ধরনের ওপর নির্ভর করে।

সব জায়গায় নিয়মটি এক নয়। ARM-ভিত্তিক instance-এ, যেমন AWS Graviton-এ, সাধারণত একটি vCPU একটি পুরো physical core, কারণ এই chip-এ SMT নেই। AMD-র কিছু নতুন generation-এও provider vCPU-কে পুরো core হিসেবে দেয়। তাই “৪ vCPU” দুটি ভিন্ন type-এ একই শক্তি বোঝায় না। Linux-এ দেখার পরিচিত উপায় lscpu:

$ lscpu | grep -E 'Architecture|^CPU\(s\)|Thread|Core'
Architecture:          x86_64
CPU(s):                4
Thread(s) per core:    2
Core(s) per socket:    2

এটি নমুনা আউটপুট, যন্ত্র আর version-ভেদে আলাদা হবে। এখানে 4 vCPU আসলে 2 core × 2 thread.

x86 বনাম ARM

বিষয়x86-64 (Intel, AMD)ARM64 (Graviton, Ampere, Axion)
দামদীর্ঘদিনের ডিফল্টProvider প্রায়ই তুলনামূলক কম দাম দেখায়; নিজের হিসাব করুন
Softwareপ্রায় সবকিছু তৈরি পাওয়া যায়বেশিরভাগ Linux stack চলে, কিন্তু কিছু binary নেই
Image আর containeramd64arm64-এর আলাদা build লাগে; multi-arch image সহজ করে
ঝুঁকিকমপুরোনো native library, x86-নির্দিষ্ট optimization

Python, Node.js বা Java-র মতো ভাষায় বদল প্রায়ই সহজ, যতক্ষণ native library-র ARM build আছে। Provider-এর “৩০% কম খরচ” ধরনের দাবি বিজ্ঞাপন হিসেবে পড়ুন, আর নিজের কাজ চালিয়ে মাপুন: প্রতি ডলারে কতগুলো অনুরোধ সামলানো গেল।

৪ · Burstable instance আর CPU credit

অনেক কাজ সারাদিন প্রায় অলস থাকে, মাঝে মাঝে হঠাৎ ব্যস্ত হয়: ছোট blog, অফিসের ভেতরের টুল, dev server. এদের জন্য পুরো vCPU সারাক্ষণ ধরে রাখা অপচয়। Burstable instance তাই কম দামে একটি baseline দেয়, আর বাড়তি দরকার হলে জমানো CPU credit খরচ করে ওপরে উঠতে দেয়। AWS-এর t family আর Azure-এর B series এই ধারণায় চলে। Google Cloud-এর shared-core type, যেমন e2-medium, ও bursting দেয়, তবে নিয়ম একই রকম নয়।

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

হিসাবের নিয়ম

AWS-এর সংজ্ঞায় ১ credit = ১ vCPU ১০০% গতিতে ১ মিনিট। ধরে নিই একটি VM-এর 2 vCPU, আর baseline প্রতি vCPU-তে ২০%.

  • প্রতি ঘণ্টার আয়: 2 × 0.20 × 60 = 24 credit.
  • প্রতি ঘণ্টার খরচ: vCPU × CPU ব্যবহার × 60. ৮০% ব্যবহারে 2 × 0.80 × 60 = 96 credit.
  • নিট: 24 − 96 = −72 credit প্রতি ঘণ্টায়।
  • জমার সীমা: ধরে নিই ২৪ ঘণ্টার আয়, 24 × 24 = 576 credit. এর বেশি জমে না।
  • কতক্ষণ টিকবে: জমা 304 হলে 304 ÷ 72 ≈ 4.22 ঘণ্টা, অর্থাৎ প্রায় ৪ ঘণ্টা ১৩ মিনিট।

নিচের simulator একটি পুরো দিন চালায়। রাতে ৫%, দিনে ১৫%, সন্ধ্যা ৬টা থেকে রাত ১১টা পর্যন্ত ৮০%, শেষ ঘণ্টায় ২০%. শুরুর জমা ১০০ ধরা হয়েছে। আগে নিজে অনুমান করুন credit কখন ফুরাবে।

// Burstable VM: credit balance over one day (simplified, no-overage mode).
// Assumed VM: 2 vCPU, baseline 20% per vCPU. 1 credit = 1 vCPU at 100% for 1 minute.
const VCPU = 2, BASELINE = 0.20, START = 100;
const EARN = Math.round(VCPU * BASELINE * 60);  // credits earned per hour
const CAP = EARN * 24;                          // assumed cap: one day of earning
const load = h => (h < 8 ? 5 : h < 18 ? 15 : h < 23 ? 80 : 20);  // wanted CPU %

let balance = START, unserved = 0;
console.log("earn", EARN, "per hour, cap", CAP, ", start", START);
console.log("hour want% got% balance note");
for (let h = 0; h < 24; h++) {
  const want = VCPU * 60 * load(h) / 100;       // credits this hour would use
  const spend = Math.min(want, balance + EARN); // cannot spend more than exists
  balance = Math.min(CAP, balance + EARN - spend);
  unserved += want - spend;
  const got = 100 * spend / (VCPU * 60);
  const note = spend < want ? "THROTTLED" : "";
  console.log(String(h).padStart(4), String(load(h)).padStart(5),
    got.toFixed(1).padStart(5), String(Math.round(balance)).padStart(7), note);
}
console.log("work not served today:", Math.round(unserved), "credits");
// Try: VCPU = 4 with the same percentages, or BASELINE = 0.40, or 80 -> 60.

প্রথম লাইন earn 24 per hour, cap 576 , start 100 ওপরের হিসাবই। রাতে আর দিনে খরচ আয়ের কম, তাই ১৭ নম্বর ঘণ্টা শেষে জমা 304. তারপর প্রতি ঘণ্টায় 72 করে কমে: 232, 160, 88, 16. আসল ঘটনা এই সারিতে:

  22    80  33.3       0 THROTTLED

আপনার কাজ ৮০% চেয়েছে, কিন্তু সেই ঘণ্টার গড়ে পেয়েছে ৩৩.৩%, কারণ জমা 16 আর আয় 24 মিলে খরচ করার ছিল মাত্র 40 credit. দিনের শেষে work not served today: 56 credits: এটি 96 − 40. দুপুরের গ্রাফে সব ঠিক দেখাচ্ছিল, আর গড় CPU-ও ভয়ের ছিল না। বিপদটি জমা-র গ্রাফে আগে থেকেই দেখা যেত।

এবার সন্ধ্যার সেই সময়টি ধীরে দেখা যাক। “পরে” চাপুন আর জমা-র ঘরটি লক্ষ করুন।

1earn  = 24 credit/h2spend = 96 credit/h (80%)3time left = balance / 724if balance == 0: CPU = 20%5spend = earn: balance stays 0
এই মুহূর্তে
ঘড়ি
চাওয়া CPU
পাওয়া CPU
Credit জমা
বাকি পড়া কাজ (credit)
  1. ১৮:০০, ভিড় শুরু। জমা ৩০৪. CPU ৮০% চাইছে, তাই খরচ ৯৬, আয় ২৪, নিট −৭২ প্রতি ঘণ্টায়। ব্যবহারকারী কিছুই টের পাচ্ছেন না।
  2. ১৯:০০। জমা ২৩২. সব গ্রাফ সবুজ। শুধু credit-এর গ্রাফ ধীরে নামছে।
  3. ২০:০০। জমা ১৬০. এই গতিতে আর প্রায় ২.২ ঘণ্টা চলবে। এখানে একটি alert থাকলে ব্যবস্থা নেওয়ার সময় পাওয়া যায়।
  4. ২১:০০। জমা ৮৮. এখনো ৮০% পাওয়া যাচ্ছে, তাই বাইরে থেকে সমস্যা বোঝা যায় না।
  5. ২২:০০। জমা ১৬. 16 ÷ 72 ঘণ্টা, অর্থাৎ প্রায় ১৩ মিনিট বাকি।
  6. প্রায় ২২:১৩, দেয়াল। জমা ০. CPU ৮০% থেকে baseline ২০%-এ নামল। এই মডেলে নামা এক ধাক্কায়, আসলে AWS-এর নথি অনুযায়ী ধাপে ধাপে, তবে অল্প সময়েই। খরচ এখন আয়ের সমান। অনুরোধ জমতে শুরু করল, আর latency বাড়ছে। অথচ VM-এর ভেতরে কোনো error নেই।
  7. ২৩:০০, ভিড় শেষ। চাহিদা ২০%, যা baseline-এর সমান, তাই জমা শূন্যেই থাকে। মাঝের প্রায় ৪৭ মিনিটে ৫৬ credit পরিমাণ কাজ করা যায়নি। Queue থাকলে সেই কাজ দেরিতে হবে, না থাকলে অনুরোধ timeout হয়ে হারাবে।

কিছু provider-এ overage-এর পথ আছে। লেখার সময়ে AWS T3 আর T4g-তে unlimited mode ডিফল্ট (পুরোনো T2-তে standard): জমা ফুরালেও CPU ওপরে থাকে, আর বাড়তি অংশের জন্য টাকা কাটে। এতে throttling এড়ানো যায়, কিন্তু টানা ব্যস্ত VM-এ বিল এমন হতে পারে যে সাধারণ VM-ই সস্তা ছিল। নিয়ম আর ডিফল্ট type-ভেদে আলাদা, তাই নিজের type-এর ডকুমেন্ট দেখুন।

নিয়ম হিসেবে মনে রাখুন: গড় CPU baseline-এর নিচে আর ছোট ছোট ভিড়, এমন কাজেই burstable ভালো। Production-এ চালালে credit balance-এর ওপর alert রাখুন। আর টানা কাজ, যেমন batch, video বা ব্যস্ত database, burstable-এ চালাবেন না।

৫ · Shared host, dedicated host আর noisy neighbour

সাধারণ VM multi-tenant: একই host-এ অন্য গ্রাহকও থাকেন। Hypervisor তাঁদের ডেটা আলাদা রাখে, কিন্তু কিছু সম্পদ সবাই ভাগ করেন: CPU-র shared cache, memory-র পথ, host-এর network. তাই পাশের ভাড়াটিয়া ব্যস্ত হলে আপনার কাজের গতি একটু কাঁপতে পারে। এই সমস্যার নাম noisy neighbour. পাশের ঘরে বিয়েবাড়ির সাউন্ড বক্স বাজলে আপনার ঘরের তালা ঠিকই থাকে, শুধু পড়াশোনায় মন বসে না।

আধুনিক dedicated-CPU type-এ এই সমস্যা অনেক কম, কারণ vCPU সাধারণত নির্দিষ্ট core-এ বাঁধা থাকে। Burstable আর shared-core type-এ এটি বেশি দেখা যায়, কারণ সেখানে CPU ভাগ করার জন্যই কম দাম। লক্ষণ হলো steal time (পর্ব ১১), অর্থাৎ VM চলতে চেয়েছিল কিন্তু hypervisor অন্য কাউকে CPU দিয়েছিল। Latency-র অকারণ ওঠানামাও একটি ইঙ্গিত, তবে আগে নিজের অ্যাপ বাদ দিন। Stop করে আবার start করলে VM সাধারণত অন্য host-এ যায়, তাই এটি একটি সহজ পরীক্ষা, অবশ্য ডাউনটাইমের দামে।

ধরনযা পানকখননাম
Shared (সাধারণ)Host-এ অন্য গ্রাহকও থাকেনপ্রায় সব কাজডিফল্ট
Shared-coreCPU-ও ভাগে, সবচেয়ে সস্তাDev, ছোট sitet, B, e2-micro
Dedicated hostপুরো physical host শুধু আপনারSocket-ভিত্তিক software license, নিয়ন্ত্রক শর্তAWS Dedicated Hosts, Azure Dedicated Host, Google sole-tenant node

Dedicated host-এ আপনি সাধারণত পুরো host-এর দাম দেন, VM কম চললেও। আর এটি নিজে থেকে বেশি নিরাপত্তা দেয়, এমন ধরে নেবেন না। Provider-এর নিয়ন্ত্রক স্তর, আপনার configuration আর আপনার অ্যাপের ভুল আগের মতোই থাকে। আগে কারণটি লিখুন, তারপর খরচের হিসাব করুন।

৬ · Disk আর network — boot volume, instance store আর bandwidth

ছবি ১৫.১-এ দুই রকম disk দেখেছেন। পার্থক্যটি এই পর্বের সবচেয়ে দামি কথা।

Boot volume (network-attached)

Boot volume হলো OS থাকা disk. এটি সাধারণত block storage-এ থাকে: AWS EBS, Azure Managed Disk, Google Persistent Disk. Host নষ্ট হলেও ডেটা বাঁচে, আর অন্য VM-এ লাগানো যায়। প্রতিটি read network পেরিয়ে যায়, তাই latency একটু বেশি।

গুদামঘরে রাখা মাল

Instance store (local)

Instance store হলো host-এর সাথেই লাগানো NVMe SSD. এটি ephemeral, অর্থাৎ ক্ষণস্থায়ী। খুব দ্রুত, আর অনেক type-এ এর দাম instance-এর মধ্যেই ধরা। কিন্তু VM ওই host ছাড়লেই ডেটা নেই। Azure-এ temporary disk, Google Cloud-এ Local SSD.

মেসের ঘরের টেবিলে রাখা মাল

ডেটা কেন হারায়? কোনো জাদু নয়, শুধু পদার্থবিদ্যা। Disk-টি একটি নির্দিষ্ট host-এ স্ক্রু দিয়ে লাগানো। Stop করলে আপনার VM সেই host-এর জায়গা ছেড়ে দেয়, পরের গ্রাহক সেখানে আসতে পারেন, তাই provider সেই disk মুছে ফেলে। পরে start করলে VM হয়তো অন্য host-এ উঠবে, যেখানে খালি অন্য একটি disk আছে। Reboot-এ VM একই host-এ থাকে, তাই ডেটা সাধারণত টিকে থাকে।

তাহলে এত ঝুঁকি নিয়ে instance store কেন? কারণ কিছু কাজে ডেটা অন্য জায়গায় আগে থেকেই আছে: cache, temporary ফাইল, batch-এর মধ্যবর্তী ফলাফল, অথবা তিনটি node-এ replicate করা database. একটি node গেলে বাকিরা তাকে আবার ভরে দেয়। Boot volume-এর ক্ষেত্রে আরেকটি সেটিং মনে রাখুন: delete on termination. অনেক সময় এটি boot volume-এ ডিফল্টে চালু থাকে, তাই VM মুছলে disk-ও যায়। আলাদা data volume-এ অনেক সময় বন্ধ থাকে, তাই disk রয়ে যায় আর বিল চলতে থাকে।

Network bandwidth-ও instance-এর অংশ

VM কত দ্রুত network-এ কথা বলবে, তা তার type-এর সাথে বাঁধা। ছোট type সাধারণত কম পায়। অনেক জায়গায় “Up to 10 Gbps” লেখা থাকে। এর মানে সর্বোচ্চ সীমা, নিশ্চিত গতি নয়; বেশিক্ষণ টানলে baseline-এ নেমে আসতে পারে। Block storage-এর ট্রাফিকও অনেক type-এ আলাদা সীমায় চলে। তাই disk দ্রুত কিনেও লাভ নাও হতে পারে, যদি instance সেই IOPS বা গতি বহন করতে না পারে। Instance আর disk, দুটির মধ্যে যেটি ছোট, সেটিই সীমা।

একটি হিসাব। ৫০০ GB ডেটা 1 Gbps-এ কপি করতে কত সময়? 500 × 10⁹ × 8 bit ÷ 10⁹ bit/s = 4000 সেকেন্ড, অর্থাৎ প্রায় ১ ঘণ্টা ৭ মিনিট, আর protocol-এর বাড়তি অংশ ধরলে আরও বেশি। আর 1 Gbps = 125 MB/s, তাই disk 1000 MB/s দিতে পারলেও network-এই আটকে যাবে।

৭ · VM-এর জীবনচক্র — boot, অবস্থা, খরচ আর IP

একটি VM তৈরির কমান্ডের পরে ভেতরে কী হয়, তা ধাপে ধাপে দেখি। সময়গুলো নমুনা, আসল সময় provider, image আর region-ভেদে আলাদা।

  1. APIঅনুমতি
  2. Hostজায়গা
  3. Disk, IPসংযোগ
  4. BootKernel
  5. Initcloud-init
  6. প্রস্তুতHealth check
t = 0 sstate: pending
RunInstances  type=gen.large  zone=a
Identity OK   Quota OK
InstanceId: i-0123456789abcdef0
t ≈ 2 sstate: pending
host-17  free 1 vCPU    no
host-42  free 6 vCPU    picked
host-58  type mismatch  no
t ≈ 8 sstate: pending
boot volume  50 GB from image
private IP   10.0.1.25
public IP    203.0.113.7
t ≈ 15 sstate: running
firmware -> bootloader -> kernel
billing starts around here
SSH: not yet
t ≈ 35 sstate: running
cloud-init: read instance metadata
cloud-init: install SSH public key
cloud-init: run user-data script
t ≈ 60 sstate: running
sshd: listening on port 22
app : listening on port 3000
GET /healthz 200
  1. API call. Control plane অনুরোধ পেল। পরিচয় আর অনুমতি (পর্ব ৩১), quota আর অনুরোধের মান যাচাই হলো। সঙ্গে সঙ্গে একটি instance id ফিরল, অবস্থা pending. ID পাওয়া মানে VM তৈরি হয়ে গেছে, এমন নয়।
  2. Host বাছাই। Scheduler ওই zone-এ এমন host খোঁজে যেখানে এই type-এর জায়গা আছে। host-17-এ জায়গা কম, host-58-এ অন্য hardware, তাই host-42 বাছাই হলো। জায়গা না পেলে এখানেই “insufficient capacity” ধরনের error আসে।
  3. Disk আর network. Machine image থেকে ৫০ GB boot volume তৈরি হয়ে VM-এর সাথে যুক্ত হলো। Subnet থেকে private IP 10.0.1.25 এলো, আর চাওয়া থাকায় public IP 203.0.113.7.
  4. Boot. Hypervisor VM চালু করল। Firmware, bootloader, তারপর kernel. অবস্থা এখন running, আর বিল সাধারণত এখান থেকেই শুরু। কিন্তু running মানে OS প্রস্তুত নয়: SSH এখনো সাড়া দেয় না।
  5. cloud-init. প্রথম boot-এ এই প্রোগ্রাম metadata পড়ে, SSH public key বসায়, আর আপনার user data script চালায়। এর বিস্তারিত পর্ব ১৬-এ।
  6. প্রস্তুত। sshd আর অ্যাপ চালু, health check /healthz-এ 200 পেল। শুধু এখনই ট্রাফিক পাঠানো উচিত। এই ক্রমটি পর্ব ১৭-এর autoscaling-এ আবার লাগবে।

তিন provider-এ একই কাজের কমান্ড নিচে আছে। এগুলো উদাহরণ; চালালে সত্যিকারের resource তৈরি হয় আর টাকা লাগতে পারে। Account থাকলেও চালানো জরুরি নয়। চালালে budget alert রাখুন (পর্ব ৬), আর শেষে অবশ্যই মুছে দিন।

# AWS: --dry-run checks permission and validity, creates nothing
aws ec2 run-instances --dry-run --image-id ami-0123456789abcdef0 \
  --instance-type t3.micro --subnet-id subnet-0123456789abcdef0

# Azure (the resource group must exist first)
az group create --name demo-rg --location southeastasia
az vm create --resource-group demo-rg --name web-1 \
  --image Ubuntu2404 --size Standard_B2s --generate-ssh-keys

# Google Cloud
gcloud compute instances create web-1 --zone=asia-south1-a \
  --machine-type=e2-medium \
  --image-family=ubuntu-2404-lts-amd64 --image-project=ubuntu-os-cloud

# Clean-up (deletes for good; the az line removes the whole group,
# because "az vm delete" alone leaves the disk, NIC and public IP behind)
aws ec2 terminate-instances --instance-ids i-0123456789abcdef0
az group delete --name demo-rg
gcloud compute instances delete web-1 --zone=asia-south1-a

পাঁচটি মূল অবস্থা, আর কোনটিতে কী বিল

নিচের lifecycle ছকটি AWS-এর নামে লেখা, কারণ এই নামগুলোই সবচেয়ে পরিচিত। বিলের কলামটি ধারণা হিসেবে পড়ুন; সঠিক নিয়ম, যেমন প্রতি সেকেন্ডে হিসাব আর ন্যূনতম সময়, provider আর OS-ভেদে আলাদা।

অবস্থাঅর্থCompute বিলDisk আর static IP বিল
pendingতৈরি হচ্ছে বা আবার চালু হচ্ছেসাধারণত নাDisk তৈরি হলে শুরু
runningHost-এ চলছেহ্যাঁহ্যাঁ
stoppingShutdown চলছেসাধারণত নাহ্যাঁ
stoppedHost ছেড়েছে, disk আছেসাধারণত নাহ্যাঁ
terminatedমুছে গেছে, ফেরানো যায় নানারয়ে যাওয়া disk আর IP-র হ্যাঁ

একই শব্দ সব জায়গায় একই অর্থ দেয় না। Azure: OS-এর ভেতর থেকে shutdown করলে VM “Stopped” হয়, কিন্তু host-এর জায়গা ধরে রাখে, তাই compute বিল চলতেই থাকে। বিল থামাতে “Stopped (deallocated)” চাই। Google Cloud: stop করলে অবস্থা দেখায় TERMINATED, যদিও VM মুছে যায়নি; মুছতে হলে delete. কমান্ডের নাম দেখে আন্দাজ না করে ডকুমেন্ট মিলিয়ে নিন।

Hibernation তৃতীয় একটি পথ: RAM-এর ছবি boot volume-এ লিখে বন্ধ হওয়া, আর পরে সেখান থেকেই ফেরা। সব type আর image এটি সমর্থন করে না। আর ভুল করে মোছা ঠেকাতে termination protection রাখা যায়: AWS-এ termination protection, Google Cloud-এ deletion protection, Azure-এ resource lock.

Stop আর terminate-এ কী থাকে, কী যায়

নিচের stepper একটি VM-কে পাঁচটি কাজের মধ্য দিয়ে নেয়। এর একটি boot volume আছে, একটি আলাদা data volume আছে (delete on termination বন্ধ), আর একটি instance store. প্রতিটি ধাপে সারিগুলো মিলিয়ে দেখুন। মানগুলো AWS-এর সাধারণ আচরণ ধরে লেখা।

1run-instances2reboot-instances3stop-instances4start-instances5terminate-instances
VM-এর জিনিসপত্র
RAM
Instance store
Boot volume
Data volume
Private IP
Auto public IP
Compute বিল
Disk বিল
  1. চলছে। সব জিনিস আছে। ঠিকানা দুটি: ভেতরের 10.0.1.25 আর বাইরের 203.0.113.7. দুটি volume-এর বিল আর compute বিল, সবই চলছে।
  2. Reboot. OS নতুন করে শুরু হলো, তাই RAM-এর সব গেল। কিন্তু VM একই host-এ আছে। Instance store, দুটি IP, সবই আগের মতো।
  3. Stop. VM host ছেড়ে দিল। RAM নেই, instance store মুছে গেছে, স্বয়ংক্রিয় public IP ফেরত গেছে। Private IP আর দুটি volume রয়ে গেছে। Compute বিল বন্ধ, disk বিল চলছে।
  4. Start. VM সম্ভবত অন্য host-এ উঠল। Instance store খালি disk হিসেবে এসেছে, মাউন্ট আর ফরম্যাট আবার করতে হতে পারে। Private IP আগেরটিই, কিন্তু public IP বদলে 203.0.113.44. DNS-এ আগের ঠিকানা থাকলে site পড়ে যাবে।
  5. Terminate. VM গেল, ফেরানোর পথ নেই। Boot volume ডিফল্টে তার সাথেই মুছে গেল। Data volume কারও সাথে যুক্ত নয়, কিন্তু আছে, আর তার বিলও চলছে। এমন idle resource খুঁজে মুছে ফেলা নিয়মিত কাজ।

Public আর private IP

Private IP VM-এর network interface-এ সত্যিই থাকে, আর সাধারণত VM যতদিন আছে ততদিন একই থাকে। Public IP সাধারণত VM-এর OS-এ দেখা যায় না; provider-এর network তাকে private IP-তে NAT করে। তাই ঠিকানাটি বদলানো সহজ। স্থির ঠিকানা চাইলে আলাদা resource নিতে হয়: static public IP. AWS-এ Elastic IP, Azure-এ static public IP address, Google Cloud-এ static external IP. এটি VM-এর জীবন থেকে আলাদা, stop আর terminate-এও আপনার থাকে, আর তাই বিলও চলতে পারে। অনেক provider এখন public IPv4-এর জন্য আলাদা টাকা নেয়। Route আর subnet-এর বিস্তারিত পর্ব ২৫ আর ২৬-এ আসবে।

বিলের হিসাব

এবার সব টাকায় রূপান্তর করি। ধরে নিই VM ঘণ্টায় $০.১০, disk প্রতি GB-মাসে $০.১০, snapshot $০.০৫, static IP ঘণ্টায় $০.০০৫. Boot volume ৫০ GB, data volume ২০০ GB. এগুলো সব অনুমিত সংখ্যা, আসল দাম provider-এর pricing পাতায় দেখুন।

// Monthly bill of one VM's resources in different end states (720-hour month).
// All prices are assumed round numbers: check the provider's pricing page.
const VM_PER_HOUR = 0.10, DISK_GB_MONTH = 0.10, SNAP_GB_MONTH = 0.05;
const IP_PER_HOUR = 0.005, HOURS = 720;
const BOOT_GB = 50, DATA_GB = 200, SNAP_GB = 30;

const scenarios = [
  // name, VM hours, boot disk?, data disk?, static IP?, snapshot?
  ["running all month",     720, 1, 1, 1, 0],
  ["office hours only",     220, 1, 1, 1, 0],
  ["stopped all month",       0, 1, 1, 1, 0],
  ["terminated, leftovers",   0, 0, 1, 1, 0],
  ["terminated, snapshot",    0, 0, 0, 0, 1],
  ["terminated, all clean",   0, 0, 0, 0, 0],
];

function bill([, vmH, boot, data, ip, snap]) {
  const vm = vmH * VM_PER_HOUR;
  const disk = (boot * BOOT_GB + data * DATA_GB) * DISK_GB_MONTH;
  const addr = ip * IP_PER_HOUR * HOURS;
  const snapshot = snap * SNAP_GB * SNAP_GB_MONTH;
  return { vm, disk, addr, snapshot, total: vm + disk + addr + snapshot };
}

console.log("state".padEnd(24), "vm".padStart(6), "disk".padStart(6),
  "ip".padStart(5), "snap".padStart(5), "total".padStart(7));
for (const s of scenarios) {
  const b = bill(s);
  console.log(s[0].padEnd(24), b.vm.toFixed(2).padStart(6), b.disk.toFixed(2).padStart(6),
    b.addr.toFixed(2).padStart(5), b.snapshot.toFixed(2).padStart(5), b.total.toFixed(2).padStart(7));
}
const forgotten = 20 * bill(scenarios[2]).total * 12;
console.log("20 forgotten stopped VMs for a year: $" + forgotten.toFixed(2));

সারা মাস চালালে 100.60. Office-এর সময় ২২০ ঘণ্টা চালিয়ে বাকিটা stop রাখলে 50.60, অর্থাৎ প্রায় অর্ধেক। কিন্তু খেয়াল করুন stopped all month ... 28.60: VM একবারও না চললেও ২৮.৬০ ডলার। অনেকে ঠিক এখানেই ভুল করেন।

terminated, leftovers ... 23.60 সবচেয়ে বিপজ্জনক সারি। VM নেই, কনসোলের প্রধান পাতায় কিছু চোখে পড়ে না, অথচ data volume আর IP-র বিল আসছে। আর terminated, snapshot ... 1.50 দেখায় ভালো পথ: snapshot রেখে বাকি সব মোছা। শেষ লাইনে ২০টি ভুলে যাওয়া VM-এর হিসাব: 20 × 28.60 × 12 = $6864.00, বছরে শুধু বন্ধ রাখার দাম।

৮ · Metadata service, maintenance আর placement

Instance metadata service

VM-এর ভেতরের প্রোগ্রাম অনেক সময় নিজের সম্পর্কে জানতে চায়: আমার instance id কী, কোন zone, কোন role? এজন্য প্রতিটি VM-এর ভেতর থেকে একটি বিশেষ ঠিকানায় পৌঁছানো যায়: 169.254.169.254. এটি একটি link-local address, যা VM-এর বাইরে route হয় না। এই ব্যবস্থাই instance metadata service. cloud-init এখান থেকেই SSH key পড়ে। আর VM-এ যুক্ত instance role-এর temporary credential-ও এখান থেকেই আসে, যাতে কোডে কোনো key রাখতে না হয়।

এটিই ঝুঁকির জায়গা। ধরুন আপনার অ্যাপ ব্যবহারকারীর দেওয়া URL থেকে ছবি আনে, আর URL যাচাই করে না। তাহলে বাইরের কেউ অ্যাপকে দিয়ে ভেতরের ঠিকানায় অনুরোধ পাঠাতে পারে। এই ধরনের দুর্বলতার নাম SSRF (Server-Side Request Forgery). প্রথম দিকের metadata service সাধারণ GET-এই উত্তর দিত, তাই অ্যাপের এমন ভুল মানেই credential ফাঁসের ঝুঁকি। ২০১৯ সালে Capital One-এর তথ্য ফাঁসের প্রকাশিত বিবরণে এই ধরনের পথের কথা এসেছে।

সমাধান হিসেবে AWS ২০১৯ সালে IMDSv2 আনে। এতে আগে একটি আলাদা ধরনের অনুরোধে অল্প সময়ের session token নিতে হয়, তারপর সেই token header-এ পাঠাতে হয়। সাধারণ SSRF সাধারণত ইচ্ছামতো method আর header পাঠাতে পারে না, তাই পথটি অনেক কঠিন হয়। Token-এর উত্তরের hop limit ১ রাখলে VM-এর ভেতরের container থেকে পৌঁছানোও সাধারণত আটকে যায়। Azure আর Google Cloud নিজের মতো করে একটি বিশেষ header বাধ্যতামূলক রাখে (Metadata: true, Metadata-Flavor: Google).

# AWS: refuse old-style requests on one VM (fake id, sample only)
aws ec2 modify-instance-metadata-options \
  --instance-id i-0123456789abcdef0 \
  --http-tokens required --http-put-response-hop-limit 1

Live migration আর scheduled maintenance

Host-এরও patch লাগে, hardware-ও নষ্ট হয়। তখন আপনার VM-এর কী হয়? Live migration-এ VM চলতে চলতেই অন্য host-এ সরে যায়; মাঝে খুব অল্প থামা হতে পারে। কৌশলটি Operating Systems-এর পর্বে আছে। Clark ও সহকর্মীদের ২০০৫ সালের NSDI paper এর পরিচিত ভিত্তি।

Provider-ভেদে আচরণ আলাদা। Google Cloud-এ অনেক VM ডিফল্টে live migrate হয়, তবে GPU-র মতো কিছু ক্ষেত্রে থামাতে হতে পারে। Azure memory-preserving maintenance আর live migration ব্যবহার করে। AWS-এ সাধারণত scheduled maintenance বা retirement event-এর নোটিশ দেখা যায়, তখন আপনাকে সময়মতো stop-start করে অন্য host-এ যেতে হতে পারে। তাই metadata বা কনসোলের event-এ চোখ রাখুন, আর ধরে নিন যেকোনো VM যেকোনো দিন যেতে পারে। মনে রাখবেন, হঠাৎ hardware নষ্ট হলে migration-এর সুযোগই নেই।

Placement group

সাধারণত provider ঠিক করে VM কোন host-এ বসবে। Placement group দিয়ে আপনি শুধু একটি ইচ্ছা জানান: VM-গুলো কাছাকাছি বসবে, না দূরে দূরে। AWS-এর নামে তিন ধরন:

ধরনযা করেকোন কাজেদাম
Clusterএকই জায়গায় কাছাকাছিHPC, AI training, কম latencyএক ঘটনায় সব যেতে পারে
Spreadপ্রতিটি VM আলাদা hardware-এঅল্প কয়েকটি জরুরি VMVM-এর সংখ্যায় কড়া সীমা
PartitionVM-এর দল আলাদা rack-এReplica-সহ বড় database, KafkaSoftware-কে partition জানতে হয়

Azure-এ proximity placement group আর availability set, Google Cloud-এ compact আর spread placement policy একই ধরনের কাজ করে। আসল কথা failure domain: গতি চাইলে কাছাকাছি, টিকে থাকা চাইলে দূরে। দুটি একসাথে পুরোপুরি পাওয়া যায় না।

৯ · VM-এর আকার ঠিক করা — মেপে, আন্দাজে নয়

নতুনদের সাধারণ অভ্যাস: “বড়টাই নিই, নিরাপদ।” এতে over-provisioning হয়, মানে প্রতি মাসে অকারণ টাকা। ক্লাউডে বদলানো সহজ বলেই শুরুতে অনুমান করা যায়, তারপর মেপে ঠিক করতে হয়। চারটি জিনিস মাপুন: CPU, memory, disk I/O আর network. কোনটি আগে ফুরায়, সেটিই আপনার সীমা।

গড় দেখলে ভিড় ঢেকে যায়, আর সর্বোচ্চ দেখলে একবারের spike-এ সব ঠিক হয়। তাই সাধারণ পথ percentile, বিশেষত p95. নিচের Bash block একটি 4-vCPU VM-এর এক দিনের ২০টি নমুনা থেকে গড়, p95 আর সর্বোচ্চ বের করে। ডেটা বানানো, এবং block-এর ভেতরেই আছে।

#!/usr/bin/env bash
# p95 of a day's samples from a 4-vCPU VM. The data is a made-up sample.
set -euo pipefail
cat > metrics.csv <<'EOF'
time,cpu_pct,mem_gib,iops,net_mbps
00:00,18,7.4,1800,120
01:12,16,7.4,1500,100
02:24,97,8.2,11800,1400
03:36,14,7.3,1300,90
04:48,15,7.3,1400,95
06:00,20,7.5,2000,160
07:12,28,7.8,2900,260
08:24,38,8.1,3900,410
09:36,47,8.4,4800,560
10:48,52,8.6,5400,640
12:00,58,8.8,6100,730
13:12,55,8.7,5800,700
14:24,60,8.9,6600,790
15:36,62,9.1,7200,850
16:48,57,8.8,6200,740
18:00,49,8.5,5100,600
19:12,44,8.3,4500,520
20:24,36,8.0,3600,380
21:36,27,7.7,2700,240
22:48,21,7.5,2100,170
EOF
summary() {  # column number -> average, nearest-rank p95, maximum
  tail -n +2 metrics.csv | cut -d, -f"$1" | sort -n | awk '{ v[NR] = $1; s += $1 }
    END { r = int(NR * 0.95 + 0.999); printf "%.1f %s %s\n", s / NR, v[r], v[NR] }'
}
echo "metric avg p95 max"
n=2
for name in cpu_pct mem_gib iops net_mbps; do echo "$name $(summary "$n")"; n=$((n + 1)); done
summary 2 | awk '{ printf "p95 CPU on 4 vCPU = %.2f vCPU\n", 4 * $2 / 100 }'

cpu_pct 40.7 62 97 তিন রকম গল্প বলে। গড় ৪০.৭% ধরলে মনে হবে 4 × 0.407 ≈ 1.6 vCPU-ই যথেষ্ট, আর দুপুরে VM ভরে যাবে। সর্বোচ্চ ৯৭% এসেছে রাত ২:২৪-এর একটি নমুনা থেকে, হয়তো backup job, যার জন্য সবকিছু বড় করা অপচয়। মাঝের p95 CPU on 4 vCPU = 2.48 vCPU বাস্তব দৈনিক চাপ। একইভাবে iops-এ 7200 আর network-এ 850. তবে p95 অন্ধভাবে নেবেন না: কোনো spike ব্যবহারকারীর সামনের কাজে হলে সেটি গুরুত্বপূর্ণ।

এবার মাপা মানকে type-এ রূপান্তর। প্রতিটি সীমার ৭০% পর্যন্ত ব্যবহারের লক্ষ্য রাখা হলো, যাতে ভিড় আর নতুন বৃদ্ধির জায়গা থাকে। সূত্র: দরকার = মাপা p95 ÷ 0.70. ক্যাটালগের নামগুলো কাল্পনিক, দামও অনুমিত।

// Pick the cheapest type that fits measured p95 values plus headroom.
// Fictional catalogue. Prices are assumed: check the provider's pricing page.
const types = [
  ["gen.large",   2,  8, 10000,  1250, 0.10],
  ["cpu.xlarge",  4,  8, 20000,  2500, 0.17],
  ["gen.xlarge",  4, 16, 20000,  2500, 0.20],
  ["mem.xlarge",  4, 32, 20000,  2500, 0.26],
  ["net.xlarge",  4, 16, 20000, 12500, 0.28],
  ["cpu.2xlarge", 8, 16, 40000,  5000, 0.34],
  ["gen.2xlarge", 8, 32, 40000,  5000, 0.40],
].map(([name, vcpu, mem, iops, mbps, usd]) => ({ name, vcpu, mem, iops, mbps, usd }));

const TARGET = 0.70;   // keep p95 at or below 70% of each limit
const dims = ["vcpu", "mem", "iops", "mbps"];

function size(job) {
  const need = {};
  for (const d of dims) need[d] = job[d] / TARGET;
  const fits = t => dims.every(d => t[d] >= need[d]);
  const best = types.filter(fits).sort((a, b) => a.usd - b.usd)[0];
  const shown = dims.map(d => d + "=" + need[d].toFixed(d === "vcpu" ? 2 : 0));
  console.log(job.name, "needs", shown.join(" "));
  if (!best) return console.log("  no type fits: split the work or scale out");
  const month = (best.usd * 720).toFixed(0);
  console.log("  pick", best.name, "at $" + best.usd + "/h, about $" + month + "/month");
}

size({ name: "web-app",    vcpu: 2.48, mem: 8.9, iops: 7200, mbps: 850 });
size({ name: "cache",      vcpu: 1.1,  mem: 20,  iops: 900,  mbps: 700 });
size({ name: "batch",      vcpu: 5.0,  mem: 7,   iops: 3000, mbps: 400 });
size({ name: "video-edge", vcpu: 2.0,  mem: 6,   iops: 2000, mbps: 3000 });
size({ name: "huge-db",    vcpu: 7.0,  mem: 60,  iops: 35000, mbps: 2000 });

web-app needs vcpu=3.54 mem=13 iops=10286 mbps=1214: gen.large CPU-তেই বাদ, আর cpu.xlarge-এর 8 GiB memory কম। তাই gen.xlarge. বাকি উদাহরণে কাজের ধরন family ঠিক করে দেয়: cache memory-র কারণে mem.xlarge, batch CPU-র কারণে cpu.2xlarge, আর video-edge-এর CPU কম হলেও 4286 Mbps চাই বলে net.xlarge. huge-db-এ no type fits: তালিকার সবচেয়ে বড় VM-ও চলছে না। তখন বড় type খুঁজতে হবে, অথবা কাজ ভাগ করতে হবে। মনে রাখবেন, এই হিসাব disk-এর নিজের সীমা ধরে না।

ব্যবহারিক ক্রম

  1. একটি যুক্তিসঙ্গত ছোট আকার দিয়ে শুরু করুন।
  2. অন্তত একটি পুরো ব্যবসায়িক চক্র (সপ্তাহ বা মাস) মাপুন, শুধু একটি শান্ত দিন নয়।
  3. Memory-র মাপে নজর দিন। Cloud-এর ডিফল্ট VM metric-এ OS-এর memory প্রায়ই থাকে না, তাই agent লাগতে পারে। page cache-কে ব্যবহৃত ধরে নেবেন না (পর্ব ১১)।
  4. Load test করে দেখুন আসলে কোনটি আগে ভরে যায় (পর্ব ৬৮)।
  5. একটি ধাপ বদলান, মাপুন, লিখে রাখুন। Resize করতে সাধারণত stop-start লাগে, তাই সময় ঠিক করে নিন।
  6. একটি বড় VM-এর বদলে কয়েকটি ছোট VM, এ প্রশ্নও ভাবুন (পর্ব ১৭)। Discount আর spot-এর হিসাব পর্ব ৭২-এ, নিয়মিত rightsizing পর্ব ৭৩-এ।

আরও গভীরে: Provider-এর কাছে instance type একটি bin packing সমস্যা: নানা মাপের VM যত কম host-এ সম্ভব ভরা। Google-এর Borg paper (২০১৫) এ ধরনের packing-এর গুরুত্ব দেখায়। বড় VM-এ NUMA-র প্রভাবও আছে: একটি socket-এর CPU অন্য socket-এর memory-তে গেলে ধীর হয়, তাই একই vCPU সংখ্যায় আলাদা type আলাদা ফল দিতে পারে। আর SR-IOV network card-কে সরাসরি VM-এর সামনে এনে hypervisor-এর খরচ কমায়, যা উচ্চ bandwidth-এর পেছনের একটি বড় কারণ।

পরীক্ষা ও ইন্টারভিউতে:

  • Stop আর terminate-এর পার্থক্য? Stop-এ volume থাকে আর আবার চালানো যায়; terminate VM মুছে দেয়, ফেরানো যায় না।
  • Instance store-এর ডেটা কখন হারায়? Stop, terminate বা host ব্যর্থ হলে; সাধারণ reboot-এ থাকে।
  • Stop-এর পরে public IP কেন বদলায়? স্বয়ংক্রিয় public IP ছেড়ে দেওয়া হয়। স্থির ঠিকানার জন্য static IP লাগে।
  • Burstable VM হঠাৎ ধীর কেন? CPU credit ফুরিয়েছে, তাই CPU baseline-এ নেমেছে।
  • IMDSv2 কী বদলায়? Metadata পড়তে session token বাধ্যতামূলক করে, তাই সাধারণ SSRF থেকে credential পাওয়া কঠিন হয়।

১০ · AI-এর যুগে VM বাছাই আর চালানো

AI এক মিনিটে VM তৈরির script লিখে দেয়। সমস্যা হলো script চলবে, VM উঠবে, কিন্তু ভুলটি ধরা পড়বে মাসের শেষে বিলে, অথবা নিরাপত্তার ঘটনায়।

AI-এর ভুলফলযাচাই
নেই এমন instance type বা flag বানানোError, অথবা অন্য কিছু তৈরিProvider-এর type তালিকা, --help
“Stop করলে খরচ শূন্য” বলাDisk আর IP-র বিল চলতে থাকেBilling পাতা, budget alert
Instance store-এ database রাখাStop করলেই ডেটা নেইMount কোন disk-এর, তা মিলিয়ে দেখা
SSH-এর জন্য 0.0.0.0/0 খোলাসারা ইন্টারনেট থেকে চেষ্টানিজের IP বা session manager
Instance role-এ * অনুমতিছোট ভুলে পুরো account-এর ঝুঁকিLeast privilege, পর্ব ৩২
Metadata token ঐচ্ছিক রেখে দেওয়াSSRF-এর ঝুঁকি থেকে যায়http-tokens required
User data-তে পাসওয়ার্ড লেখাVM-এর ভেতরের যেকোনো process পড়তে পারেSecret manager, পর্ব ৩৩
Image-এর জায়গায় “latest” ধরনের অনির্দিষ্ট নামএকেকদিন একেক VMনির্দিষ্ট image id, পর্ব ১৬
সতর্কতা ছাড়া terminate বা বড় আকারডেটা হারানো, বিল বৃদ্ধিআগে --dry-run, আগে snapshot

AI-কে VM চাওয়ার সময় মাপা সংখ্যা, শর্ত আর যাচাইয়ের দাবি একসাথে দিন। আসল account id, key বা token দেবেন না।

আমার একটি web app-এর জন্য cloud VM বাছাই করতে সাহায্য করো। Provider: [নাম], region: [নাম]। মাপা p95 মান: CPU [..] vCPU, memory [..] GiB, disk IOPS [..], network [..] Mbps. ট্রাফিক দিনে একবার সন্ধ্যায় বাড়ে। শর্ত: ১. শুধু সত্যিই আছে এমন instance type বলো, আর কোন সরকারি পাতায় যাচাই করব তা জানাও। ২. দুটি বিকল্প দাও (একটি burstable, একটি সাধারণ), প্রতিটির ঝুঁকি বলো। ৩. দাম লিখলে বলো সেটি অনুমান, আর আমাকে pricing পাতা দেখতে বলো। ৪. Stop আর terminate করলে কোন ডেটা আর কোন খরচ থাকবে, তা আলাদা করে লেখো। ৫. Metadata token বাধ্যতামূলক রাখো, SSH 0.0.0.0/0 খুলো না, role-এ * দিও না। ৬. কোনো কমান্ড মোছে বা খরচ বাড়ায় তাহলে আগে সতর্ক করো, আর সম্ভব হলে --dry-run দেখাও। ৭. আমার কোনো secret চেও না।

AI-এর দেওয়া VM নকশা চালানোর আগে — চেকলিস্ট

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন — তারপর “→ উত্তর” চাপুন।

প্র ০১২০০৬ সালে একটি আকার ছিল, আজ শত শত। এত instance type কেন, আর এটি কি ভালো?

শুরুতে EC2-র সরলতাই ছিল বড় আকর্ষণ: একটি আকার, ঘণ্টায় দশ সেন্ট। কিন্তু কাজের ধরন এক নয়। Web server-এর CPU আর memory মোটামুটি সমান লাগে। In-memory database-এর memory লাগে, CPU কম। Video encoding-এর উল্টো। সবাইকে একই মাপ দিলে কেউ memory-র জন্য বাড়তি CPU কিনবেন, কেউ CPU-র জন্য বাড়তি memory. দুই ক্ষেত্রেই কিছু সম্পদ অলস পড়ে থাকে। Provider-এর দিক থেকেও একই কথা: host-এ memory ফুরিয়ে গেলে বাকি CPU আর বিক্রি হয় না। একে stranded capacity বলা যায়। আলাদা family দুই পক্ষের অপচয়ই কমায়।

তারপর এলো hardware-এর ঢেউ। নতুন generation-এর Intel আর AMD chip, ARM-ভিত্তিক নিজস্ব chip, GPU আর AI-এর জন্য বিশেষ chip, local NVMe. প্রতিটি নতুন সম্ভাবনা নতুন type হয়েছে, আর পুরোনোগুলো সাধারণত সাথে সাথে বন্ধ হয় না, কারণ গ্রাহকের কাজ সেখানে চলছে। Nitro-র মতো offload নকশা নতুন type বানানো সহজও করেছে। এভাবেই তালিকাটি বড় হয়েছে।

ফল মিশ্র। ভালো দিক, প্রায় যেকোনো কাজের জন্য উপযুক্ত মাপ আছে। খারাপ দিক, পছন্দের ক্লান্তি। অনেক দল প্রথম যেটি কাজ করে সেটিতেই বছরের পর বছর থেকে যায়, পুরোনো generation-এ বাড়তি দাম দিয়ে। আরেক দিকে serverless আর managed service এই প্রশ্নটিই গ্রাহকের কাছ থেকে সরিয়ে নিতে চায় (পর্ব ১৯)।

একটি ব্যবহারিক কৌশল হলো দলের জন্য ছোট একটি অনুমোদিত তালিকা রাখা, আর বছরে একবার নতুন generation মেপে দেখা। Autoscaling group-এ একাধিক type রাখলে একটি type-এ জায়গা না থাকলেও কাজ চলে।

মূল উপলব্ধি: তালিকা বড়, কারণ কাজের আকার নানা রকম। আপনার লক্ষ্য সবচেয়ে ভালো type খোঁজা নয়, মাপা কাজের সাথে মিলে যাওয়া একটি ছোট তালিকা রাখা।

প্র ০২“4 vCPU” দুই জায়গায় কি একই? আর একই core-এর দুই thread দুই গ্রাহককে দিলে কী হয়?

না, একই নয়। একটি type-এ 4 vCPU মানে 2 core-এর 4 thread, আরেকটিতে 4টি পুরো core. Clock speed, cache, memory-র গতি আর generation-ও আলাদা। একারণে ২০০৬ সালে AWS “EC2 Compute Unit” নামে একটি আপেক্ষিক একক চালু করেছিল, পরে Google-ও নিজের একটি তুলনামূলক সংখ্যা দেখিয়েছে। কোনো একক সংখ্যাই পুরো গল্প বলে না। আসল উত্তর নিজের কাজের benchmark: প্রতি সেকেন্ডে কত অনুরোধ, কোন p99-তে, প্রতি ডলারে কত।

দ্বিতীয় প্রশ্নটি নিরাপত্তার। ২০১৮ সালে Spectre আর Meltdown দেখায় যে CPU-র গতি বাড়ানোর কৌশল থেকেও তথ্য বেরোতে পারে। একই বছর L1TF, আর ২০১৯ সালে MDS গোত্রের দুর্বলতা বিশেষভাবে SMT-র সাথে জড়িত: একই core-এর দুই thread কিছু buffer আর cache ভাগ করে, তাই একটি thread অন্যটির কিছু তথ্যের আভাস পেতে পারে। অর্থাৎ দুই thread দুই আলাদা গ্রাহকের হলে ঝুঁকি বেশি। কিছু নিরাপত্তা-সচেতন প্রকল্প SMT বন্ধ করার পরামর্শও দিয়েছিল, যদিও তাতে ক্ষমতা কমে।

বড় cloud provider-রা প্রকাশ্যে জানিয়েছে যে তারা অন্তত সাধারণ dedicated-CPU type-এ একই core গ্রাহকদের মধ্যে ভাগ না করার দিকে কাজ করে। এই কারণে SMT-যুক্ত অনেক x86 type-এ vCPU জোড়ায় আসে, আর 2 vCPU-র নিচে আকার দেখা যায় না। Linux kernel-ও ২০২১ সালের দিকে core scheduling যোগ করেছে, যাতে বিশ্বাসযোগ্য নয় এমন কাজ একই core-এ একসাথে না বসে। Shared-core type-এর নিয়ম ভিন্ন হতে পারে, তাই বিস্তারিত provider-এর নিরাপত্তা ডকুমেন্টে দেখুন।

আরেকটি দিক: license. কিছু software প্রতি vCPU বা core-এ দাম নেয়। তাই SMT বন্ধ করে বা core সংখ্যা কমিয়ে (AWS-এর CPU options-এর মতো সুবিধা) কখনো খরচ কমে।

মূল উপলব্ধি: vCPU হলো বিক্রির সুবিধার একক, শক্তি মাপার একক নয়। তুলনা করুন কাজ দিয়ে, আর মনে রাখুন CPU-র গতির কৌশল নিরাপত্তার সিদ্ধান্তও বদলে দেয়।

প্র ০৩Burstable VM সস্তা, নাকি একটি দেরিতে ফোটা ফাঁদ?

দুটিই হতে পারে। AWS ২০১৪ সালে T2 নিয়ে আসে, আর ধারণাটি সরল ছিল: বেশিরভাগ ছোট কাজ বেশিরভাগ সময় অলস। Provider সেই অলসতাকে একসাথে ভাগ করে (statistical multiplexing) কম দামে বিক্রি করতে পারে। ছোট blog, dev পরিবেশ, CI runner-এর মতো কাজে এটি সত্যিই ভালো সমাধান।

ফাঁদটি সময়ে। সমস্যা শুরুর মুহূর্তে ঘটে না। চার ঘণ্টারও বেশি আগে থেকে জমা কমছে, অথচ CPU, latency, error, সব স্বাভাবিক। তারপর এক মুহূর্তে ক্ষমতা চার ভাগের এক ভাগে নামে। আমাদের simulator-এ ৮০% থেকে ২০%. ছোট load test-এ এটি প্রায়ই ধরা পড়ে না, কারণ test অল্প সময় চলে, জমা তখনো ফুরায় না। একটি পরিচিত ঘটনার ধরন: database-এর একটি ছোট burstable VM মাসের পর মাস ঠিক চলে, তারপর একটি দীর্ঘ রিপোর্ট চালাতে গিয়ে credit ফুরায়, query ধীর হয়, connection জমে, আর পুরো অ্যাপ ধীর হয়ে যায়। তদন্তকারীরা অ্যাপের কোড খোঁজেন, কারণ VM-এর গ্রাফে CPU মাত্র ২০%. অর্থাৎ দেখতে অলস, আসলে সীমায় আটকে আছে।

আরেকটি উল্টো ফাঁদ overage. Unlimited ধরনের mode-এ throttling নেই, কিন্তু টানা ব্যস্ত VM-এ বাড়তি বিল জমতে থাকে। মাসে একবার বিল দেখলে হঠাৎ অবাক হতে হয়। সাধারণ ভাঙন-বিন্দু হলো গড় ব্যবহার baseline ছাড়িয়ে যাওয়ার কিছু পরে, যখন সমান আকারের সাধারণ VM-ই সস্তা হয়ে যায়। সঠিক বিন্দু দাম থেকে হিসাব করতে হবে।

নিরাপদ অভ্যাস: credit balance-এ alert রাখা, আর সবচেয়ে গুরুত্বপূর্ণ দুটি সিদ্ধান্ত লিখে রাখা: জমা ফুরালে ধীর হওয়া ভালো, নাকি টাকা দেওয়া ভালো? Worker-এর জন্য প্রথমটি মানায়, গ্রাহকের সামনের অ্যাপের জন্য সম্ভবত দ্বিতীয়টি।

মূল উপলব্ধি: Burstable-এ আপনি CPU নয়, একটি হিসাবের খাতা কিনছেন। খাতা না দেখলে সমস্যা দেখবেন ব্যবহারকারীর চোখ দিয়ে।

প্র ০৪Metadata service তো VM-এর ভেতরেই। তাহলে সেটি এত বড় নিরাপত্তার আলোচনা কেন?

কারণ “ভেতরে” মানেই “বিশ্বস্ত” নয়। পুরোনো নকশার ধারণা ছিল: যে এই ঠিকানায় পৌঁছাতে পারে, সে নিশ্চয়ই VM-এর ভেতরের প্রোগ্রাম। কিন্তু web app বাইরের মানুষের অনুরোধে কাজ করে। অ্যাপ যদি বাইরের কারও দেওয়া URL থেকে কিছু আনে, তাহলে বাইরের সেই মানুষ অ্যাপের হাত দিয়েই ভেতরের ঠিকানা ছোঁয়ার চেষ্টা করতে পারেন। একে confused deputy সমস্যা বলা হয়: বিশ্বস্ত একটি পক্ষ না বুঝে অন্যের হয়ে নিজের অধিকার ব্যবহার করে।

আসল সম্পদটি হলো credential. Instance role খুব ভালো ধারণা, কারণ কোডে স্থায়ী key থাকে না, আর credential নিজে থেকে ঘোরে। কিন্তু সেই credential কোনো ঠিকানা থেকে পাওয়া যায়। ২০১৯ সালে Capital One-এর ঘটনায়, প্রকাশিত বিবরণ অনুযায়ী, ভুলভাবে সাজানো একটি WAF-এর মাধ্যমে এমন একটি পথ তৈরি হয়, আর VM-এর role-এর অতিরিক্ত অনুমতি থেকে storage-এর বিপুল ডেটায় পৌঁছানো সম্ভব হয়। লক্ষ করুন, এখানে তিনটি ত্রুটি একসাথে: অনুরোধ যাচাইয়ে ভুল, metadata-র সরল নকশা, আর role-এ অতিরিক্ত অনুমতি। যেকোনো একটি ঠিক থাকলে ক্ষতি অনেক কম হতে পারত।

একই বছরের নভেম্বরে AWS IMDSv2 ঘোষণা করে। Token-এর ধারণা SSRF-এর সাধারণ সীমা কাজে লাগায়: অনেক দুর্বল অ্যাপ শুধু একটি সরল GET পাঠাতে পারে, তারা PUT পাঠিয়ে উত্তর পড়ে পরে header বসাতে পারে না। Hop limit ১ রাখলে token-এর উত্তর এক ধাপের বেশি যায় না, তাই VM-এর ভেতরের container বা বাইরের proxy পর্যন্ত পৌঁছায় না। Azure আর Google Cloud-এর বাধ্যতামূলক header-ও একই দিকের সুরক্ষা, যদিও শক্তি সমান নয়। মনে রাখবেন, token পুরোপুরি সমাধান নয়। যে দুর্বলতায় VM-এর ভেতরে কোড চালানো যায়, সেখানে token-ও পড়া যায়।

তাই প্রতিরক্ষা কয়েক স্তরের: নতুন VM-এ token বাধ্যতামূলক, role সরু, বাইরে যাওয়া ট্রাফিক সীমিত, audit log-এ অস্বাভাবিক ব্যবহারে alert. বিস্তারিত পর্ব ৩১ আর ৩৪-এ।

মূল উপলব্ধি: নিরাপত্তা শুধু “কে পৌঁছাতে পারে” নয়, “কার হয়ে পৌঁছাচ্ছে” সেই প্রশ্নও। সুবিধার প্রতিটি ঠিকানা একটি সম্ভাব্য পথ।

প্র ০৫একটি VM-কে কতটা যত্ন করবেন: পোষা প্রাণীর মতো, নাকি পালের গরুর মতো?

“Pets vs cattle” উপমাটি ২০১০-এর দশকের শুরুতে cloud-আলোচনায় ছড়ায়; Microsoft-এর Bill Baker-এর একটি বক্তব্য থেকে এর জন্ম বলে উল্লেখ করা হয়, আর Randy Bias এটিকে জনপ্রিয় করেন। পোষা প্রাণীর একটি নাম আছে, অসুস্থ হলে চিকিৎসা হয়। পালের গরুর নম্বর থাকে, একটি অসুস্থ হলে বদলে ফেলা হয়। পুরোনো server ঘরে যন্ত্রগুলো ছিল পোষা: নাম zeus, হাতে আপডেট, মাসের পর মাস uptime-এর গর্ব।

Cloud-এর lifecycle এই মনোভাব বদলে দেয়। এই পর্বেই দেখলেন VM host ছাড়ে, instance store হারায়, public IP বদলায়, retirement নোটিশ আসে। হঠাৎ hardware নষ্ট হলে live migration-ও বাঁচায় না। Amazon-এর CTO Werner Vogels-এর পরিচিত কথাটি এখানে মানায়: সবকিছুই কোনো না কোনো সময় ব্যর্থ হয়। তাই প্রশ্ন “কীভাবে VM নষ্ট হওয়া ঠেকাব” থেকে সরে আসে “VM নষ্ট হলে কী হবে” প্রশ্নে। সেজন্যই ডেটা আলাদা volume-এ বা managed service-এ, configuration image-এ বা code-এ (পর্ব ১৬, ৫১), আর একাধিক zone-এ একাধিক VM (পর্ব ১৭, ১৮)।

তবে উপমাটি অন্ধভাবে নেওয়া ভুল। প্রথমত, ছোট প্রজেক্টে একটি VM-ই যথেষ্ট হতে পারে, আর তাকে ভালো backup-সহ পোষা হিসেবে রাখা যুক্তিসঙ্গত। পুরো autoscaling ব্যবস্থা বানানোর নিজের খরচ আছে। দ্বিতীয়ত, stateful ব্যবস্থা, যেমন database, কখনো পুরো গরু হয় না; ডেটার জন্য আলাদা যত্ন লাগে। তৃতীয়ত, Kubernetes-এর StatefulSet-এর মতো ধারণা দেখায়, মাঝামাঝি পথও আছে। Netflix ২০১১ সালে Chaos Monkey প্রকাশ্যে বর্ণনা করে, যা ইচ্ছা করে VM বন্ধ করে যাচাই করত যে ব্যবস্থা টিকে থাকে; এর পরিণত আলোচনা পর্ব ৬৮-এ।

একটি সহজ পরীক্ষা নিজেকে করুন: এই VM-টি এখনই terminate হলে নতুন একটি কতক্ষণে একই অবস্থায় আসবে, আর সেই ধাপ কোথায় লেখা আছে? উত্তর “জানি না” হলে আপনার কাছে একটি snowflake server আছে।

মূল উপলব্ধি: VM-কে ক্ষণস্থায়ী ধরে নকশা করুন। যত্ন নিন ডেটা আর পুনর্নির্মাণের পদ্ধতির, নির্দিষ্ট যন্ত্রের নয়।

অনুশীলন

প্রথমে নিজে চেষ্টা করুন, তারপর উত্তর মেলান। কোনোটির জন্য cloud account লাগবে না।

  1. Credit হিসাব করুন: একটি burstable VM-এর 4 vCPU, baseline প্রতি vCPU-তে ৩০%, জমা 540 credit. ১ credit = ১ vCPU ১০০%-এ ১ মিনিট। (ক) ঘণ্টায় আয় কত? (খ) ৬০% ব্যবহারে ঘণ্টায় খরচ কত? (গ) জমা কতক্ষণ টিকবে? (ঘ) জমা ফুরালে CPU কত থাকবে?

    (ক) 4 × 0.30 × 60 = 72 credit. (খ) 4 × 0.60 × 60 = 144 credit. (গ) নিট 144 − 72 = 72 credit প্রতি ঘণ্টায়, তাই 540 ÷ 72 = 7.5 ঘণ্টা, অর্থাৎ ৭ ঘণ্টা ৩০ মিনিট। (ঘ) ব্যবহার baseline-এ, অর্থাৎ প্রতি vCPU-তে ৩০%, মানে মোট 4 × 0.30 = 1.2 vCPU-র সমান। ফলে ক্ষমতা অর্ধেক হয়ে যায়।

  2. ফল আগে বলুন: AWS-এর সাধারণ আচরণ ধরুন। একটি VM-এ আছে boot volume (delete on termination চালু), data volume /data (delete on termination বন্ধ), instance store /scratch, আর স্বয়ংক্রিয় public IP 203.0.113.7. দুটি ফাইল লেখা হলো: /data/a.txt আর /scratch/b.txt. তারপর ক্রমে: (১) reboot (২) stop (৩) start (৪) terminate. প্রতিটি ধাপের পরে দুটি ফাইল আর IP-র অবস্থা কী?

    Reboot: দুটি ফাইলই আছে, IP একই। Stop: a.txt volume-এ আছে, b.txt গেছে, IP ছেড়ে দেওয়া হয়েছে। Start: a.txt আছে, /scratch খালি বা mount নেই, public IP নতুন। Terminate: VM আর boot volume নেই, তবে data volume অক্ষত, তাই a.txt অন্য VM-এ লাগিয়ে পড়া যাবে। সেই volume-এর বিলও চলছে।

  3. নকশা সমালোচনা করুন: একটি কাল্পনিক দল লিখেছে: “আমাদের অনলাইন বাজারের PostgreSQL চলে একটি burstable VM-এ। ডেটা instance store-এ, কারণ দ্রুত। Public IP দিয়ে SSH খোলা 0.0.0.0/0 থেকে। ব্যাকআপ আছে সেই instance store-এরই আরেকটি ফোল্ডারে। আকার বেছেছি ১ দিনের গড় CPU দেখে।” অন্তত পাঁচটি সমস্যা ধরুন আর ঠিক করুন।
    • Database instance store-এ: Stop বা host ব্যর্থ হলে সব ডেটা শেষ। Network volume বা managed database (পর্ব ২২) ব্যবহার করুন।
    • Backup একই জায়গায়: Disk গেলে backup-ও যায়। Object storage-এ, অন্য failure domain-এ রাখুন, আর restore পরীক্ষা করুন (পর্ব ২৪)।
    • Burstable-এ database: দীর্ঘ query-তে credit ফুরিয়ে হঠাৎ ধীর। সাধারণ type বা credit alert দরকার।
    • SSH সবার জন্য খোলা, public IP-তে: Private subnet আর bastion বা session manager ব্যবহার করুন (পর্ব ১২, ২৭)।
    • গড় CPU, এক দিন: অন্তত পুরো ব্যবসায়িক চক্রের p95, সাথে memory, IOPS আর network মাপুন।
    • একটিমাত্র VM: Single point of failure. Replica আর failover ভাবুন।
  4. আকার বাছুন আর খরচ বের করুন: মাপা p95: 3 vCPU, 10 GiB memory. লক্ষ্য প্রতিটি সীমার ৭৫% পর্যন্ত ব্যবহার। তালিকা (দাম অনুমিত): A: 4 vCPU, 8 GiB, $০.১৬/ঘণ্টা। B: 4 vCPU, 16 GiB, $০.২০/ঘণ্টা। C: 8 vCPU, 16 GiB, $০.৩২/ঘণ্টা। কোনটি নেবেন? ৩০ দিন সব সময় চালালে খরচ কত? দিনে ১০ ঘণ্টা করে ২২ দিন চালালে compute খরচ কত?

    দরকার: CPU 3 ÷ 0.75 = 4 vCPU, memory 10 ÷ 0.75 ≈ 13.3 GiB. A-তে memory কম, B আর C মানায়, সস্তা B. ৩০ দিন: 0.20 × 720 = $144. দিনে ১০ ঘণ্টা করে ২২ দিন: 0.20 × 220 = $44. তবে disk আর IP-র বিল এই হিসাবের বাইরে। আর এখানে CPU ঠিক সীমায়, তাই বৃদ্ধি হলে পরের ধাপ ভাবতে হবে।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমএকটি cloud VM তৈরির ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. API call-এ পরিচয়, অনুমতি আর quota যাচাই
  2. Scheduler zone-এ জায়গা আছে এমন host বাছাই করে
  3. Image থেকে boot volume তৈরি আর network interface যুক্ত
  4. Hypervisor VM চালু করে, kernel boot হয়
  5. cloud-init SSH key বসায় আর user data চালায়
  6. Health check সফল, তারপর ট্রাফিক আসে

একটি VM stop করে আবার start করা হলো। সাধারণভাবে কোনটি হারায়?

  • Boot volume-এর ফাইল
  • VM-এর private IP
  • Instance store-এর ডেটা
  • যুক্ত করা static public IP

একটি burstable VM-এর 2 vCPU, baseline প্রতি vCPU-তে ১০%. ১ credit = ১ vCPU ১০০%-এ ১ মিনিট হলে ঘণ্টায় কত credit জমে?

  • 6
  • 12
  • 24
  • 60

Standard_D4s_v5 নামের Azure VM type-এ 4 কী বোঝায়?

  • Generation
  • 4 GiB memory
  • ৪টি data disk
  • 4 vCPU

IMDSv2-র মতো token-ভিত্তিক metadata service মূলত কোন ঝুঁকি কমায়?

  • SSRF দিয়ে VM-এর role credential পাওয়া
  • VM-এর ওপর DDoS
  • SSH password অনুমান
  • Disk-এর ডেটা চুরি

মাসে ৭২০ ঘণ্টা ধরে একটি VM-এর দাম ঘণ্টায় $০.১০, আর তার disk-এর বিল মাসে $২৫. VM পুরো মাস stopped থাকলে (compute বিল বন্ধ ধরে) মাসের বিল কত?

  • $০
  • $২৫
  • $৭২
  • $৯৭

তিনটি replica-সহ একটি বড় database-এর জন্য VM-গুলো আলাদা rack-এর দলে রাখতে চান, যাতে একটি rack-এর ব্যর্থতায় সব replica না যায়। কোন ধারণাটি মানায়?

  • Cluster placement group
  • Dedicated host
  • Partition placement group
  • Burstable instance

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন — অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. Cloud VM হলো host-এর একটি ভাগ; instance type-এর নাম থেকে তার CPU, memory আর ধরন পড়া যায়।
  2. vCPU প্রায়ই একটি hardware thread. Burstable-এ credit ফুরালে CPU baseline-এ নামে, তাই credit-এর ওপর alert রাখুন।
  3. Boot volume host-এর বাইরে থাকে। Instance store host-এর সাথে বাঁধা, stop করলেই তার ডেটা শেষ।
  4. Stop-এ compute বিল থামে, disk আর static IP-র নয়। Terminate ফেরানো যায় না, আর রয়ে যাওয়া resource খুঁজে মুছতে হয়।
  5. আকার ঠিক করুন মাপা p95 থেকে, চারটি মাত্রায়। Metadata token বাধ্যতামূলক রাখুন, role সরু রাখুন।

পরের পর্বে: হাতে একবার VM সাজানো সহজ, কিন্তু একই VM দশবার বানানো কঠিন। পর্ব ১৬-এ দেখব machine image আর cloud-init দিয়ে একই server বারবার কীভাবে বানানো যায়।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান