Get the app to ++, post and comment
Blog

Why We Use DigitalOcean for devRant

March 13th, 2017 - David Fox (@dfox)

devRant is a fun community for developers to share and bond over their successes and frustrations with code, tech, and life as a programmer. devRant was founded almost exactly one year ago and in the time it's grown pretty rapidly. We recently passed the 30,000 registered user mark and our tiny team of two founders is responsible for all product development, bug fixing, customer service, and anything else that comes up. I'm responsible for all of the technology infrastructure and most of the programming, and our other co-founder handles all of the UX and design.

Since we founded devRant last March, we've been through a number of different cloud hosting providers. By far the biggest issue we had with our first two providers was reliability. Being the only developer and being responsible for keeping an app up for a community of thousands of demanding software developers from all areas of the world was becoming a stressful endeavour. Our past hosting providers experienced frequent downtime, ranging from an incident that had us down for almost an hour and an incredibly frustrating case where there was a hardware issue with a node we were on and support took 5 hours to realize the issue was on their end and not ours. By far the most memorable incident was when devRant was featured on The Next Web. That night, during one of the biggest traffic bumps we ever got, our host suffered a massive outage and we lost many potential users.

Enough was enough! We quickly started testing some other cloud hosting providers, one of which was DigitalOcean. DigitalOcean quickly proved to be our best option because of the good price point, effective admin panel management, and what we would soon come to see - awesome reliability. Our infrastructure has been completely on DigitalOcean for about 6 months now, and I'm happy to report I've yet to be woken up by in the middle of the night by our alerting system because of any hosting provider downtime! Middle-of-the-night outages (mostly short blips) were pretty common with our first two providers so we couldn't be happier with the reliability of DigitalOcean. It was a weird feeling looking at some of our server metrics the other day and seeing our DB cluster (and hence my sleep pattern!) being fully healthy for nearly a month.

We started devRant a year ago with 2 small instances and now, a year later, we've grown into 7 instances - some decently large. Here's a quick diagram (click for full-sized image) and breakdown of our DigitalOcean infrastructure:

Web servers: We use two web servers - one 8gb instance and one 2gb instance. The biog instance serves most of our web traffic, and the smaller instance servers a little web traffic and provides most of our background workers.

Database servers: Our DB instances are the most intensive part of our infrastructure. We use 3 8gb instances for our cluster that is run on Neo4j (graph database). The database is the backbone of our product (similar to any social network) and the DigitalOcean instances handle Neo4j well and we've gotten good performance doing some pretty DB-intensive stuff (ex. we introduced a personalized algorithm sort for our content feed based on each user's tastes, collaborative filtering, etc.). For backup purposes we keep an additional single database instance at another hosting provider, in case of emergency.

Caching: We're able to use a small 1gb instance for our Redis server which handles our caching needs nicely.

Analytics: We run an 8gb instance that hosts a Graylog server (analytics build on ElasticSearch) for all of our logging and analytics-needs.

For a small company like devRant, DigitalOcean has provided us with everything we need to keep our app running. We're completely self-funded so we can't afford to have redundancy for every component of our infrastructure, which is why reliability of our hosting provider is so important. We've always said we never want to become the ranting subject of our own app, so we have to ensure maximum uptime :)