When you are creating a software product these days it is imperative to create a decoupled architecture. Gone are those days when everything was done on one server. With the advent of cloud computing, it is cheaper and reliable to not have a single point of failure.
I use the following services to create a decoupled architecture which you can also do for your next project:
- Server: Digital Ocean (https://www.digitalocean.com/)
- Server Control Panel: Server Pilot (http://www.serverpilot.io/)
- DNS: Google Cloud DNS
- Transactional Emails: Mandrill (http://www.mandrill.com)
- Storage: Amazon S3
- Queues & Workers: Iron IO (http://www.iron.io/)
- Code Hosting: Gitlab (https://gitlab.com/)
- Domain: Godaddy
- Server Monitoring: Boundry (http://www.boundary.com/
- Application Monitoring: New Relic
I don’t use AWS for anything else except the storage, although they provide everything under one roof, because for some they are expensive and in the past their data centre has gone down for couple of hours resulting in losses. If you choose different providers, then you choose different locations or data centres. This way not everything might go down simultaneously.
Always prepare for the worst and ensure that your customers are always happy. One bad experience wipes out all the previous good ones.