“If you can’t describe what you are doing as a process, you don’t know what you’re doing.”
They are running banking software, social media, video streaming platforms, music platforms, etc. with millions and millions of end-users. Most of these users are millennials looking for real-time, for fast interactions, for frictionless, for more integrations between all their favorite applications…
Cloud platforms combined with open-source frameworks, technologies, and languages are everywhere and they have proven their efficiency and ability to run business-critical applications, meet high SLAs, and respect strong performance constraints.
We have already talked in the first article of this series about the obsolescence of the legacy systems. Today, you have a plethora of open-source, free, and proven off-the-shelf alternatives. I’m not going to argue again on the benefits of adopting them, rather I want to warn you from re-inventing the wheel. Actually, your home-made UI layer or fork of any open-source database is not a good option for your modernization. The best technologies are open source and the force of the communities is not debatable. Even big actors (Google, Amazon, Netflix, Microsoft…) are pushing open-source frameworks both to their platforms and to the communities to enhance them, quickly fix bugs, and adopt them in more and more projects. Although you may have a very, very, very good reason, do not modernize your application using proprietary technologies (even if they are yours).
These open-source frameworks allow building Cloud-Native Applications (CNAs) that are designed, built, and operated based on the Cloud Computing model in order to leverage most of the available resources, e.g., networks, servers, storage, data, and application services for developers.
When companies build and operate cloud-native applications, they bring new ideas to market faster and respond sooner to customer demands. Cloud Nativeness is often wrongly linked to where the application is running and not to how the application is created, deployed, and updated. Designing an application architecture for the cloud needs to start from a consideration of the main quality attributes of the cloud. Although modern Cloud platforms such as AWS, Azure, GCP, etc. propose all these features as plug-and-play commodities, your modernized application architecture should be designed to make benefits of these capabilities.
Your application must be capable of growing and managing increased demands. When demands are increasing, it must be able to easily increase the number of servers currently used. When the increased demand is reduced then it moves back to the original configuration.
Scalability enables you to accommodate larger workloads without disruption or complete transformation of existing infrastructure. Scaling provides the best experience of the flexibility of time and money for business agility. Cloud-based scalability can be leveraged only if the application architecture allows running independent services.
In fact, the application should be designed as a set of components, services, or microservices that depend on each other to the least extent practicable. This pattern is called loose coupling. The goal of a loose coupling architecture is to reduce the risk that a change (expected or not) made within one component will create unanticipated changes within other components. Different services in a loosely coupled architecture can be scaled independently from each other according to their specific requirements and actual request stimuli. Furthermore, each service can be developed and operated by different teams. Thus, this pattern does not only have a technological impact but also an organizational one. Your architecture must guarantee the ability to quickly implement new features, test them, and perform quality control (Time-to-Market). Both technical (architectural) and process (methodological) choices must be made in order to meet this requirement.
Your application must be available, functional, and working despite expected or unexpected failures of components in the system, i.e., it must be designed for failure.
Your customers/end-users expect services without disruption. A service without disruption would mean an uptime of 100%. The cloud brings the promise of higher availability, but that applies only to the infrastructure and not to the applications built on top of that infrastructure. For instance, following DevOps principles, your application needs to be constantly updated without becoming unavailable to users even for a very short period of time. You need to avoid this downtime by performing a blue/green deployment, where you deploy the new version to a separate environment and then swap the two environments to redirect traffic to the new version instantly.
Your application must be capable to prevent data loss, information leaks, and unauthorized usage of your customers’ data. Multiple Cloud services incorporate prevention tools for all these requirements and are able to handle all the security at the infrastructure level. Your application architecture must deal with access controls, encryption capabilities, strong passwords, etc.
To sum up, when modernizing your application, keep in mind that relying on proven open-source frameworks coupled to Cloud platforms is a very good option only if the chosen architecture has been designed and built to make profits of their respective strengths.
No setup. Free trial. No credit card required.