With every industry, there are best practices and a general “way of doing things.” Cloud architecture and the development of applications to be hosted on the cloud are no different. For building new applications for cloud, there are certain fundamental principles that have to be followed, as well. Over a period of time and after several iterations, the cloud application architecture standards, although not formalized, are being adopted by application architects and developers, as the go-to standard.
For customers who are looking to build new applications that are “born in the cloud” (cloud first genre), applications have to adhere to a common set of de-facto standards and/or include certain core components in their design.
The end goal in adopting these principles is to ensure:
- Ease of modifying and updating an application
- Ease of deploying code faster using continuous deployment/DevOps
- Release new versions of the code independently
- Incorporate Scalability and Elasticity, scale up and down on resources as needed
- Ensure application code portability
- Integration-Ease of connectivity to the internal services/applications or external third party applications
- Support multiple programming languages
The architecture must be inclusive of connectivity to other applications through API/Web Services/Message broker and able to support the applicable message formats XML/JSON/HTML.
The cloud application development principles that one has to adhere to are:
- Micro-services architecture
- Application Program Interface (API) driven and supported applications
- Event Driven Architecture
As per the Wikipedia definition, micro-services is a software architecture style in which complex applications are composed of small, independent processes communicating with each other using language-agnostic APIs. These services are small building blocks, highly decoupled and focused on doing a small task, facilitating a modular approach to system-building.
Utilizing all of these micro-services will:
- Allow application code to be portable
- Allow developers to independently build different application components that can be assembled together to form the application
- Enable services to be called from different set of applications simultaneously
- Enable application code to be hosted in multiple containers which can then be individually deployed
Container architecture/technology provides an additional layer of abstraction for the application code so that the code can be isolated and portable. Container technology utilizes operation system features to provide this abstraction and isolation. Container is a distribution method for each micro-service and can be used as a plug and play to deploy the code. Once a service/application is containerized, it is easier to package, ship, and run it across any cloud providers or on premise. Unlike traditional virtualization, Containers provide a lightweight virtualization at the application level.
Some of the popular containers that are utilized currently are:
Once a Microservices architecture is created, communication to the Microservcies or between the services is via Application programming interfaces (APIs). The API’s links services, applications and systems. Exposing Systems of Records as API’s will help Enterprises or businesses to tap new markets, provide differentiated customer experiences and open new revenue channels. The API’s also bridge the gap in a Hybrid architecture between cloud native applications and Enterprise Systems of Record. The API protocols are robust enough to enable the application to scale and be responsive.
An event-driven architecture (EDA) is a service that executes an Action – application code or micro-service in response to an event. The event can be triggered from a web/mobile or other end point. The code to be executed is embedded in a container that is instantly deployed and executed when an event is triggered. And a rules engine is associated to map the action of executing an application code to specific event. EDA is applicable to systems which transmit events among loosely coupled software components and services.
With EDA framework you can address:
- Optimal utilization of resources, if no events are triggered, there are no code that is executed and deployed and hence no resources consumed.
- The event driven architecture also facilitates applications to be more responsive