Are you a cloud architect? How do you plan a new infrastructure for a product?
How do you build workflow in the cloud?
What are the considerations of cloud security, costs and automation?
All are relevant questions when planning a new cloud design for a product runtime, so let’s discuss it.
Also, this is my approach and it serve me well in all of my designs and cloud operations in production.
Preplan
Preplan is not part of the 6 rules and just a starting point.
It’s better to plan before starting to build any project, in order to plan you’ll need to understand the product, ask these questions:
- What problem is the product solves?
- Who’s going to use it? (demographics)
- What are the business risks of downtime?
- What is the expected or current revenue?
- What is the technical flow of the product? (user login, integrate with API, consume data from database, etc..)
The more you ask the more information you’ll have in the design process, so don’t skip this step.
It’s easy to just go into building stuff and not ask for need and requirements.
Costs
If your design will cost more than the revenue the product won’t justify itself, this is very important as a bad design in costs perspective can have a significant affect on the entire business operations.
So, in every step of the planning consider costs!
Cloud Security
In every product there’s a risk factor in term of business risks, what if the application is down for 1-hour? what is the affect in term of reputation and revenue?
What if some services and data are exposed to unauthorized parties?
So, ensure to include security measures in the design to make sure your product is protected, but don’t overdue it as it can cause issues with workflow and runtime.
Balance is key here.
Automation
Building and working without automation means spending time on repetitive tasks, this is not efficient and will cause slow delivery.
Try using IaC (Infrastructure as code) approach, this means you can deploy and modify entire infrastructure in minutes.
Also, you can find out the current stack components by checking the IaC files.
Combine IaC and Immutable infrastructure to get maximum results.
Decouple Dependencies
When building software and infrastructure it’s easy to tie components and hard-code stuff, the more hard-coded and dependency there is between different components the more issues it will cause.
Let’s say that you designed the infrastructure with hard-coded IP addresses, this means those IP cannot change, the same for other config files.
Another example is start-up of a service that is deepened on other services, for example application that’s require the monitoring agent to start, monitoring is nice but should not affect production services.
Continuous Software Updates
Software freeze is a risk in my opinion, this approach will lead to more work that needs planning and the longest the freeze the hardest it is to upgrade.
Let’s say you’re using Python3.6 and are using pip packages in your code, this means you cannot upgrade your OS because new OS comes with latest Python version and that python version uses the latest pip version.
So now you can’t upgrade your Python, pip or OS, just because you did not integrated updates in the regular operations.
Keep your code and system up to date!
Remove Single Point Of Failure
Similar to couple dependencies that can cause issues, relying on a single endpoint or component is risky, let’s say you’re using one load-balancer, what happened if that load-balancer is overloaded?
Single database? the same issue
Those are simple examples but in your product there are probably more components that are defined as single point of failure.
The less single point of failure the better!