You've restarted your server and SSH hasn't responded for five minutes. Or worse: the disk is locked at 98 percent and iostat -x 1 shows %util on nvme0n1 constantly at 100. Now you have to decide: should I scale up this same VPS, or move the whole workload to a cloud server? This decision won't be solved by a comparison table, because the main difference between the two is something you only understand when things break and when you grow.
Where the difference starts: the storage layer
In a classic VPS, your disk is a local volume on the same hypervisor. If that physical machine dies, your data goes with it — unless you have an external backup. In a cloud server, the disk is usually a network volume distributed across multiple nodes and kept in sync with replication. You understand this difference in practice with one number: IOPS.
A local NVMe volume on a dedicated server easily delivers 500,000 random 4K IOPS. The same capacity on cloud network storage, depending on the volume type, is usually between 3,000 and 20,000 baseline IOPS, and to go higher you have to buy provisioned IOPS. If your workload is a write-heavy MySQL database, this number determines everything — not the number of vCPUs.
fio --name=randwrite --ioengine=libaio --rw=randwrite \
--bs=4k --numjobs=4 --size=2G --runtime=60 --group_reporting
Run this on both sides before migrating. If the IOPS difference is more than double and your workload is I/O-bound, migrating to the cloud without choosing the right volume type just moves the pain around.
Live migration: what a VPS doesn't have
Live migration means the hypervisor copies the machine's RAM to another node while the service is up, and at the last moment, less than a few hundred milliseconds of pause is applied. On a real cloud server, when a physical node needs maintenance, this happens behind the scenes and you only see a small blip in the latency graph.
On a VPS this doesn't happen. Node maintenance means planned downtime, or worse, the machine is restored on another node and the IP changes. If your team's internal SLA is under five minutes of downtime per month, this is a decisive difference.
But it has a hidden cost: live migration depends on a high-speed network between nodes. If your workload has a lot of memory (say a Redis with a 64 GB dataset), each migration takes several minutes, and during that window, write latency goes up. I've seen on high-RAM clusters that live migration itself triggered alerts.
Billing model: where money slips away from you
A VPS usually has a fixed monthly price. A cloud server is usually billed by the hour, and this is where most of the misunderstanding happens.
| Component | VPS | Cloud server |
|---|---|---|
| Compute | Fixed monthly | Hourly, based on reserved vCPU and RAM |
| Storage | Included in the plan | Separate, based on GB and volume type |
| Egress traffic | Usually a set quota | Billed separately based on GB out |
| Public IP | Included | May be billed separately |
Here's the mistake people make: teams spin up a cloud instance, forget to shut it down, and at the end of the month see a bill several times what they expected. The tell is that in the panel, the compute cost is low but the storage and traffic costs have gone through the roof. Volumes that the instance wasn't even attached to also cost money.
A practical solution: tag from the start and set a budget alert. If your team is more than one person, without IaC and tags, cost control becomes impossible. Take infrastructure as code seriously from day one, not after the first surprise bill.
Which is better for which workload
My position is clear: if your workload is stable, single-server, and I/O-bound (a high-traffic WordPress, a mid-sized database, an internal service), a VPS or dedicated server is the better choice. You pay less and get more IOPS. Migrating to the cloud here just adds complexity.
Choose the cloud when at least one of these is true:
- Your workload fluctuates heavily and you want to pay less during low-traffic hours.
- You need autoscaling and want instances to be added without manual intervention. Autoscaling; horizontal or vertical? opens up the guide to making this exact decision correctly.
- You have multiple services that need to be spread across several zones and you want zero downtime.
- You want to use managed services like managed Kubernetes or object storage and not deal with node maintenance yourself.
A practical point that's rarely mentioned: if your workload is static, before making any decision about servers, move the content onto a content delivery network. Often that alone takes 70 percent of the traffic off the origin server and solves the main problem, without needing to change your architecture.
Practical migration: what to measure beforehand
Before any move, record these four numbers on your current server:
- Average and 95th percentile CPU and RAM usage over a two-week window.
- Disk IOPS and throughput during peak hours.
- Monthly egress traffic in gigabytes.
- Latency between the server and the database, if they're separate.
After migrating, take these same four numbers again. If the 95th percentile database latency got worse, you probably chose the wrong volume type — not that the cloud is bad. For this comparison to be meaningful, you need proper monitoring; the practical guide to smart monitoring and alerting fills exactly this gap.
If your architecture is multi-tier and traffic passes through a load balancer, review the load distribution algorithm before migrating too. Go over load balancers and load distribution algorithms once; many problems blamed on the cloud are rooted in load balancer settings.
And if your workload is public-facing, first of all make sure you have a layer protecting against malicious traffic. A volumetric attack can bring down both architectures, but in the cloud, egress traffic billing gets added on top. Take real methods of DDoS protection seriously.
If you want to start from one point, cloud infrastructure (IaaS) is where you get full control over the instance, volume, and network without dealing with hardware yourself. For the technical details of each component, documentation and the knowledge base is the more precise reference.
Frequently asked questions
Is a cloud server always more expensive than a VPS?
No, but the cost model is different. If your workload fluctuates and you can shut down the instance outside peak hours, the cloud cost can be less than a fixed monthly VPS. But if your workload is 24/7 and stable, a VPS almost always ends up cheaper, because storage and traffic costs add up separately on top.
What good does live migration do for me?
Its benefit shows up the moment a physical node has a problem. Your service is moved to a healthy node without planned downtime. If your team's internal SLA is strict or your service has external customers, this capability alone is worth choosing the cloud for.
Why did my database get slower after migrating to the cloud?
In most cases the problem isn't CPU, it's IOPS. A baseline network volume usually delivers fewer IOPS than local NVMe. Test with fio on both sides, and if the difference is large, migrate to a volume with higher IOPS or keep the database on an instance with a local disk.
To start, should I scale up my VPS or move to the cloud?
If your problem is just capacity and your workload is stable, scaling up the VPS is the fastest and cheapest route. If your problem is load fluctuation, a need for autoscaling, or a need for multiple zones, scaling up the VPS just buys time. First measure the four usage numbers, then decide.
Comments 0
No comments yet — be the first!