Trying to decide a hosting provider for a small startup. I want to avoid the big 3.
My main requirement is that I don't want any lock in; if something goes wrong, I want to be able to easily move providers and spin up my deployment there.
My contenders so far are Hetzner and Linode. What are you guys using and how has your experience been?
That said: I don't know enough about your situation, but ... what are you optimizing for?
AWS/GCP/Azure have each got a platform that provides a heap of functionality. Using that will save you time-to-delivery and engineer-hours. All the clouds have startup programs that will mean it's basically free until you get some traction.
If you're looking for investment, using AWS/etc means you instantly avoid all the questions about CapEx and risk that follow from self-hosting.
Don't underestimate the upside of not dealing with a bunch of cobbled-together service providers (hosting, billing, SMS for 2FA, email, monitoring, etc, etc). Having a single provider and a single bill simplifies your admin a lot.
And if you need to scale in a hurry, it's a whole lot easier if you've adopted a cloud platform.
Is avoiding lock-in really a big problem? In your software, you can either use a third-party abstraction, or build a shim layer that sits above the services you use that would allow you to migrate (even to self-hosting) if you had to. For the most common services, there's not even really a need for this: the AWS API is widely supported anyway. The devops/sysadm side is harder though.
Some of this won't apply if you're bootstrapping: it's more work, but vastly cheaper to do a lot of stuff yourself, and renting a half-cabinet colo and stuffing it with off-lease servers will cost you engineer-hours, but saves a heap of cash. Augmenting that with a PC at home for backup, and cheap VMs from Digital Ocean, Vultr, Hetzner, Linode, etc for scale might work out well. But it's hard to beat the free plans from the clouds.
I laughed how they were supposed to just install MySQL locally and avoided all that. If you wanted point in time recovery, just read the doc for an hour and do it yourself when you have to spend more time reading warning email from AWS and search around to see what they meant for unnecessary interactions of their artificial limitations.
Some people seem to think using "heaps of services" make them look smarter but they're not.
Free plans are to lure you into their locked up ecosystem and gives you no gain on knowledge by dealing with their limitations, rather better to learn the tools you're using.
Dependencies are always a trade-off. Be they code libraries/modules, programming languages, network protocols, services, etc, any dependency has the benefit of giving you something you'd otherwise have to implement yourself with the downside of then being tied to their schedule, quality, license, pricing, lock-in, etc.
In your RDS example, a similar problem might be a self-hosted database that has an urgent security update. If you're using a cloud provider, that's just taken care of without you even seeing any downtime. When self-hosted, that's a software upgrade, with all the attendant concerns about backwards compatibility, making sure you coordinate the replica upgrades, etc, etc. In both cases, ignoring the issue has costs (one financial, the other security).
In implementing a system, it's your task to balance these tradeoffs. In an investment-funded startup, often the evaluation of the costs and benefits is a little different to what it might be for a bootstrapped startup or an ongoing business. With a limited runway and resources, leveraging the work of others can be a lot more attractive.
Free plans do tend to make expanding your set of dependencies very easy, and cloud-based infrastructure is certainly expensive when compared to the direct costs of self-hosting. But it's there now, and will be there with no ongoing effort on your part. Sometimes, that's worth the cost for the time to market.
All that said: this isn't an either/or. Digital Ocean has a bunch of services that you might choose to use too, and they're not "the big three".
To be reductionist ... I'd rather have to deal with vendor lock in a growing successful startup, then have cloud agnostic infrastructure and be out of runway.
Even then, I think people generally over-engineer this problem. I've worked at multiple unicorns who have been 'locked' in to AWS/GCP/Azure.
Think in terms of risk, and opportunity cost.
At a very high level, when using the big 3 and hosting that's raw infra you're going to find ways to pay for _keeping things running smoothly_. At least the big three have happy paths to avoid some of the operational burden (hidden among many many foot guns).
Full disclosure I work at noop.dev [1], a hosting provider trying to shift the focus of developers from infra-level abstractions to application-level abstractions.
I'm probably biased, but my instinct is that concerns over lock-in are totally valid, but the cost of avoiding is higher than the penalty of embracing.
1. https://noop.dev
In countries where VC money is much drier, many start-ups begin on VPS' and only move to the cloud when scalability becomes a real issue.
This though, is generally frowned upon by contemporary tech culture.
This is the idea, yes. But I am hoping we can scale vertically for a long time.
Locations, bandwidth, number of machines, orchestration capabilities, etc?
Avoiding lock in is 'easy'; avoid using specialized services and features that aren't universal. Avoid bundling services that need not be bundled. Your hosting provider should not also be your domain registrar, and maybe shouldn't be your DNS provider, nor your email provider. Big cloud has high outbound bandwidth rates, so avoid collecting a large amount of state that would need to be copied in a move. (Easier said than done)
I used Fly as a modern successor to Heroku (I know Heroku is still around). Features are good, scaling to 0 is great, their networking stuff is solid, and pricing is fair. I generally use it to host application backends.
Vultr for when I want a long lived server or build my own infrastructure platforms. I use it as just a VPS provider for larger machines at reasonable costs. Caveat being I’m managing my own infrastructure with all the trade-offs that come with it.
It mostly boils down to which service you like more based on entirely subjective variables like company, branding, ownership (Linode was acquired by Akamai).
2. Self host through Cloudflare tunnels. Works fine enough for little traffic as long as you are not maxing out bandwidth for data transmission.
3. When you grow, easy enough to move the containers to the cloud.
If you're already running container workloads, DigitalOcean has a managed Kubernetes offering that's quite decent. If you're only using VMs so far, I don't think you'll gain anything by introducing the complexity of the bigger cloud providers (managing VPC, subnets, firewalling).
Of course you can use a cloud provider and just stick with a common stack that can be easily moved to different providers or hosted on metal/on-prem once the need arises.
In order to provide a more useful answer, I'd like to know your current tech stack and a rough estimate of traffic/users.
I've done consulting for various clients who wanted to move from on-prem to cloud and vice versa and as long as you stay clear of the proprietary products you shouldn't worry that much about cloud lock-in. Stick with Postgres/MySQL, redis, containers/VMs and try to have as much of your infra in code, if possible.
Right now, it's a simple web app + db + redis queue. We'll start with just one prod server (and a test/staging server perhaps?) with some kind of a failover setup. My goal is to keep operational complexity to a minimum. I plan to avoid k8s and just use docker compose/docker swarm/dokku.
I have seen enough places burned by going with the big 3 - either through billing, support, or the sheer complexity of managing everything. You might start of with good intentions but you tack on a service because it's easily available and the next thing you know your costs have creeped up and moving things has become a non trivial project that you don't have time for.
I am just looking for a box I can run my setup on with fair pricing, good support, and enough reputation where I have faith they are not going to fold in 6 months. And if things go south, I want to be able to migrate easily.
- Cloudflare [1] scales easily and has a lot of easy to use services like databases and storage buckets, JAM Stack front end pages, and CDN services for images and videos.
- Render [2] has been great for us to spin up Python services quickly. I haven't worked with a production load on Render, but I hear good things :)
[1] https://www.cloudflare.com/developer-platform/products/
[2] https://render.com/