Poll: Do you use app hosting or run your own server?
When building a web app we all really just want to focus on writing code and making it work. But some of us are total control freaks and choose to torture ourselves with server admin issues on top of that. What's the reasoning behind your setup?
111 comments
[ 2.8 ms ] story [ 190 ms ] threadIf my app never takes off, then I don't need to do this work.
I find that it's always a good idea to know what you'd do a few steps down the scalability line (100 users, 10,000 users, 100,000 users) but not necessarily build for the biggest case. When bootstrapping, you can't afford the server costs for the big cases anyway.
Sure there might be an in-between period where we are doing a large amount of traffic on Heroku + paying too much for it, but by then we will be able to afford to hire someone who can set us up properly + at the right price. Either way, I avoid wasting time configuring servers!
The Heroku Add-ons marketplace is also a huge competitive advantage that they provide over other services. There are plenty of examples where we've relied on third-party addons to begin with (for e.g. Embedly) but once the costs of using such third-party services increased (due to increased traffic), we switched over to our own hand-made solutions and we were able to bring down costs substantially.
It may be that my product never needs enough resources to push me over the edge for moving to my own servers.
I've shipped products before where we pre-built a large cluster of servers (20+) and then used less than half that capacity, and that sucks cash really fast.
Tons of freeloaders (like me) using their resources for our off-the-cuff apps, plus some people using it to bootstrap. As the usage climbs, and theoretically your revenues are also climbing, you get to a point where it makes sense to move away to your own setup.
How can Heroku make money if all customers eventually plan to leave?
Reasoning: SaaS is extremely tempting. If programming is only a hobby for you I recommend it wholeheartedly. But if you're serious about your app or business, learning or hiring someone for sysops/devops is really the way to go. It's cheaper, you aren't dependent on anyone, reducing your points of failure, and you learn extremely valuable skills related to server setup and maintenance.
In my (soon to be open-sourced) deployment solution that's built on Fabric and Chef, all I need is a configuration yaml file to describe my servers. I provide IP addresses, what role(s) each one serves (app, db, static, queue, etc), what kind of software for its service I want to use (db servers should all use postgres, for example), what OS to expect on each one, and what stage of deployment that server happens to be for this project (development, staging, production). Everything is completely shared-none and non-destructive, so if I happened to have 3 VPSs, each hosting some combination of several sites' app, db, and static resources, across a different OS on each, I don't do any additional work. All I type is "make deploy" after quickly writing some lines in that config file and I can sit back and relax. Servers get setup from scratch if they're new, secured, and have services like logging all ready to go.
In essence, I get the dead simple deploy of a SaaS, with the flexibility of using whatever hosting provider I feel like, using the exact stack and details I want, for the cheapest price I can find. If my Ubuntu-running Amazon data centers flooded tomorrow, I could be deploying on brand-new RHEL Linode servers with 30 seconds of yaml changes. That kind of peace of mind can't really be bought from a SaaS provider.
And yes, it'll be up on my GitHub account when it's finished, and will (hopefully) hit the frontpage of HN when it's announced.
Do you need testers?
Personally, we're using Puppet for server admin and some cobbled together shell scripts, for app deployment. The latter is heavily inspired by Capistrano. We have a few shell scripts for generating new manifests in Puppet. All together a not-fully-automated, but quite close solution.
The combination is great. But if it wasn't for the Linode community and great support I would consider switching to an EC2 instance - I imagine an EC2 would be quicker to communicate with S3 than my Linode, though I haven't looked at Amazon's datacenter location options.
I'm in the process of transitioning some of my stuff to S3 for durability, and will likely eventually transition to VPS-based hosting over the next year or two.
I guess this question is too open... the answer will always be, depends on what you are building..., and you amount of experience on the field... In my case several 8gb rackspace servers with a cost of 10 dollars a day seems to work well for collecting and crunching gigabytes of data.
Heroku covers this very well.
Heroku looks cool, but I am used to compile things...
Rackspace Mail for mail.
Why not run your own mail server? Outbound deliverability is a pain. You can't just install an SMTP server package and go -- you need to think about DomainKeys, SPF, DKIM, Sender-ID, monitoring realtime blacklists for your IP, etc. That's a whole job unto itself and is worth paying a couple bucks for someone else to do it.
These days I'm attempting to move things off of my VPSes where there are good, stable options which don't require huge engineering efforts to use. SendGrid for email was an early, obvious choice. I'll be migrating many of my blogs to WPEngine fairly soon. (I'll write up my rationale for that at length after it happens. They're a client, so take my arguments with a grain of salt, but it became painfully obvious when working with them that it was the right call.)
If I got a do-over on my two main software products I would probably re-write them to use Heroku over self-hosting them on my VPS. It would have avoided ~6 minor service disruptions and ~2 catastrophes in the last year, plus saved me about two weeks of lost billable time. (Mostly lost due to having a very involved migration from Slicehost to Rackspace which went fairly poorly, principally due to failing to invest another few weeks preparing thoroughly for it.)
I can't justify a rewrite of BCC or AR at the moment to migrate to Heroku, though, as they're both multiple weeks of work with high probability of breaking something, and my anticipated costs due to I'm Not Always A Sysadmin But When I Am I Only Fail On The Hard Stuff this year don't quite justify it. (Please, please, nobody buy Rackspace to shut it down. One migration was enough.)
I've got 6 VPSes and 12 dedicated boxes and have never had an outage that long (self-inflicted or otherwise) in roughly 6 years. Granted, most of my dedicated boxes are managed by Rackspace and cost > $1k/month.
All that to say, I agree with your sentiments for the most part ... I just haven't seen the "prevention" of catastrophic events per say.
Also, what do BCC and AR refer to?
http://www.mongodb.org/display/DOCS/Geospatial+Indexing
So, when it comes time to host a side project, App Engine is my go to platform these days. There are a few times when I prefer going with EC2, but I like how easy it is to get a project started on app engine, especially when I'm confident that the application will scale should I need it to.
The same would cost me tens of thousands on Amazon or other 'cloud' services.
They advertise a 6TB transfer limit, but I've been with them for almost 2 years now and they don't seem to enforce it.
I'd totally recommend them to anybody.
Also, if you're looking to save cash, an Atom CPU is surprisingly capable. At any given point in time both of my servers would have about 700 active HTTP connections each.
* also looking at fastmail too.
Google Apps has the advantage that it comes with docs and gmail - not just a standard email :O)
I am migrating away from them however, because I've decided to consolidate all my hosting with a single provider (Linode). I can wholeheartedly recommend them though.
I use 3rd party services for sending mails, though. The amount of boring work to get out of my recipients' spam folder is just too high without that.
I did a php app for a client on Media Temple's (gs) and it was unbearably slow. The php execution time would vary drastically (.1 seconds to over a minute) even on a simple debugging page. After a lot of back and forth with customer service and never being able to pinpoint the issue, I switch to Linode.
Screenshot of a page taking 1.4 minutes to render: http://i.imgur.com/e310W.png
Same page on Linode: http://i.imgur.com/OTN9l.png
I'll also add that I keep a MediaTemple gs account in addition to my VPSes for various static sites. You can actually use it to host your DNS and email then have your site resolve to the ip of another server. Obviously that's a really expensive option for basic email but if you've got the account for some other reason like me then you've got 100 domains you can add for free so it's an option in rare cases. Anyway, I'm in the middle of building a PHP app for a client on their MediaTemple gs account and I'll testify to the fact that performance varies wildly. I haven't seem anything take over a minute to execute but I've seen it go from .1 to as high as 50-something seconds. I've found you can fix most of the long queries by writing more efficient code. You'll still get some wild variations but not as often.
In my experiences over 6-7 mo, MT had these speed issues roughly 50% of the time.
Most every startup will start in the cloud and some will move to dedicated machines later when it makes economic sense and if the team deems the additional headaches worth it.
And yet the poll does not bear that out. The real cost of starting in "the cloud" is often very high -- 3x the cost of a VPS or more -- and you can handle an awful lot of traffic on a 512MB VPS.
Did the custom mail server with Postfix on Gentoo for a few years. Had the experience. Loved it. Came to realize I should be doing things with tools instead of managing tools, hence current config.
If you're using Rails, check out Moonshine (a great Rails-oriented wrapper around Puppet): https://github.com/railsmachine/moonshine/
1) We need to comply with Canadian privacy laws, so need Canadian VPS - and those are way more expensive than in US.
2) To be PCI compliant, you need access to server logs. You can get that with Rackspace but pay a premium.
3) I've managed an in-house data centre before on my own, so I know what I'm doing for the most part.
If you factor all of the above, it's actually cheaper to manage your own servers, even if you outsource the sysadmin stuff to a competent contractor at about $100/h. The catch is there is an overhead initially to provide redundancy that diminishes only when you can utilize that extra capacity.
That might not be an issue: http://www.ic.gc.ca/eic/site/ecic-ceac.nsf/eng/gv00508.html
> 2) To be PCI compliant
AWS is PCI compliant: http://aws.amazon.com/security/pci-dss-level-1-compliance-fa... and Rackspace might not be charging extra anymore.
Additionally, at least in Canada, privacy-cautious organizations don't look too favorably on services that store data in US, in part due to the patriot act. We even have US clients who liked the fact their data would be stored in Canada ;O)
Would I do it again given the abundance of VPS options today? Possibly. There are only two reasons not to run my own hardware: 1 - dangers of hardware failure on my single server and scrambling to build a new one as opposed to spinning up a new VPS. 2 - scaling. But after 6 years, neither of these have been a problem. In fact, I bet if the hardware failure does occur, I can have m5hosting provide me with a replacement server in a few hours and I could have it config'd and back up in around a day.
I certainly pay less by running my own, with hardware cost amortized over such a long period. I feel the admin hassles are about the same as running a single VPS and less than running multiple VPSs. I set it up, have good docs on the config, automated cloud backups (tarsnap) and would have no problem reinstalling from scratch.
Oh, and of course, I don't run my own mail sever. I'm not a masochist ;).
My team and I run on App Engine for our startup's product, but I run all of my own stuff (email, websites/blogs, legacy projects) with Mike. It's a trust thing.