Render: a Zero DevOps Cloud Platform
render.com
render.com
I thought I was happy with Heroku until realizing the absurd cost and lack of evolution it grew to be. I've been there for almost a decade.
I'm glad I switched when I did, because I think I'd probably have a $600+/month bill from Heroku right now.
Edit, couple more thoughts about Render:
I've been using Render's managed Redis offering for the past few months in beta, and it's been rock-solid. I'm really happy with it.
Also, I am delighted that Render's two United States datacenters are in Oregon and Ohio. My understanding is that they spread their customers across GCP, Azure, and AWS, and I could not be happier to be out of Heroku with its exposure to the tire fire that is AWS us-east-1.
I do sometimes worry that one day they’ll shut down and I’ll be stuck moving to a crappier service…
Heroku: $15/mo = 50Mb memory + 40 connections
Render: $10/mo = 250Mb memory + 500 connections
---
Heroku $750/mo = 7Gb memory + 10k connections
Render $250/mo = 10Gb memory + 10k connections
After migrating an entire startup infrastructure from Heroku to AWS I'm even more against Heroku given how easy it is to use something like Elastic Beanstalk to do the same thing without many of the same downsides.
I've been burned by Heroku, though, so I have a strong negative opinion.
I'm just complaining to complain lol.
Render is close, but they’re still missing a lot of important details that makes deploying Rails apps as easy as Heroku. Instead they kind of throw the manual at you and expect you to read a tutorial.
We recently got bit (not quite burned) with the load balancers in the Common Runtime being shared across all apps.
Some piece of malware was associated with one of the IPs of Heroku's load balancers. One of our customers ended up blocking one of our servers associated to that IP because of it. We did some research and we even think we know what app caused it (it's someone's app they host on Heroku), and we don't think it should be flagged as malware, but either way... some other app in Heroku could be truly doing bad things and we would then get our server blocked again.
Heroku's advice was to put up a CDN in front of their load balancers, which has worked for now. But that's extra cost and system complexity just to get around a limitation of Heroku.
We did confirm a Heroku Private Space would eliminate this, since we'd get our own set of IPs for the Private Space's load balancers. But that comes with extra cost, and perhaps even limiting which add-ons we can use in the Private Space.
So although we've generally been happy with Heroku, we are concerned with some technical limitations, like this important (to us) one.
For reference, we migrated to new t4g instances on AWS and received about a 100x performance improvement for a similar (sometimes cheaper) price than Heroku. We are also able to connect to our company VPC and use private resources partitioned elsewhere in AWS (e.g. a redis cluster that costs the same as Heroku with far fewer limitations).
The downside is obviously configuration and learning AWS. Thankfully, we are pretty well versed in AWS here.
Looking at prices is definitely something I’m going to be doing in the short-to-medium term here. We’ve grown our Heroku bill for years, but I’m not entirely sure what all they take care of that RDS or Aurora wouldn’t also handle.
We currently don’t have anyone who is a dedicated sysadmin, so that’s one thing to keep in mind. We’ve been able to rely on shared sysadmin responsibilities here and there, and have Heroku take care of monitoring if our database has somehow “degraded.” But I do wonder if when Heroku identifies that a database needs to be updated, if they’re really just rebranding something AWS does automatically with RDS. I’m just not sure.
You need double your number of typical connections to support rolling, combine that with the large price jumps and low connection counts on the plans and it becomes very expensive just to have something that should be standard in a modern PaaS platform. This is but one example.
Now that said I totally relate to having strong negative opinions after being burned. I've got a few orgs like that too. What did they do for you?
Edit: nevermind I should have refreshed. You already answered in a sibling comment
I personally think render has a great future, 99% of dev ops is the golden architecture involving a load balancer behind multiple app instances with a db and cache.
I don't want to care about creating automated backups. I don't want to care about managing VPS. I don't want to care about security updates (though unattended upgrades does make it easy nowadays). Let me git push with a dev environment and link available and start shipping features to customers. That is the value of Render/Heroku.
I know it’s on your radar but just want to give a nudge.
I'm very happy to share my own acquisition calculus over email (in profile).
- Stability / Uptime
- How well the management UI / API / tools work
- Any services you found you needed but aren't yet offered
- Compliance with data protection regulations
You can even proxy * domains (i.e. requests for *.foo.com going to a single render server / ip address).
- Environment previews don't always work, hard to easily switch between services running in environment previews
- Slow deploys because it rebuilds the docker image every time, no way to connect it to a registry
- Documentation is shallow, especially when things get technical or complex related to their "blueprints"
- Ran into a bug with their environment groups
- They proxy through cloudflare and had some intermittent issues
- Zero downtime deploy wasn't actually zero downtime
We're not directly competitive with Render but our solution is similar — we support turnkey app deployment, PostgreSQL, Redis and other OSS databases. Our focus is on the problem of simplifying compliance in the cloud. We're also building a self-hosted SaaS version of our product for companies who want the benefits of PaaS but direct access to their AWS/GCP/Azure infrastructure as well.
I want the choice for my app to be global on day one with no devops required. Just two clicks and it's available on multiple regions.
Which AWS/GCP regions do you typically use for Spain?
I’ll bite. What does this mean?
Then we get an email saying that because we have 20 devs who commit to our private repo of the site we deploy, we need to pay for 20 member accounts. Each member account is $99/mo. So, because they started reading our git commits to count authors, our monthly bill was going to go from $120 to over $2,000 (way more than what we pay for all of Google Cloud).
AWS and GCP are a nightmare.
There's a nice poetry to seeing a system autorecover from outages or scale correctly when it gets a huge burst of traffic. From being able to help an engineer do something they think is impossible, and do it easily.
Horrible indeed. ;)
Where and how does one get 1000 euro/day as a DevOps Engineer?
In Berlin, quite a 'cheap' city for tech wages in Europe --you'll probably 'only' get around 100/hour unless it's finance related or funded, but that's still like 800 if you work standard days, which isn't too far off.
You'll get creamed on tax though.
There are better things to spend time complaining about and it's not this.
https://techcrunch.com/2019/02/21/redis-labs-changes-its-ope...
* How does it different than new "lightweight" cloud offering like Fly.io?
render.com and fly.io are in a similar niche of "deploy your app easily".
To me fly.io prioritized the wrong thing: deploying apps close to users. I care more about low price, ease of use and features than optimizing latency.
render.com is the best (that I know) "run a server for your app" service. I used Digital Ocean vps and then apps before.
We're actually not in the same niche as Render! At least, I'm pretty sure we're building towards different things. But we are each (a) small (b) scrapping with large public cloud providers and (c) attempting to generate a self sustaining startup reaction.
Attracting people with new apps is a way both of us prove the value of what we're doing. Attracting people who want to run their apps close to their users is the way we make a lot of money.
For big stuff, would it not be a massive drag not having it proximal to your app serve we a?
To explain the context, I find there seems to be a lack of clarity around K8s. Lets just say, for this post's purposes, I am a _user_ of k8s. That is, I don't actually run the cluster at all, I don't manage its storage, I am operating as a User without full admin access.
I also work in VMware who has the whole Tanzu thing going on so what happened was internal IT set up a K8s cluster for production hosting (maybe it was dogfooding or something I'm not really involved with that team, user only as I said).
I got frustrated when figuring out how to use it however. A bunch of online material is about setting up the K8s infrastructure/cluster, rather than using it as a Dev.
I hope this makes a bit more sense when I said redis was practically zero config.
To explain the setup. I code a python app, and I use docker compose and a single docker-compose.YAML. This YAML gives the build instructions for my app, and minimally (by this I mean with absolute minimal config options) also sets up a postgresDB, RabbitMQ and Redis.
Here's what I mean by minimal:
redis:
image: XXXXXXX.YYYYYY.com/dockerhub-proxy-cache/library/redis
restart: always
container_name: redis
command: redis-server --requirepass XXXXXXX
ports:
- 6379:6379
environment:
- REDIS_REPLICATION_MODE=master
labels:
kompose.volume.storage-class-name: 1XXXXUUIDProvidedByPlatformXXXX1
kompose.volume.size: 1Gi
volumes:
- ~/.docker-conf/redis/data/:/data/
deploy:
resources:
limits:
cpus: '0.5'
memory: 2G
reservations:
cpus: '.1'
memory: 20M
I consider this minimal as most of it is boiler plate and I'm just configuring its resources.So for dev when I want a local spin up I docker-compose build, docker-compose up.
As you can see above,
volumes:
- ~/.docker-conf/redis/data/:/data/
Gives it persistent storage across builds and deploys.So to my mind this was pretty easy so far. Then I looked at what was needed to deploy on K8S and I nearly puked. Sorry there is no way I was touching that mess of yaml.
So I just use kompose-convert which uses the single docker-compose.yaml to auto generate all the little yaml babies needed for deploying to staging and prod (the K8S cluster).
Script is essentially:
docker-compose build
docker push corpImageLibrary/App:mar-felly2022(version)
cd ./kubernetes-deploy-files && kompose convert -f ../docker-compose.yml
That's it. Regarding persistent storage which I use, I define that with the docker Kompose label in the main docker-compose.yaml. The goal just being a single file to config everything.When I kill the deployment I just don't kill the persistent disks, and then deploy all the auto generated yamls at once (including the persistent disks, which wont overwrite them if they exist)
Deploy script:
#!/bin/bash
cd ./kubernetes-deploy-files
kubectl --kubeconfig ../Kubeconfig apply -f \
db-claim0-persistentvolumeclaim.yaml,\
db-deployment.yaml,\
db-service.yaml,\
fluentd-config.yml,\
rabbitmq-deployment.yaml,\
rabbitmq-service.yaml,\
redis-claim0-persistentvolumeclaim.yaml,\
redis-deployment.yaml,\
redis-service.yaml,\
MYAPP-deployment.yaml,\
MYAPP-service.yaml
Kill script: #!/bin/bash
cd ./kubernetes-deploy-files
kubectl --kubeconfig ../Kubeconfig delete -f \
db-deployment.yaml,\
db-service.yaml,\
rabbitmq-deployment.yaml,\
rabbitmq-service.yaml,\
redis-deployment.yaml,\
redis-service.yaml,\
MYAPP-deployment.yaml,\
MYAPP-service.yaml
(note I haven't made any edits on any of these yamls they are all auto-generated)To me this is minimal config compared to trying to integrate with a third party outside of my app network (needing corporate firewall exceptions etc etc). But yea there is internal hosted redis offerings I think but even then I made a pass as the above is just very easy and neat.
Also the persistent disks are all backed up in the background.
I guess it's minimal config when you already have a nice K8S setup ready to use would be a fairer statement :)
Hope this is useful to someone just trying to get a dam app running!
There's this bit of copywriting I see on many startup landing pages that annoys me a bit:
"You can now set up a Redis instance in just a few clicks and let Render handle the heavy lifting to operate it reliably and securely."
To me, it always feels somewhat patronizing to refer to yourself as doing 'heavy lifting' and the customer's work as (obviously) not-quite-as-heavy-lifting. Maybe in particular because I've set up Redis in the past, and as many others have mentioned it is really the epitome of hassle-free, easy-to-setup server software. So referring to hosting Redis as heavy lifting just kind of feels wrong or over the top.
- "Access to the Redis CLI"
Does that mean we can access to Redis CLI in web interface? I need a product like this and I signed up to create an instance, and I created a Redis instance but I couldn't find the redis cli on web interface. I would like to access to the Redis-cli, and I don't want it to be accessed by outside of my cluster. So If I connect with my local redis-cli, I have to turn on External connections, which will make the instance accessible by everyone.
Are there are any good open source libraries that use REST connections to Redis so you can use it in "serverless" environments?
An equivalent solution would be to spin up a $5 droplet on DO, do basic due diligence wrt security (lock down ssh, firewall, etc.) and you end up with more memory, more connections, for less money.
I realize I'm a Luddite, in the field of DevOps.
Is it just the benefit of not needing to maintain the server?
This is exactly the benefit. You don't have to do any of this stuff. For example, my organisation has two developers neither of which are experts in network security or system administration. So if can outsource this work to a 3rd party provider then that's a huge benefit. The difference in cost between a $5/month DO droplet and a $10/month managed Redis instance is negligible for us.
At least that's what the cloud vendors want you to believe.
Now that said there's definitely a cultural belief in startups that you should outsource everything you can. It works for some people, but I've seen it kill others because they were sending all of their revenue to their vendors. The outsource model always suffers as you scale up.
edit: ah, my mistake, this is a sub-product, not the main product
My DigitalOcean instance is 2 GB RAM, 30 GB disk. With backups it costs $11.40/month. And yes, I'm free to run whatever on it, be it Postgres or Redis or...
To have an equivalent on Render would be 3-4 times more expensive?
with elasticache, there are different node types you can pick from. are there different node types to pick from with Render?
Redis is perhaps the easiest thing to deploy that I'm familiar with.
Right now it sounds as if it's a redis competitor, aka clickbait
They are a hosting provider.
I was going to ask if anyone ever had trouble running Redis. But that's not something the article itself asserts.