Okay, let’s face it: the world is figuring out that cloud is for everyone, and not just for large-scale enterprises. This is a big step ahead, but when it comes to smaller companies there are still many misconceptions and wrong expectations.
Wrong expectations are the main push back reason, because they usually lead to catastrophic failures and disasters that leave migrating back to a legacy infrastructure design as the only option left.
(Image Source: XKCD)
But, comes out, it’s easier than you would expect. There is a basic set of rules and guidelines, and if you follow them then there is a 99.99% change you will be successful.
Let’s start today with the 8 don’ts.
- Never, ever trust a single hosted service. Don’t rely on redundant database platforms, replicated block devices, and many more. They can still go down: planning for failure on the application layer is the thing to do.
- Don’t put all your eggs in a single bucket: cloud platforms are based on different locations by nature, so you really should leverage this feature. True geographical redundancy can be hard to achieve, but try at least to have read replicas spread over the world, so that in case of downtime of your main region your service would just be degraded and not completely unreachable.
- Don’t think small. Some design patterns could seem overkills at first sight, but believe me, they are not. If you focus on designing your service so that it is ready for scaling up since the beginning, you won’t have to worry about later.
- Don’t implement complex software platforms: micro services are the way to go. Keep them simple and easy to maintain. It will be easier to scale each of them not only from a technical point of view: imagine how easy could be handing over not a part of a complex software, but a micro service to a new dedicated development team.
- Never forget that performance is the key: a killer SQL query could still be affordable if you have a low number of users, but is going to be an issue in the future. Make your platform as efficient as possible, also when it doesn’t seem strictly needed (yet).
- Don’t forget that everything could break, everytime. Keep your instances as simple as possible, so that they are easy to maintain. If one fails or starts misbehaving, just respawn it, don’t waste your time trying to fix. In an ideal world, they should be stateless.
- Vertical scaling is a no go. Choose the size of your instances based on the performance you want the single request to have, but always spread multiple requests horizontally. This will help the overall availability as well.
- Don’t be ‘legacy’: the world around you is moving very fast, and just looking at it makes no sense. New releases of software packages usually improve their performance, and new versions of the services your cloud provider is offering you usually improve everything, especially cost. Running a legacy instance type just because your platform is too hard to upgrade to a newer operating system, makes no sense and is going to kill your business in the long term.
Here we are. And now go and build!