This company saved $800k/year. Perfect time to go in-house with this solution.
But when they were 1/10th this size, they'd only have saved $80k/year. Does that cover the cost of the engineering to build and maintain this system? Maybe not. And when they were 1/100th the size, it would have been laughable to go in-house.
At the right time, you make the right transitions.
If they saved $800k per year, and they have to hire four additional ops engineers to run it at a cost of $400k per year, then they actually saved $400k. Which is still substantial and, all else being equal, sounds worthwhile.
If they saved $800k per year, and they have to hire ten additional ops engineers to run it at a cost of $1 million per year, then they've actually gone and burned $200k on something that provides no additional value to the business or their customers.
But [to state the obvious but sometimes overlooked] you don't just point an AWS account at the company git repo and walk away.
There's a lot of work and expertise needed to keep AWS setup up and running, so you already have to hire people.
At a modest size startup we already have close to ten people DevOps team to manage AWS. That same size team could easily keep bare metal servers running. At our scale it's still a bit cheaper to be on AWS, but not too far in the growth curve it'll start to become cheaper to be on bare metal.
I guess you've never done it yourself?
I'm not sure what those 4 engineers would be doing. You purchase a few servers with 5 year on site warranty and remote management, you take a couple of days to install them in some racks, and you never visit the site for 5 years. If they break, the manufacturer sends someone to fix them on site. The rest of the time you administer them remotely - just like you would AWS. If you want VM's install proxmox.
Whether it's cheaper than renting bare metal in a data centre is an debatable - colo costs a small fortune where I live.
But they aren't comparing it to that. They are comparing it to locking themselves into a closed source system that need specialised expertise to run, versus administering an open source Linux system that even the people running EC2 should be very familiar with. Most of the stuff AWS provides has open source counterparts - hell a whole pile of it is just open source they wrap a proprietary API around and charge you for.
10 times sounds like a lot, I'm guessing it's really less. Even so I come form the camp that shakes his head in disbelief at what people will pay AWS for basic VM and storage services, dressed up in a fancy API and marketing.
I know *data centers* that run on a few naive 20 yos admins/technicans + 1-2 "engineers" and all of them combined do receive salary of $5-10k/month in east eu
I'd like to remind everyone about Uber's experience: no EC2-like functionality until at least 2018, probably even now. Teams would negotiate with CTO for more machines. Uber's container-based solution didn't support persistent volumes for years. Uber's distributed database was based on friendfeed's design and was notoriously harder to use than DynamoDB or Cassandra. Uber's engineers couldn't provision Cassandra instances via API. They had to fill in a 10-pager to justify their use cases. Uber's on-rack router broke back in 2017 and the networking team didn't know about it because their dashboard was not properly set up and what the funk is eBPF? Uber tried but failed to build anything even closer to S3. Uber's HDFS cluster was grossly inefficient and expensive. That is, Uber's productivity sucked because they didn't have the out-of-box flexibility offered by cloud.
Look at Stack Overflow's architecture which stands apart because it was never designed to work in cloud from the beginning: https://stackexchange.com/performance
I'd argue that 90% of the SaaS doesn't have SO's scale. The whole thing would work just fine on a couple of FreeBSD servers running postgres and un-dockerized monolith. Half a rack at most with redundancy and replication.
But, if you've built your whole company around proprietary lamda functions and a vast range of AWS offerings, you're setting up yourself to never get out of the mess.
And you need dev servers. And a way to keep them in sync with production because you can’t just create a branch and provision a bare metal server on the fly. And you need a deployment process to get code from dev through test, UAT and production, and this process is lengthy and fraught because you can’t just fire up a new instance and switch the elastic IP, you actually have to deploy code on the physical machine and make sure there aren’t any configuration differences between your test and prod environments that’ll cause ‘it worked before’ problems. Developer productivity tanks, people are afraid to make changes, any pretence of agile/devops goes out the window and eventually everyone gets sick of the crusty old server and decides a complete rewrite is needed.
While Stack Overflow is popular in the dev world, not so much outside of it. The show they’re only serving 300 req/s. 19 servers to power the entire stack as well. I wouldn’t call this efficient.
At what point do you have the time/money/confidence to invest goodness knows how much in a data centre with space to grow, to purchase an enormous amount of capital to have it all installed etc. the building alone could eat that first years saving easily.
How many people are now needed to fault-find bad hardware/software/networks, to be on call for any problems? How many calls out to the Electrician to fix some power issue?
How much to setup and run a large air-con system for the data centre. Maybe not much in the US where aircon is common but much more expensive in Europe.
The fact they could afford to do this over such a short time period speaks to having a decent amount of cash on-hand.
Co-locating has no capital investment other than hardware, and is pretty cheap.
A 40U rack of compute charged as equivalent ec2 instances has a retail price easily of hundreds of thousands, if not a million+ USD per year.
Suppose each U has a $10k capital cost to make the numbers round, that is $400k in capital.
All this to say is that I don’t think capital is as big a factor as you might think.
> large air-con system
You wouldn't usually jump from AWS to buying up real estate to build your own physical data center.
A sensible first step is to rent a rack at a colocation facility. They handle power, cooling, redundancy, physical access for you.
Don't underestimate the savings that can be made from switching from a big-name cloud provider to a more old school hosting provider.
At work, people keep complaining about our costs and coming up with spreadsheets showing how much money we would save with our own hardware.
They never add the engineering costs. When they do, they forget to include the ongoing maintenance. Or the new SMEs that need to be hired (and on call). Or even the opportunity cost of doing a multi-year migration to arrive at the exact spot they already are today.
All that money, and noone is looking into optimizing our systems to shrink the bill...
Yep, we should have pointed out that this has to be done in at the right time. Generally this article was about how we saved $1M expense and we was able to share this saving with our customers. Not an attack on AWS, I still use their platform for my other projects.
But to be accurate, this migration happened last year, and now we already doubled our usage and this brings us to $2M / year saving now.
I 100% agree with the comments below, use AWS while you are defining your product and growing, Todd (the founder) did this right. Spending days and nights on managing your own infrastructure or paying a devops employee to do it, in the early phase is just pure waste, and takes away focus. But we moved away from AWS at the right time.
Also, yes we had to do this to be competitive, as prerendering is a resource heavy service, and if your site is like ProductBoard (awesome tool) which will not consume terabits of traffic or use petabytes of ram, then you can stay on AWS forever and enjoy the benefit of not caring.
And what we lost? Minor inconvenience at this point, I cannot just pull up a new database in 10 minutes, but we don't really do that anymore, most of our current projects requires months of research, planning, and delivery. With those time frames we can notify our devops and get everything in place way before we need it.
So, keep on using AWS (it rocks!), just be sure to pay attention to the bill, and don't underestimate the cost of the traffic.
Have a nice one
$800k/yr is like the cost of 2-3 engineers. Even if they're capable of doing all of the work that used to have been done by aws, you don't have any room to expand without having to put up high capital costs, and certainly not on a dime.
It sounds amazing now, but wait till the future comes and you can no longer run your own data center as cheaply as amazon.
AWS (IMHO) shines with the various services they provide (S3, Lambda, CloudFront, API Gateway, SQS< SES, to name a few). AWS is a game of trying to reduce your bill and often that means using AWS-specific services. If you want to stay completely "cloud agnostic" you are going to paying more than buying into a "cloud", in that scenario then you absolutely should be looking at dedicated servers. AWS is great because you can bring existing software and just run it in EC2 (or their container stuff if your software is containerized) but the AWS magic comes from using their managed services (also spinning up/down EC2 instances as needed, but if you are running them 24/7 then consider alternatives or at least pay for reserved).
If you already have a mature team that is doing well optimising the environment, you have stable demand and no need to develop things rapidly then it is very likely that going cloud is poor choice.
As to "cloud agnostic", don't believe this bullshit. In my opinion most projects fare much better by just letting go of this "cloud agnostic" and just getting tied and locked in to the vendor. It is not like there is a good chance Amazon (or Microsoft or Google for that matter) will suddenly pull a significant price hike or another move out of step with other vendors.
Spending effort on trying to make your app "cloud agnostic" usually ends up with far higher development costs and a chance of failure for no benefit. Embracing one vendor in this case is usually best way to achieve smaller, leaner app that is using the platform well.
It is the same story as with SQL. Trying to use frameworks to keep your app DBMS-agnostic but then nobody ever migrates their apps to another DBMS. And for various good reasons: you hired your staff for their expertise with X, they are used to it, so now going for Y will usually be far higher cost than the benefits.
> It is the same story as with SQL. Trying to use frameworks to keep your app DBMS-agnostic but then nobody ever migrates their apps to another DBMS.
I agree, I can't tell you how many hours I've wasted trying to keeps something (theoretically) cloud or DBMS agnostic, how many problems it's caused, and at the end of the day we could never "easily" move to a different cloud or DBMS without large rewrites.
I built on top of the Serverless Framework and I am constantly kicking myself for doing so (eventually I'll move off it for my main project). It's the worst of all worlds and in the Serverless Framework docs they even have sections for "GCF" vs "Lambda", if I have to write my functions/declarations differently then why am I using your layer on top? I know you get a few things for "free" with the Serverless Framework but once your project grows you run into all sorts of issues that are a PITA to work around. The truth is I'm not leaving AWS Lamda for GCF or whatever Azure has, I quite enjoy my "walled garden" and using an abstraction layer only means I get the lowest common denominator or a headache when trying to do something that is normally easy if you've fully bought in.
A small nit, I think this is partly because we've been burned before. Same idea as backups, if you don't restore from backups, you don't know if you have good backups. Similarly, if you don't use certain code paths, you can't tell if those code paths are sufficiently bug free.
I am thinking of Drupal. Pretty much everyone who uses Drupal uses MySQL/MariaDB as far as I know. I think Drupal supports Postgresql but nobody I know uses it because nobody they know uses Drupal with Postgresql. I don't know anyone who uses drupal with sqlite on production either.
If you have 100s of projects cloud agnostic infra is good. If for example Amazon buys your competitor and now you get "new contract coming up".
That said I agree "most projects fare much better without" - a lot of people don't understand they are not in position where they would benefit from that.
A notable exception to this is of you have clients whose IT departments require you to work on specific cloud providers. Although, there's tools that help abstract deploying infrastructure to different cloud providers (eg terraform, pulumi), but they still require some familiarity with the providers. With all that said, overall I agree with your sentiment
Yeah, I never got this. If actual, for really real SQL is necessary for your application, then you need an actual, for really real DBA. If it's just a really nifty flat-file interface that "just werks," go with whatever DB engine your framework is most tested/used on.
I get that sometimes you're interfacing two different things, one of which is on one DB engine, and you'd like to use the same software. That's fine. But DB agnosticism has a cost like anything else.
If you can be truly cloud-agnostic, then there is a high probability you can be cloud-free.
I feel like a variety of other circumstances can come to pass, which would negatively affect business continuity, here's what a lazy search turned up:
"My Google Cloud was suspended too" https://news.ycombinator.com/item?id=32571055
"Google suspended our domain out of the blue" https://news.ycombinator.com/item?id=32798368
"Tell HN: Google Cloud suspended our production projects at 1am on Saturday" https://news.ycombinator.com/item?id=32547912
"AWS account was permanently closed because it was suspended for 90 days" https://news.ycombinator.com/item?id=31571538
(probably happens with Azure and other smaller platforms as well, e.g. Hetzner, DigitalOcean, Vultr, Scaleway and so on)
That said, most people won't care to put in the work for a multi-cloud/cloud-agnostic setup, since most projects just aren't as important to warrant that much effort. And the ones that are can probably also just talk with the cloud providers through some representative anyways due to spending $$$.I'd argue that it's good to build on common standards, like OCI containers and the wire protocol of some common DBMS like PostgreSQL or MySQL/MariaDB: so that you can replicate certain parts of what a managed service does in a container locally, for development and testing. In most cases it won't matter that the managed cloud offering has some clever engineering underneath it and scales better, as long as you can check whether your SQL executes as it should and none of your seeded/anonymized test data breaks.
I actually had this project with Oracle DB that ran horribly when the instance was remote and you really couldn't do migrations well without breaking things for anyone using it, because the apps using it were written in a way where hundreds if not thousands of SQL queries were done just to load some data to display a page. Which is passable (if you don't care) when the DB is running in the same data centre as the apps, but absolutely horrible when these many smaller SQL queries have the full network round trip between them, especially when the app initializes data sequentially (N+1 problem). Ergo, the only way to work with something like that is to setup a local database (e.g. Oracle XE) and work with it, after importing a baseline migration/doing automated migrations.
The same largely applies to any other DB with sub par application architectures, as well as many other services (e.g. MinIO/Zenko instead of S3, so you don't need to actually upload 100 MB files to test whether attachment logic in your app works, if you can run them locally).
As for software that should be compatible with multiple DBMSes: sometimes it makes sense (e.g. something that could be used by your customers in a self-hosted setup across numerous different setups, like Zabbix or Nextcloud), but most of the time it would negatively impact how easy it is to develop code for your app (e.g. having to rely on ORM and their abstractions like JPQL) and testing everything would usually take more effort.
This is basically the natural progression of SaaS...
There's no such thing as a managed service so proprietary that it can't be essentially cloned by another provider. I remember people making the same claims about S3 long ago, and yet there are multiple providers of S3-compatible file storage services now.
Microsoft's Azure provides migration tools for people wanting to leave Amazon's AWS, and they are not alone.
Amazon tends to be (in my opinion) a few years ahead of everybody else, and different competitors focus on different areas of competition, but migrating away from AWS isn't really as hard as the "proprietary" label might make it seem.
First, AWS is already highly profitable, they aren't dumping where this step becomes a necessity.
Also, any such move would dry up future growth from adding new customers, which is suicidal.
For the other services, it's still going to depend heavily on your usage, staff time, and operational efficiencies. For example, if you replace SQS with RabbitMQ you need to manage multiple EC2 servers for reliability but those servers might be significantly underutilized based on your traffic levels. Whether or not you save money depends on how much you pay your operators and how many messages you use: if you use less than the free tier's million messages per month, there's no way to beat it. Each million requests costs $0.40 or less, so if you pay your ops person $50k annually (haha) you'd need to be somewhat over 120 million messages per month to pay for them to spend a single hour on O&M even before factoring in your EC2 usage.
If you are using lambda and suddenly need to run a million lambda you just can. If you want to have the ec2 support to run a million lambda at some time you are going to pay for a lot of sleeping computers.
Ok so you save money on the monthly bill but what happens when Amazon decides they want to enter your market? What happens if they decide your service is too controversial and they kick you off?
If you were deploying your own services to EC2 instead of using AWS's own services you could at least setup shop elsewhere with just a bit of work.
To me it is antithetical to building a sustainable product. People just hoping their startup gets bought and then it is someone else's problem.
They are awful to develop against, awful to test against, and often times "just work" until they don't.
It's possible that they are not interested in a response. They are saying what worked for them, whether or not others want to agree.
I'm so amazed that somehow people completely forget that for literally decades, web host provided dedicated hosting options at fantastic prices.
Yes, loooong time ago - to get your dedicated server might have taken a few hours to provision and the instant server access that AWS brought should not be discredited.
But large numbers of web host today allow you to programmatically spin up a dedicated web host instantaneously and at a fraction of the cost.
At one point it took often days for a dedicated server to be set up. We also didn't have such nice provisioning tools.
Now it just seems like cargo cult to use cloud providers as the only option. People just completely discount dedicated servers.
developer costs >> infrastructure costs
An AWS large server is around $500/year, which is about 1-2 developer hours (with taxes, overhead, etc) at the cost scales last time I priced this out. That's crazy expensive in the absolute, but if it saves a couple of hours, it makes sense.
PaaS providers cost even more. I've gone with those in the past, since it basically eliminated dev-ops. The major downside wasn't cost, so much as flexibility.
Dedicated servers start to make sense for:
- The very low end (e.g. personal use, or hosting something long-running for a small business)
- The very high end (e.g. once cloud costs start to hit hundred of thousands of dollars per year)
On the very high end, cloud providers will often cut a deal, though.
My problem with AWS, recently, has been reliability. Servers crash or have performance degradation a bit too often. That leads to developer costs, and might be what pushes me back to dedicated.
And if you try to use AWS just for S3 then you will pay a lot extra for the bandwidth charges of bringing the data from S3 to your server (something that is free if you were to use EC2 or other AWS services).
Their notes here are a bit vague:
> When the migration reached mid-June, we had 300 servers running very smoothly with a total 200 million cached pages. We used Apache Cassandra nodes on each of the servers that were compatible with AWS S3.
> We broke the online migration into four steps, each a week or two apart. After testing whether Prerender pages could be cached in both S3 and minio, we slowly diverted traffic away from AWS S3 and towards minio. When the writes to S3 had been stopped completely, Prerender saved $200 a day on S3 API costs and signaled we were ready to start deleting data already cached in our Cassandra cluster.
> However, the big reveal came at the end of this phase around June 24th. In the last four weeks, we moved most of the cache workload from AWS S3 to our own Cassandra cluster. The daily cost of AWS was reduced to $1.1K per day, projecting to 35K per month, and the new servers’ monthly recurring cost was estimated to be around 14K.
It says (briefly, in passing) that they used Cassandra to implement the S3 API for their nodes, but maybe just to replicate the S3 API that they were previously using? That's an interesting choice I'd not heard of before. Perhaps all of their individual files are quite small?
Then they moved to MinIO, which would be the S3 equivalent that you are looking for.
EDIT: to the naysayers: I worked in various companies (from tiny to huge) maintaining their own DCs and had access to financial data. And I was involved in the setting up new DCs.
My new startup is focused on helping application owners repatriate their workloads into their own infrastructure.
Our goal is to solve the network complexity challenges with a fully open network stack (open source software with all of the hardware options you would expect, and some you wouldn’t). The solution is designed to be turnkey and require very little network experience. It will use standard DevOps tools that you’re already using.
We’re announcing it in two weeks and will be posting info here on HN!
I've been getting by on like 80$/month hetzner servers (Like ancient 10 year old pizza box machines) for my businesses for a long while. Never did the cloud thing, I can run like three or four websites on one of those bad boys. I guess stuff like AWS makes sense if your computational workload happens in bursts or whatever? But 80$/month overhead costs are like nothing, I spend more than that on a good night out level.
That's not a paradox. You're not crazy in either case.
Starting in the cloud reduces costs for some strategies by removing necessary engineering. Starting in the cloud increases costs for other strategies by charging too much for commodity offerings.
It's relatively straightforward to make the choice as soon as you put a specific business in the crosshairs.
Edit: why is this downvoted?
(And before anyone falsely claims no commercial offers for this exist yet:
https://www.plusserver.com/en/products/pluscloud-open [no affiliation])
The physical network is most likely the absolute root of trust and attestation. Physical devices gain their personalities from what network they are connected to.
Physical networking is still the biggest impediment to operating on-prem infrastructure. You need to hire very expensive engineers, deal with a bizarre purchasing paradigm dictated by a few large companies (Cisco, Arista, Juniper, etc) and the management of these devices is pretty close to being from the Stone Age.
So we’re looking to fix all of that with a pure open source play, using components that everyone is familiar with.
The end goal is that a Devops person with basic network skills should be able to build their own physical network for modern cloud native applications, with very low levels of friction but similar cost efficiencies as cloud operators like AWS, Azure, GCP.
These cloud providers are, by definition, charging you more than it would cost you to run it yourself. What you get in return is a guarantee of expertise and an ecosystem.
That is _not_ a given. They're charging you more than it costs _them_ to run it.
They get:
- much lower hardware prices than you
- lower bandwidth prices than you
- likely lower electricity costs than you
Realistically, a company will charge slightly less than whatever your alternative is, and they will provide products that restrict the number of alternatives you have.
AWS, GCP, and Azure provide several differentiated products that lock you in to higher prices on everything else. Effectively, these three have an oligopoly on "highly differentiated cloud services." They are only competing with each other on those services, and they are competing with "servers plus ingress/egress costs to our differentiated services" on their commodity products. That is the real reason why AWS egress costs are so high. It prevents you from picking and choosing where to buy each part of your cloud footprint, and locks you into buying AWS. Bandwidth costs are what keep you inside the AWS/GCP/Azure walled garden.
Lower-end providers like Linode, DigitalOcean, Vultr, and Cloudflare have parts of the differentiated offering, but not all of it. These people will have lower prices than AWS/GCP/Azure since their offering is less differentiated, but they will still charge you more than you would pay by renting a server, since they offer more products.
Finally, hardware rental providers like Hetzner and other operators are competing directly with you buying the hardware and paying for datacenter space and bandwidth. Datacenters typically charge a premium for power, even when they are in areas with low-cost power.
Notice that none of these companies are competing with large-scale server buyers who have the same hardware/bandwidth/power costs that they do. As such, they do not need to pass the savings they get onto you. That is where they get their profit.
It's my impression that AWS competes with the EC2 instance cost (as it that's what new customers look at), and the bandwidth/storage only becomes apparent when you are locked in.
Really what AWS should be is one or two phases of service maturity: dev infrastructure and experimentation is phase one, phase two would be the "its a couple servers" production, BUT: with a scale plan for phase 3 being not-AWS.
Having a mature/battle tested phase 2 --> phase 3 should be a market advantage in the modern business landscape, but that's also a post-acquisition/exit phase, so none of the presumed target HN crowd care about it.
There are extensive articles and public knowledgebases on various technologies and architectures, but there is effectively nothing on AWS independence out there, even though almost every mature organization will need to face it.
That's totally non-obvious and certainly false in most cases. Cloud providers have huge economies of scale, which certainly makes it less expensive to use cloud if you factor in all your costs related to running it yourself.
This is like saying buying furniture is more expensive than making your own furniture because they have a profit margin. Even if you don't account for your own time, it will certainly be false as you'll pay your raw materials much more.
AWS would pass that difference to Amazon shareholders than passing them to you.
But, now that the emphasis seems to have shifted from growth-at-all-costs to where-can-we-cut-costs, I think there may be more organizations with a large enough server load to realize that they can do it cheaper (or even just get a different cloud provider to do it cheaper).
You see a lot of posters commenting that it isn't obvious that it's more expensive, but that's a large part of why I said I'm flabbergasted at how many people don't find it obvious.
It is obvious, someone may still choose to pay it because there's a natural tradeoff, but it's absolutely obvious.
I suspect most developers don't find it obvious because they've never dealt with actual servers themselves.
It's akin to arguing changing the oil on your vehicle is more expensive than paying someone to do it. No, it's more convenient, and that may make it worth the price.
Focusing just on what you're working on is great.
I was commenting on the expense rather than why you would (or wouldn't) want to use cloud.
That's pretty obvious but years ago you would have been downvoted into oblivion for writing that.
- may spend $250K on servers, replaced after 3 years becomes $83k/yr
- may spend $120-250K on extra staff to maintain the infrastructure
- may spend $15K for a cage in a DC
They still save $452K/yr overall (actual savings 1st year only $285K). It's still a savings for sure, but always keep TCO in mind.The real fun comes later when you outgrow your cage and there's not enough space left in that DC, or they just have shitty service constantly knocking out your racks, and you have to consider splitting your infra between DCs (a huge rewrite) or moving DCs (a huge literal lift and shift). Have been part of both, it's... definitely a learning experience.
AWS is not cheap because of your server costs.
AWS is cheap because of elasticity, velocity (opportunity cost of next feature), and reduced maintenance hours.
"The cloud" was never (afaik) was about getting a cheaper VPS. It was about being able to get them on demand, give them back on demand, and generally not have to maintain anything besides your code (and maybe apply updates to datastores / AMIs)
Now, if those premises are not true for your startup/business, then AWS is not the tool for you. I didnt see any analysis of ongoing maintenance costs in the 800k saved, but will it take 1-2 FTE engineers to now be more oncall, more server upgrades, more security patches etc? That's easily 1/2 that savings gone already.
Edit: for the most part these attributes apply to GCP, Azure, Heroku etc as well, its not just about AWS
Even if he hired 2 FTEs in Hungary to maintain (which I doubt), it would eat 200k at most (probably much less), so they still saved 600k.
For 800k he could probably hire 10 more people, to improve development, sales, marketing, support, and that would be better investment instead of burning money on AWS.
As a senior software engineer, you can make maybe $35k a year, before taxes, if you are good. You can make it $50k if you are very good.
2 years ago I was making $23k (yearly, before taxes), before I moved to Canada and started working at Amazon for $170k usd.
Europe, especially the eastern parts of europe has an extremely cheap workforce.
For a mature business, that tradeoff probably isn't worth it, but for a startup, the opportunity cost is too high. Spending a lot on cost optimization doesn't make sense; you are better off spending on growing income.
So the team is now responsible for backups, hardware ordering,.forecast etc?
How big is the team now compared to before?
Does it scale?
If you price it correctly and keep the free tier small, I would either talked to AWS for better pricing or moved to another cloud Provider.
S3 on AWS is a total no-brainer, minio on bare metal might mean much more work and a bigger infra team than business actually wants.
I would also love to know what optimizations are already in place. Does cloudflare caching work? Are the results compressed on rest? Is geolocation latency relevant?
Why even Cassandra? Are websites not unique? Wouldn't a nginx and a few big servers not work?
But who knows? The article doesn't tell me that :-(
"However, all this data and processes need to happen on a server and, of course, we used AWS for it. A few years of growth later, we’re handling over 70,000 pages per minute, storing around 560 million pages, and paying well over $1,000,000 per year.
Or at least we would be paying that much if we stayed with AWS. Instead, we were able to cut costs by 80% in a little over three months with some out-of-the-box thinking and a clear plan."
You've got the FUD covered, but you also need to add at least some substance to your claim. How do you know this figure would not be accurate? Why is your (hypothetical, not offered) estimate better than the author's?
> After testing whether Prerender pages could be cached in both S3 and minio, we slowly diverted traffic away from AWS S3 and towards minio.
if they served directly from s3 that would be, stupid?
> In the last four weeks, we moved most of the cache workload from AWS S3 to our own Cassandra cluster.
is also strange. it misses a lot of detail but it does not look like they just migrated away from s3...
(looks like their new hoster is hetzner, from service.prerender.io )
So an alternative way of interpreting this is more along the lines of: We may have saved up to 80% of server costs by moving from AWS, but you almost certainly won't save that much even if a bunch gets spent on developing operations and tools.
Also, if you are bigger and can start really negotiating with hardware providers.
Renting a dedicated server is very similar to renting a VM. It has a much higher provisioning time, usually hours to 1-2 days. And it takes some upfront cost or a time commitment. But it also has a lot more raw power. So if you don't require the flexibility VMs and the cloud provide they can be a very effective alternative.
They run datacenters for other datacenter companies. Most people have never heard of them because they're a $6B/year revenue beast that runs behind the scenes; but they also offer direct metal servers.
They have a US DC now. Though it only gives cloud servers. However even those are still way cheaper than any alternative.
The article spends a lot of time talking about how much lower their monthly bill is, but it says nothing about how much they spent to buy those 300 servers in the first place.
The monthly opex to house and power and cool those servers isn't _negligible_, but if you're doing back of napkin math comparing MRCs to Cloud you can just deduct the costs from their bandwidth charges that have been marked up 10,000%
They lease you the equipment. Yay.
I put a box of mine in a local datacenter, to their... endless confusion (not only do they not deal with random individuals that often, I actually read contracts so asked questions about why I had to prove my worker's comp payments and some other weird stuff that they removed). Monthly rental payments are about what I was paying in a range of cloud spend, but the system is far more capable, and I can do a lot more on it.
For example, if you primarily serve large media or many tiny files to clients that don't support http Multipart Types, than AWS can cost a lot more than the alternatives. However, AWS is generally an economical cloud provider, and a good option for those who outsourced most of their IT infrastructure.
The article would be better if it cited where the variable costs arose.
Regardless, starting a new Cassandra cluster in late 2022?! I bet they can save even more by just going with scylladb
[0] https://dzone.com/articles/s3-compatible-storage-with-cassan...
I heard they are very stubborn to increase the per user limit of cloud instances.
Also how did you deal with S3? Did you switch to another provider ? Like B2?
Even if you have 2 such boxes for master/replica, it's close to 5x savings.
Couple that with the very well known fact that AWS has outrageous data egress charges and there are patterns that can emerge where you're still in cloud but not racking up massive outbound data charges.
What does it cost to run their data center? What are the salaries they are paying for internal IT efforts to administer it? Is it an apples-to-apples comparison, e.g. are they load balancing across multiple datacenters in case of an outage?
It sounds like this was a good move for Prerender but it's hard to generalize the cost claims to other situations without details.
This seems like a key detail when telling people about your migration off AWS.
Before, it was easy to justify almost any expense with the "we just need to get 1% of this $100 billion market" and now it is "hunker down and do everything you can to be ramen-profitable, in order to survive and thrive".
[0]: or 90%, or 80% or who cares, but a majority of software services seem to NOT be compute- or traffic- heavy.
It's a fascinating article, for sure. I would have been interested to hear what their backup strategy looked like though.
One of the big benefits of cloud services, that I am aware of, is the assurance that if natural disaster strikes, you don't lose all of your data. I kind of got the impression that, more than anything else, that is what you are paying for. Data protection and uptime.
I suppose big enough bills could lead a company to make the kinds of changes that Prerender did, but when that disaster does strike, and it is time to try and recover from a fire, flood, earthquake, etc. the responsibility and speed of getting your customers back online is reliant completely upon your staff - a staff who might be extremely shaken up, hurt, or pre-occupied in taking care of their own affairs. I'm not saying it's not possible, but there is a kind of cost that comes in the form of responsibility. It's a trade off that I would not fault many people from avoiding.
$1M per year bill is a lot, but the Prerender back end is extremely write-heavy. It’s constantly loading URLs in Chrome in order to update the cached HTML so that the HTML is ready for sub-second serving to Google and other crawlers.
Being a solo founder with a profitable product that was growing organically every month, I really didn’t have the time to personally embark on a big server migration with a bunch of unknown risks (since I had never run any bare metal servers before). So the architecture was set early on and AWS allowed me the flexibility to continue to scale while I focused on the rest of business.
Just for a little more context on what was part of that $1M bill, I was running 1,000+ ec2 spot instances running Chrome browsers (phantomjs in the early days). I forget which instance type but I generally tried to scale horizontally with more smaller instance sizes for a few different reasons. Those servers, the rest of the infrastructure around rendering and saving all the HTML, and some data costs ended up being a little more than 50% the bill. Running websites through Chrome at scale is not cheap!
I had something like 20 Postgres databases on RDS used for different shards containing URL metadata, like last recache date. It was so write heavy that I had to really shard the databases. For a while I had one single shard and I eventually ran into the postgres transaction ID wraparound failure. That was not fun so I definitely over provisioned RDS shards in the future to prevent that from happening again. I think RDS costs were like 10%.
All of the HTML was stored in s3 and the number of GET requests wasn’t too crazy but being so write heavy on PUT requests for recaching HTML, with a decent sized chunk of data, the servers to serve customer requests, and data-our from our public endpoint, that was probably 30%.
There were a few other things like SQS for populating recache queues, elasticache, etc.
I never bought reserved instances and I figured the new team would go down that route but they blew me away with what they were able to do with bare metal servers. So kudos to the current Prerender team for doing such great work! Maybe that helps provide a little more context for the great comments I’m seeing here.
AWS seems ideal to me because it would let us easily scale up and down as our usage varies. But some of the anti-AWS sentiment in this article has given me pause. Any reason not to do this? Any alternatives I've missed?
Our storage and transfer usage will be negligible; it's all compute.
>Do you have any advice for software engineers who are just starting out?
>Don’t be afraid to talk with the customers. Throughout my career, the best software engineers were the ones who worked with the customer to solve their problems. Sometimes you can sack a half year of development time just by learning that you can solve the customer’s issue with a single line of code. I think the best engineers are creating solutions for real world problems.
to be very good generic advice.
The point of AWS is to be flexible. You’re paying for that. It’s easy to start. It’s easy to stop. It’s easy to change capacity.
Running your own servers is none of these things. But it is cheaper at sufficient scale. You can’t ignore the labor cost (particularly engineering) however.
Where AWS shines is with highly volatile workloads. With your own servers you have to provision for peak capacity. That’s less the case with AWS.
No shade on the author of course. It’s great to read things like this.
For example backblaze B2 offers free egress through Cloudflare, Fastly, BunnyCDN.
https://help.backblaze.com/hc/en-us/articles/217666928-Using...
Are you really saying that AWS and other clouds are expensive? Say it ain't so :)
If it costs you $1,000,000 a year to serve 1166 requests a second, maybe you fucked up.
...at the expense of 40 eng-years (20 eng over 2 years) spent on the migration.