For those on a tight budget,
Google Cloud Preemtible VMs is one of my favorite offerings.
Preemptible VMs are restarted (recycled) every 24 hours which make them a great fit for stateless workloads. The benefit of those VMs comes in pricing. Prices for a 24/7 VM running on us-central1:
|E2 4vCPUs 16GB RAM||$97.84||$29.35|
As you can see, there's a huge cost saving in leveraging them. Consider the cost savings for your testing enviroments alone.
A lot of people may point out that you should use serverless for stateless workloads, since it's a managed offering.
And while that is indeed true for most cases, there are still several workloads that would not make sense on a serverless environment.
One of the main shortcomings of serverless offerings is the fact that you can't run long running processes.
Another issue is the fact that many serverless offerings would not allow you to customize the sandbox environment (Google Cloud run fixes this by letting you bring your own container with your pre packaged libraries, and lambda layers also help in that front).
Ok, so preemtible VMs can't really run stateful workloads, but it doesn't mean you can't have state. That is possible by attaching a persistent disk to your instance.
The data on the boot disk gets discarded on every restart, but not the persistent disk.
GCE instances can run scripts during the startup and you can attach one or more disks to it. The script bellow would mount and format (if not already) any disk on /dev/sdb
#!/bin/bash if sudo blkid /dev/sdb;then exit else sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb; \ sudo mkdir -p /mnt/data sudo mount -o discard,defaults /dev/sdb /mnt/data fi
- Please be advised that a machine stop can lead to data corruption so be careful when using this approach *
Where I found this to be very useful was running some long running (2~3 hours a day jobs) where I could use some beefier machines for video encoding tasks.
As video encoding requires a good chunk of CPU and a bunch of libraries installed on the OS. Preemptible VMs were an easy choice. To give you an idea, running a node 4 hours would cost:
|E2 16vCPUs 64GB RAM||$65.22||$19.57|
Not too bad right? We start and stop the VMs via cloud functions and cloud scheduler (there's a place for serverless too).
So if you are in a budget, consider using preemptible VMs if your architecture requires batching or stateless workloads.
More than just code
Level up every day