Greetings. I’m Jeff Johnson and I founded Digital Ruby in 2009 in order to learn how to run a software company, teach myself mobile programming and expand my skills and knowledge. I craft iOS apps, websites and server software.
I wrote a few months ago about looking at cloud options for IPBan Pro and the pricing differences vs. dedicated servers. I've gotten more serious about getting this going and have begun investigating Azure as a possible hybrid solution. After some cost benefit analysis, I have decided to use Azure storage tables and Azure functions to do some of the data synchronization that is needed, and build my order and billing system on Cosmos db. For everything else (web sites, API, back-end data processing, analytics, etc.), I will be using dedicated servers outside of Azure. I'm tempted to do it all dedicated, but I just don't have the time to manage the database and data synchronization portion now that I have a full time job. I've taken inspiration from Marcus Frind who made Plenty of Fish. He had literally 5 dedicated servers as a top 30 site in the United States a decade ago (around 2010). Read more about that at https://highscalability.com/plentyoffish-architecture.
I considered Azure SQL server and Azure app containers and was pretty stunned by how expensive they are compared to dedicated servers. Let me explain.
If you are patient, you can get some pretty good deals on SoYouStart. I've snagged the E3-SSD-1-32 when it is on sale, which is usually in the 30-35 USD price range. An amazing deal for what you get - 250 MB / sec unmetered bandwidth, Intel Xeon E3-1245v2 4c/8 at 3.4ghz, 32 GB DDR3 RAM at 1333 mhz and finally RAID 1 dual SSD at 480 gb. Wow. The normal price of 47 USD is still a really good deal, but for me as a small business that 30-35 USD price range is a steal. I can run MySQL or Postgres on these boxes and have a seriously powerful database server. Downtime is incredibly rare, after over 5 years of use.
You could literally buy 100 of these servers and probably never worry about bandwidth, storage or compute for many years. 100 servers at even 47 USD / month is only 56,400 USD - per year, probably 1/10th to 1/20th what Azure would cost for equivalent hardware. SoYouStart (as a subsidiary of OVH) has DDOS built in by default which is super helpful and an awesome control panel. If you upgrade to OVH, the parent company, you can get even more powerful servers for about twice as much and they let you put them all in a VPN, on the same rack next to each other. OVH is huge and isn't going away anytime soon, so I don't think that is a risk either.
Let's compare to Azure SQL. With Azure SQL you can pay per DTU or by cores. The DTU option I found to be incredibly flaky. If you get higher than ~75% of your DTU usage, queries will start timing out. With the 50 DTU option at ~70 USD a month, you can barely do about 2-3 inserts per second and a few reads per second before the time outs happen. I then switched to the vcore option and with some pretty light work-loads in my opinion, I hit between 1-2 cores of usage, but at least no time outs anymore. Azure charges 0.3131 USD per vcore per hour, which ends up being about 225 USD / month per vcore. This does not include storage and bandwidth. At 4 vcores, you are looking at over 1,000 USD / month in cost just for the compute portion of Azure SQL Server.
Azure SQL Server does some nice things. You are auto triple replicated in their data center, and there is the option to do geo-replication. Regular transaction logs are also backed up automatically. So you have to ask yourself if these things justify the cost vs. hosting it yourself and replicating and managing backups, etc. With your own dedicated servers, you can setup the replication and backups once and it will run itself with the occasional monitoring. Even with Azure SQL server you would still want a dedicated DBA and ops people(s) watching and tuning the database(s) and servers, so that cost isn't going away in either scenario.
Now on to Azure app containers. This is where things really started to diverge on price compared to the dedicated server option. I looked at the app containers and decided to look at the most premium option. After all, I want my sites and services running blazingly fast by default. I settled on the Azure P3v2 container option which has 4 cores with 14 GB RAM and 250 GB SSD storage at 584 USD per month. For that I could get 13 of those SoYouStart SSD servers with double the RAM and double the storage plus unlimited bandwidth. So Azure app containers are about 13x more expensive than a more powerful dedicated server at SoYouStart. They do auto-scale and support docker containers which is nice, along with complete integration with the rest of Azure. Once again, you have to ask yourself if paying the price is worth it. I use nginx and have a few Linux scripts that can have a dedicated server setup and running my sites in a couple minutes, so not a whole lot of management needed in my experience. I look at uptime robot a few times each week to make sure performance is up to snuff, and have email and text alerts setup if anything goes down, which is rare. Oh by the way Kubernetes is open source, easy to run on clusters of dedicated servers.
Cosmos db is also pricier than I would like, but has the advantage of being distributed, geo-replicated and super fast out of the box. This saves me having to be paranoid about this mission critical data for billing and orders. I can back it up periodically as needed, but for the most part I expect it will fulfill the job quite nicely.
For my back-end analytics, data processing, sites and services, the dedicated server option makes total sense. Right now I have two SoYouStart servers (migrated recently from Nocix) servicing my entire IPBan Pro API behind a Cloud Flare load balancer. The CPU on these boxes is about 2-5% of one core on average, servicing about 35K requests per hour (about 10 per second). So even scaling 10X will only put me on about 1 core CPU saturation at most. The Cloud Flare cache takes care of the rest, greatly reducing what gets to the machines. I'm able to store hundreds of gigabytes of logs and data and analyze them with the free CPU cores that are idle. The one thing I don't do well is synchronizing the data between the boxes, and this is why I have settled on Azure to take care of some of that complexity.
I'd love to see Microsoft get their prices down on the SQL Server and App Containers - they are pretty expensive for small businesses in my opinion. I like what Unity did with their personal edition. Make it free until the company hits a certain revenue tier then require an upgrade to a paid version. Failing that it sure would be nice to offer reduced pricing for small businesses or startups (maybe they do this and I haven't found it yet). Azure does have a basic free tier if you want to get in and test things though which is nice. Azure also offers 12 months of free use on many services which is nice, but again if you want to stick with them, expect to pay at the end of those 12 months, even if you aren't making any revenue.
In summary I love where cloud computing is headed. Azure tables and functions have the right price for what I want to do. Cosmos db has the right performance, scaling and replication for what I need at a reasonable cost. For anything that is CPU intensive like data processing, servicing API calls, etc. dedicated servers are just too cheap to pass up compared to their VM or containerized counter parts.
For my next post I will do a write up of Azure costs if you have adequate funding or existing revenue stream that you want to migrate dedicated to Azure.
My latest blog posts: