A strategic advisor and a business transformation leader with over two decades of expertise in software product engineering, enterprise architectures and end-to-end project management. Sunil has an impressive track record of delivering high performance enterprise applications for the Fortune 500s of the world. Having lived and worked, both in India and USA, Sunil enjoys interfacing and understanding work and organizational dynamics of different cultures. He is a trusted collaborator in delivering impact to a business ecosystem of partners, employees and customers. Sunil focuses on building long-lasting relationships with stakeholders on a bedrock of mutual respect, integrity, and meritocracy.
Cloud is fast becoming the infrastructure of choice for organizations of all sizes. Virtually unlimited compute and storage, on-demand elasticity, lower cost of ownership, robust security, and high availability are some of the highlighted benefits of the cloud infrastructure. But are organizations really ready to absorb the advantages of running applications on the cloud?
Existing business applications, architected for traditional on-premise infrastructure, follow certain architectural patterns to meet non-functional requirements such as performance, security, availability; this list could go on. These patterns will not work in the cloud environment. A cloud-native architecture opens up many possibilities. But it also introduces new constraints that are different from that of traditional on-prem infrastructure.
Whether applications are born-in-the-cloud or migrated-to-the-cloud, they should follow the cloud-native architecture to take full advantage of all that the cloud promises while addressing ways to handle new constraints.
Deliver better value with cloud-native architecture
With horizontal scaling offered by the cloud infrastructure, applications can automatically scale up or scale down based on user demand. This ensures that an application is better suited to handle rapid changes in user traffic. Thus, helping a business to optimally serve its customers.
By automating build, testing, and deployment (continuous integration, continuous delivery), development teams can enhance applications on an incremental basis, iteratively release new features to users, and meet non-functional requirements – all this while maintaining high quality and availability.
Logging and monitoring can be built into a cloud-native application to help monitor the health of a system and automate its recovery, in case of failures. This minimizes application downtime by detecting and even predicting mishaps, whether they are related to user functionality or non-functional problems.
Cloud-native applications are typically internet-facing and are, hence, prone to external and internal attacks. Security must be built deep into an application by introducing authentication between and minimizing trust among components of the application.
It is difficult to maintain a user’s state because application services are designed to run on different instances. Hence, application components need to be stateless to the maximum extent possible. Stateless components are easy to scale, repair, and rollback.
Beyond the cloud infrastructure, most cloud providers offer a rich set of managed services that take away the operational overhead of managing software and infrastructure, but these managed services make the application less portable. It’s a trade-off but the benefits of managed services outweigh the risks, in general.
Going forward, hybrid infrastructure (public cloud, private cloud, on-prem) will be a reality for many enterprises. But with such adoptions, the need for specialized skillsets is high and additional services are required for making it all work in tandem.
Ways to migrate or build applications that can run in the cloud infrastructure
There are three ways to migrate legacy applications to the cloud infrastructure.
- Use containers to run an application with minimal changes – a quick and dirty way, but expensive and sub-optimal. This doesn’t take advantage of cloud-native features
- Refactor a monolithic application into microservices that can be independently developed, tested, deployed, and upgraded. While microservices make this application more adaptable, they also increase the application complexity. Refactoring is expensive, time-consuming, and error-prone
- Rewrite a given application ground-up, using the principles of cloud-native architecture. This approach may be expensive upfront but will have the best ROI and future-readiness
Functions-as-a-Service platforms like AWS Lambda and Google Cloud Functions can be leveraged to implement distributed, event-based, serverless applications. Serverless computing removes the need for developers to manage servers or runtimes. Serverless architecture automatically scales up or down the cloud resources based on the workload, potentially saving a business a lot of money.
It is apparent that cloud-native is quickly becoming a preferred method for application development and modernization, and one can only realize its massive potential with the right “cloud-native” mindset. The cloud-native architecture itself is fast evolving and so are the cloud infrastructure providers and the entire ecosystem housing such applications. Organizations that embrace change as a way of life, will be well-positioned to keep pace with such a fast-changing technology landscape.