Being a CTO and a solution architect for many years I am not at all biased however I must say arguably, it was by far the best AWS re:invent event that has happened ever. AWS is offering 3500+ cloud services that clearly shows the amount of investment AWS is making who owns 47% market share of Cloud Revenue and why you need to think about building effective Cloud and Cloud Migration strategy for your application sooner than later. Other important players are Azure 10%, Google 4%, and IBM 3%.
As an outsource software development solution provider, It is always an important task for me and my team to keep eye on overall innovation in cloud space and how it is helpful for me to build better optimised Cloud Native strategy for my clients to make them future proof.
Features of Cloud Native Application
Think about future, how will you build the system that stays relevant in future.
Controllable - Smaller is easier to control. Decompose to smaller building blocks so each of them can be controlled separately. That leads to Microservices and Cloud Native movement.
Always think about how can you control 4 areas of software development life cycle
- Build - Smaller independent teams
- Deploy - Automation
- Monitor - Automation
- Scale - Automation
Resilient - Resiliency is the ability of your system, to recover quickly and continue operating even when there has been any kind of outage.
- You need to protect the customer,
- There shouldn't be single point failure.
- Implement network and application level security.
Adaptive - Do not make capacity decision up-front, you will end up paying a huge cost for the infrastructure that is not needed while you are building or early stage of your system. Scale when you really need. Build adaptive infrastructure to workload. It should scale and shrink as per the workload.
Data-Driven - Make data-driven decisions, don’t guess, start running the things in production and use facts to build your system. That means you need data to make decisions,
- your developers are implementing efficient logging and monitoring strategy and tools right from the first day of the development.
- you have all sort of user behavior tracking tools implemented.
- you have all sort of infrastructure monitoring and alerting tools.
This thought process will help you make decisions like,
- How much should I invest on to the infrastructure?
- Do I really need to build more features or make current features more customer friendly?
- What is exactly failing or not working out?
- Is there any scope for performance and usability improvement?
- Is it the right time to go back and refactor?
So I briefly touched what it takes to build Cloud Native strategy, now let's understand what all principles to follow to choose right public cloud provider and build right Cloud Native strategy
Principles of building Cloud Native architecture.
AWS has published great documentation around this, here. In my opinion. Your Cloud Native architecture should be standing on below 5 pillars. Map the services offerings by your cloud provider to fit into this framework.
- Infrastructure as a Code
- Make frequent, small, reversible changes
- Anticipate failure
- Learn from all operational failures
- Implement a strong identity foundation
- Enable traceability
- Apply security at all layers
- Automate security best practices
- Protect data in transit and at rest
- Prepare for security events
Common sources of interruption
- Hardware failure
- Deployment failure
- Load induced
- Data induced
- Credential expiration
- Identifier exhaustion
- Democratize advanced technologies: Let cloud provider handle complex technology implementation stuff like installing and scaling. E.g. Machine Learning, IoT Development, DB Clustering, and sharding.
- Choose right regions - Be near to your customer.
- Leverage serverless architectures
- Adopt a consumption model
- Measure overall efficiency
- Stop spending money on data center operations
- Analyze and attribute expenditure
Suggestions to build Cloud Native application
- After working with many startups and enterprises of various scale and size, I have my opinion to build Cloud Native applications.
- I believe building Cloud Native applications is the need. Make sure application is Controllable, Resilient, Adaptive and Data Driven. The idea is to make the architecture future ready.
- Build and Manage infrastructure by yourself only if it’s necessary. The current cloud providers are innovating at an impressive rate. Leverage the innovations done by the cloud provider to optimize your time, cost and resources.
- Before you decide to build and manage the infrastructure on your own, do a thorough cost-benefit analysis (Managed Services Vs Build and manage). Don't forget to calculate the cost of DevOps Services efforts to handle your cloud infrastructure which is not managed by providers. Most of the times the Managed services will outperform the orchestration effort that you put in.
- Architecture evolves as per your need and scale. Nobody gets the architecture perfect in the first pass. The architecture has to be designed, corrected, refined and repeat. Once you have enough data on usage, you will be able to make informed decisions about your cloud infrastructure.
- Focus most of your time building right product for your customers and not on building right infrastructure, offload it to your cloud provider, look for more managed services.
- Security is important and number one priority at each stage of software development, it is an investment, not an expense.
- Automate most of the workflow in custom software development life cycle. CI/CD, Testing, Security, Monitoring, Alerting, and Scaling.
Compare leading cloud providers
Amazon Web Services (AWS)
Microsoft Azure Cloud