Virtual Machine di Cloud: Teknologi, Pilihan, dan Kapan Harusnya Tidak Pakai
Ketika kamu launch instance di AWS/GCP/DigitalOcean, apa yang sebenarnya terjadi di bawahnya? Buku bilang "cloud adalah VM". Bagian kedua itu benar, tapi konsep dasarnya salah: bukan cuma VM. Pada tahap awal komputasi awan (IaaS), VM adalah unit dasar. Kini, serverless, container, dan edge worker mulai menggantikan sebagian use case. Artikel ini membedah VM sebagai lapisan fundamental: hypervisor, tipe penyediaan, biaya tersembunyi, dan kapan kamu sebaiknya lompat ke container atau serverless.
VM adalah simulasi komputer di atas komputer lain
VM adalah instance komputasi dengan CPU, RAM, disk, dan network interface yang seolah-olah milik sendiri — padahal berbagi hardware fisik dengan VM lain lewat hypervisor. Hypervisor adalah lapisan software yang memisahkan lapisan ke perangkat keras.
Fisik (host): 64 core, 128 GB RAM, 2 NVMe
├── VM A: 4 core, 16 GB — OS Ubuntu
├── VM B: 2 core, 8 GB — OS Debian
├── VM C: 8 core, 32 GB — OS Windows Server
Host menjalankan hypervisor, dan setiap VM mengira dia memiliki akses penuh ke hardware. Tentu ada overhead — biasanya 5–15% performa versus bare metal.
Dua jenis hypervisor
Hypervisor dibagi menjadi dua keluarga: - Type 1 (Bare Metal): berjalan langsung di hardware. Contoh: VMware ESXi, KVM, Xen, Hyper-V Server. Digunakan data center. - Type 2 (Hosted): berjalan di atas OS kamu. Contoh: VirtualBox, VMware Workstation, Parallels, QEMU user-mode. Untuk lab/desktop.
Di cloud, hampir semuanya Type 1. KVM (Kernel-based Virtual Machine) paling umum karena terbuka, stabil, dan sudah terintegrasi ke kernel Linux.
Kapan Type 2 masih berguna: lab lokal, debug, training, atau menjalankan OS lain di laptop. Jangan untuk production — karena crash OS host = crash semua VM.
KVM: motor yang menggerakkan AWS/GCP/OpenStack
KVM merupakan modul kernel Linux yang mengubah kernel menjadi hypervisor. Setiap VM di KVM adalah proses Linux (QEMU user process) dengan thread dan memory space terpisah.
# Cek KVM support
egrep -c '(vmx|svm)' /proc/cpuinfo # harus > 0
lsmod | grep kvm
Tapi: KVM pakai CPU virtualization (Intel VT-x / AMD-V). Kalau host tidak support, emulasi perangkat lunak (TCG/Tiny Code Generator) sangat lambat — 10x–100x lebih perlahan.
Tipe penyediaan cloud VM
Penyediaan umum: - Shared VM (burst): "Burstable" instance (AWS T-series, GCP E2) yang menjanjikan baseline CPU dengan burst kuota. Bagus untuk workload berfluktuasi, buruk untuk CPU-bound. - Dedicated VM (steady): dedicated vCPU (AWS M/C-series, GCP N2/N2D) — performa konsisten, cocok database/backend. - Metal: bare metal tanpa hypervisor (AWS i3/i4, GCP C2/CA, Equinix Metal). Dibutuhkan: licensing, kernel module, atau performa network/disk ekstrem.
# AWS T3 burstable: 2 vCPU, 4 GB, baseline 20%, burst 100% sementara kredit ada
# GCP N2D: dedicated AMD EPYC — cocok CPU-bound
CPU, RAM, Disk, Network — mana yang bikin perbedaan
CPU: banyak vCPU bukan berarti lebih cepat kalau aplikasi single-threaded. Database PostgreSQL biasanya single-core bound — lebih baik 2 core cepat (high frequency) daripada 4 core lambat.
RAM: harga RAM per GB beda-beda. AWS t3a.medium 4 GB = $0.0416/jam (~$30/bulan). Hetzner CX22 4 GB = €5/bulan. Perbedaan 6x.
Disk: NVMe vs SSD vs HDD. Provider "NVMe" kadang cuma ephemeral (hilang saat stop/start). Persistent disk (EBS, GPD) lebih mahal tapi survive.
Network: bandwidth tidak selalu eksplisit. Beberapa provider rate-limit egress; AWS T-series terkenat lunak. Cek EULA, tidak percaya marketing.
Overcommit dan kebocoran neighbor
Hypervisor bisa menjalankan lebih banyak VM daripada resource fisik (overcommit). Contoh: host 32 GB RAM menjalankan VM 4+4+4+4 = 16 GB, tapi banyak yang nyalon 4 GB padahal cuma pakai 1 GB. Overcommit efektif sampai rata-rata pakai nyata melonjak.
Bahaya: neighbor yang greedy — VM tetangga habiskan I/O disk atau CPU, menyebabkan latency di VM kamu (noisy neighbor). Mitigasi: pilih instance dedicated (bukan burst), atau pakai host dedicated.
Egress: biaya yang bikin terkejut
Cloud memberi inbound gratis, tapi egress (data keluar) mahal. AWS: $0.09/GB. GCP: $0.12/GB. DigitalOcean: $0.01/GB (harga entry, tapi tiap droplet punya egress allowance). Hetzner: 20 TB included, sisanya €1/TB.
# Contoh hitungan: 1 TB egress/bulanAWS: ~$90 → ~Rp 1,35 jutaDO: $10 → ~Rp 150 ribuHetzner: €0 (dalam 20 TB)Solusi: CDN Cloudflare (free tier, cache statis = 0 egress), kompresi gzip/zstd, pakai image format modern (avif/webp).
Autoscaling versus fixed instance
Autoscaling: tentukan rule (CPU > 70% → tambah instance). Cocok workload fluktuatif (e-commerce, API yang busy di weekend). Tapi autoscaling butuh: - App stateless (session tidak di disk lokal). - Load balancer. - Database connection pool terpisah dari app instance.
Kalau app stateful, autoscaling lebih sulit — dan lebih aman fixed instance dengan monitoring alert.
Storage: ephemeral vs persistent vs block
Ephemeral storage (AWS instance store, GCP local SSD): sangat cepat, menempel pada host. Saat VM di-stop/move, data hilang. Cocok cache/temp.
Persistent disk (EBS, GCP PD, Hetzner volume): network-attached, survive reboot, bisa di-attach/detach. Lebih lambat ephemeral.
Object storage (S3, GCS): REST API, unlimited, durability tinggi. Untuk file statis, backup, log.
Kesalahan umum: pakai ephemeral untuk database tanpa replication. Saat host crash, data gone.
Migrasi VM: live migration versus downtime
Provider besar (AWS, GCP) bisa live migration — pindah VM antar host tanpa reboot untuk maintenance. Prosesnya: salin memory page demi page sementara VM jalan. Menit 2–5 detik latency kecil, tapi tidak ada downtime.
Kapan live migration gagal: memory change rate tinggi (database besar yang terus ditulis) — Hypervisor tidak selamati menyalin halaman cepat cukup. Kalau live migration tidak tersedia, maintenance butuh stop/start = downtime.
Container versus VM: perbedaan yang bikin orang salah pilih
Container (Docker/Kubernetes) berbagi kernel host, bukan simulasi seluruh OS. Overhead lebih tipis (biasanya < 5%), startup milidetik, bukan detik. Tapi: - Container tidak mengisolasi sepenuhnya (kernel sama = CVE kernel mempengaruhi semua container). - Container membutuhkan filesystem image (image layer). - VM memberikan isolasi penuh (kernel masing-masing) — cocok multi-tenant, Windows + Linux campur, atau compliance yang minta OS kontrol.
Banyak orang pindah dari VM ke container karena "trend", padahal app mereka stateful dan tidak butuh 100+ instance. VM lebih mudah dirawat untuk tim kecil: boot, SSH, install — tanpa belajar Docker + K8s.
Kapan harus pakai VM, kapan harus lompat
Gunakan VM kalau: - App butuh kernel tertentu, module, atau device passthrough. - Migrasi dari on-prem ke cloud (lift-and-shift). - Workload stateful dengan scaling kecil (1–10 instance). - Compliance meminta isolasi penuh. - Tim kecil tanpa bandwidth operasi container.
Lompat ke container/serverless kalau: - Microservice ratusan endpoint. - Scaling ke 0 sering (serverless) — bayar cuma saat jalan. - DevOps mature dengan GitOps + Kubernetes. - App stateless dengan CI/CD matang.
Kesalahan umum
Launch t3.micro untuk production app – lalu heran kenapa lambat saat burst habis.
Pakai ephemeral disk untuk DB tanpa replication.
Lupa snapshot persistent disk sebelum
rm -rf /.Anggap banyak vCPU = lebih cepat untuk workload single-thread.
Tidak perhatikan egress — tagihan 2 bulan lalu meledak.
Berganti instance type tanpa reboot (tidak bisa di hot-add di beberapa provider).
SSH key tidak di-backup — kehilangan akses saat key dihapus dari control plane.
Menganggap autoscaling menggantikan monitoring.
Takeaways
VM adalah simulasi komputer lewat hypervisor (KVM di cloud).
Type 1 untuk prod, Type 2 untuk lab.
Tipe instance: shared burst vs dedicated vs metal — pilih sesuai workload.
Egress cost biasanya lebih mahal daripada compute.
Overcommit ada risiko noisy neighbor, mitigasi pilih dedicated.
Storage: ephemeral (cepat, hilang), persistent (survive), object (akses API).
Container lebih ringan tapi VM masih lebih baik untuk tim kecil/stateful.
Migrasi live ada tapi bukan magic untuk workload memory-heavy.



