Last decade has seen huge rise in cloud computing. The worldwide public cloud services market is forecast to grow by 17% in Year 2020 as compared to Year 2019 (Reference Gartner Inc). The huge demands to server market need with agility have opened platform for several companies to gain competitive advantage to strategically transformed their ongoing/future business on cloud.
The cloud native is an approach to deliver business value by leveraging the cloud technologies and applications and build underlying architecture. In details, it’s a collection of loosely coupled independent services to provide a consistent development and automated management experience (CI/CD) across private, public, and hybrid clouds. Could Native is not about Servers its about Services. Like Infrastructure as a services, Platform as a services, Anything as a Services.
Let’s say you have to design cloud native system to run social media application. You can here leverage the advantage of available tools and architectural approach to automate the business process like cloud experience and deliver Services to customer
How to design Cloud Native: The design of cloud native includes cloud delivery model and several available tools integrated to integrate with CI/CD environment. The building block of cloud native includes.
1- Container– Containers are basic building blocks for Cloud Native to host applications. Container are enabling operating system virtualization to host application code and run anywhere. Docker is leading tool to create container.
2- Microservices: Microservice is an architectural concept to breaking up applications in loosely coupled way that allows application components to be developed, deployed, managed, and operated independently.
Let’s say you are using a social networking site which have features like Login, feed, Chat, News etc. Developing the site in Monolithic way must all the source code for all the services are integrated with each other, however in Microservices way you can create independent code base of login, feed, chat, and news services and they will interact with each other whenever required. They will be loosely coupled and production issues in any one microservice do not lead to application wide outages to other services. This makes it easier to contain production issues as well as respond and recover quickly.
3- Service Mesh: In Microservice architecture each separate applications to deliver services must interact with each other very frequently. In complex scenarios where hundred or thousand of microservices are deployed to fulfill the service requirement will increase overhead on service-to-service communication. Service mesh is helping to manage the communication at scale with reliability.
Service meshes have two main components: 1- the control plane and 2- data plane. Typically, the set of proxies are called the data plane and the task management processes are called the control plane. Istio, Cosul are market leading tools for creating service mesh.
4- Container Orchestration: While Docker will help you to create container to host application code, however it will not allow you to scale and ensuring high availability of applications. You would be required an orchestration tool which can enable you to manage these containers and hosted applications on the fly. The Docker has orchestration tool called Docker swarm however Kubernetes is more popular and industry leading tool.
5- Continuous Integration and Delivery: CI/CD is an automated approach with practices and sets of tools that is allowing to accelerate development lifecycle and releases with reliability. It’s also extended to the delivery and deployment stages to ensure new feature are production ready. Jenkins, Git, CircleCI, AWS CodeBuild etc. are leading CICD tools.
6- Cloud-native networks Function: It a software-implementation of a network function, which runs inside a container to deliver private network experience. Traditionally it is performed by a physical device. Cloud native networks tools make it easier to manage networking for cloud native applications.
Example: (i) Multus is the open-source project that enables Kubernetes pods to attach to multiple networks. (ii) Weavenet: It create virtual layer 2 network that connects containers on the same host or across multiple hosts.
7- Monitoring: To monitor applications, alarms of hosted applications and underlying infrastructure. Prometheus and Graphana are leading tool to capture alarms, data for monitoring and analysis.
8- Application programming interface (API): It is set of tools, definitions, and protocols to interact with applications and services. It facilitates the communication with external channel/ partners and products without building separate infrastructure interface. API can be designed as private, shared, or public.
9- Log management: With the dealt with microservice base architecture, every application is generating own logs based on their functionality. In complex architectures it is required to store and manage logs at a single place where all the information is stored to track and analyze. Elastic stack is popular log management tool. It is a distributed key-value store.
10- Tracing: Tracing tools are helping to monitor and visualize the transactions within distributed microservices base network. It facilitates with debugging features in complex distributed environment. Zipkin and Jaeger are available tools for tracing purpose.
11- Data Bus: The tools require to process the data from one services to another. Apache Kafka is an open-source distributed event streaming platform.
12- Securing communication with Certificate: Certificate is required to secure the communication between services. Typically in container based architecture all applications are running on virtual OS (Container) on the same physical machine without encryption. The certificate will help in building trusted communication between services. Google Managed SSL certificates are Domain Validation (DV) certificates.