Cloud computing through more than ten years of development, from the beginning to discuss what is cloud computing, cloud computing to debate whether new wine in old bottles, and then to discuss how to build the cloud base ability, to the application of how to build cloud platform as the industry continuously explore of cloud computing technology, our understanding of cloud computing and expectations in the growing. Currently, most enterprises have realized the competitive advantages of cloud computing and have built their own private cloud infrastructure or moved their data centers to the public cloud. How to make the best use of cloud computing infrastructure is the most important issue in the current cloud computing technology. Applications based on cloud computing platforms are called cloud native applications in the industry.
I. Definition of cloud native
Cloud Native is a way to build and run applications, a set of technical systems and methodologies. Cloud Native is a compound word, Cloud+Native. Cloud is a Cloud platform. Native applications take the Cloud environment into account at the beginning of design. They are designed for the Cloud and run in the best position on the Cloud, making full use of the flexibility and distributed advantages of the Cloud platform.
- History of the native cloud
In 2013, Matt Stine of Pivotal first proposed the concept of CloudNative to distinguish between applications designed for the cloud and traditional applications on top of it.
In 2015, Matt Stine, in his book Migrating to Cloud Native Architecture, defined several characteristics that fit the native cloud architecture: 12 factors, microservices, self-agile architecture, API-based collaboration, and anti-vulnerability;
In 2015, the Cloud Native Computing Foundation (CNCF) was established. As a vendor-neutral foundation,CNCF is committed to the promotion and popularization of cloud native applications.
In 2017, Matt Stine summarized the native cloud architecture as modular, observable, deployable, testable, replaceable, and processable. Pivotal's latest website Outlines cloud native in four key points: DevOps+ continuous delivery + microservices + containers.
- CNCF's definition of cloud native
CNCF(Cloud Native Computing Foundation) was founded in July 2015 and belongs to the Linux Foundation. Its original intention is to focus on "Cloud Native" service Cloud Computing. CNCF is a vendor-neutral foundation dedicated to promoting fast-growing open source technologies on Github, such as Kubernetes, Prometheus, Envoy, and others, to help developers build great products faster and better.
The establishment of the Native Computing Foundation (CNCF) is a milestone in cloud computing, marking the transformation of the focus of cloud computing from infrastructure construction to cloud architecture of applications. CNCF's definition of cloud native is a process of continuous optimization. At present, CNCF defines the native cloud as:
"Cloud native technologies enable organizations to build and run applications that scale flexibly in new and dynamic environments such as public, private and hybrid clouds. Cloud native technologies include containers, service grids, microservices, immutable infrastructure, and declarative apis.
These technologies enable the construction of loosely-coupled systems that are fault-tolerant, easy to manage, and easy to observe. Combined with reliable automation, cloud native technology enables engineers to easily make frequent and predictable significant changes to systems. "
In the first half of CNCF's description of cloud native, it gives the definition of cloud native and the best technical practice of cloud native at present. The second half indicates the goal of building cloud-native applications.
CNCF also provides the relevant technology stack for the construction of cloud native, as well as the incubation project information related to the foundation.
- Key technologies of cloud native
CNCF defines the key technologies of cloud native, including containers, service grids, microservices, immutable infrastructure and declarative apis, as the best practices of cloud native applications.
Container technology is a lightweight virtualization technology. The resource usage (including CPU, memory, disk I/O, and network) of each process is isolated by the operating system kernel. In this way, processes running in the container are isolated from other processes to a certain extent, and excessive extra consumption of Virtual machines (VMS) is avoided.
Containers typically work with container choreography systems, which provide the deployment and organization capabilities of containers. Container orchestration system can manage a large number of machines (physical machines or virtual machines) as a cluster in a unified manner, and deploy containers to the machines in this cluster by setting policies. Implement container multi-instance deployment and automatic configuration of application routing; Monitor infrastructure and containers.
Container and container choreography technology is of great significance to cloud native applications. Container provides a lightweight platform for cloud native applications. First, compared with traditional virtualization technology, container is extremely lightweight. Second deployment can be achieved; Container applications are also portable, built once, and deployed anywhere. While container choreography technology can deploy containers to a large cluster, it can also provide elastic scaling and failover capabilities for applications, thus realizing high availability of applications on containers. Improve application deployment automation and rapid deployment capabilities.
Linux Container(LXC) and runC are common Container technologies. RunC is currently the most widely recognized container implementation based on creating and running containers according to the OCI standard. OCI(Open Container Initiative) aims to develop an Open industrial standard around Container formats and runtime.
The most popular container choreography implementation is Kubernetes, an open source system for automatically deploying, extending, and managing containerized applications. It groups the containers that make up the application into logical units for easy administration and service discovery. Kubernetes is a product of Google's 15 years of experience in operating and maintaining production environments, as well as the best ideas and practices of the community. The current commercial and open source container platform is basically based on Kubernetes.
Traditional O&M infrastructure usually applies for one or a group of servers. O&m personnel install binary software packages on the servers and configure the environment using SSH or Agent. If you need to make changes such as version upgrades and parameter changes, you need to adjust the configuration files on a server-by-server basis and deploy the new code directly to an existing server. These servers host applications and parameters that can be changed, so it's a variable infrastructure. Also known as "Snowflake Server," servers are like snowflakes, each one unique and different.
Immutable infrastructure is different from traditional o&M in that servers are never modified after deployment. If you need to update in any way, such as a version upgrade or parameter configuration, you need to build a new server to replace the old one. In immutable infrastructures, servers are typically built as images, with each change corresponding to an Image. Immutable infrastructure is also known as a "Phoenix Server," and a Server should be able to rise from the ashes like a Phoenix.
The benefits of immutable infrastructure include greater consistency and reliability across the infrastructure, as well as a simpler, more predictable deployment process. It can reduce or completely eliminate common problems in variable infrastructures, such as configuration drift, cluster configuration consistency, and environment replication issues.
One way to implement immutable infrastructure is known as Docker. Docker is usually known as container technology, but in fact Docker provides a container packaging technology. The core concept of Docker is immutable infrastructure. Docker delivers software through Docker Images or Dockerfiles. Each new release is a reconstruction of the entire runtime environment, and each update is a new version of the Image. Docker can achieve the highest benefits by leveraging the lightweight deployment of containers.
As the requirements continue to increase, there are many problems that can occur in a single application, such as the need to redeploy the entire application for every small change, and the possibility that a code defect in a small module can make all services unavailable. Microservices are an architectural pattern that addresses these issues by making business applications consist of small independent services that communicate through well-defined apis. These services are managed by small independent teams. Microservices architectures make applications easier to scale and faster to develop, accelerating innovation and shortening time-to-market for new features.
The way microservices break down applications into small, independently deployed services is a natural fit with containers. Applications on the cloud require failover, elastic scaling, and fast start and stop, which are also design requirements for microservices applications. It can be said that the development of container and container choreography technology has greatly promoted the development of micro services. In turn, the development of micro-service applications has promoted the spread of container technology.
Because microservice is a distributed system, the complexity of distributed system design. In order to solve the complexity of microservice system design, various microservice governance frameworks emerge one after another. Popular examples include Spring Cloud, Dubbo and Istio.
Spring Cloud is a microservices governance bucket based on microservices excellence open source projects. There are different solutions and open source components to choose from. A relatively complete solution is Spirng Cloud Neflix. Spring Cloud is the most widely used microservice governance framework in the world. You can use the complete ecosystem of existing Spring to write essays seamlessly with SpringBoot.
Dubbo is an open source service governance project provided by Alibaba in China, which is also integrated with Spring. Many Internet companies in China choose Dubbo as their microservice framework.
Istio is an open source service grid project, which we'll cover in the next chapter.
As mentioned earlier, Docker and Kubernetes have solved the problem of application deployment, scheduling, and updating. However, as a distributed system, microservice applications need to deal with many problems during runtime, such as service discovery, fault fuses and load balancing. To solve these problems, the industry has gradually developed a microservice governance framework. Early microservices governance was based on development frameworks such as Spring Cloud and Dubbo. These development frameworks solve the problems of microservice runtime well, but they have some disadvantages such as locking development language, invasion of application, unclear development operation and maintenance responsibilities, etc. Service Grid (ServiceMesh) emerged in this environment.
A hot concept of late is the service grid, which is a software infrastructure layer for controlling and monitoring internal service-to-service traffic in microservice applications. It typically takes the form of a "data plane" for network agents and a "control plane" for interacting with those agents deployed with application code. In this model, the service grid is transparent to business developers, and platform operators can effectively operate and maintain applications without caring about the business, ensuring the reliability, security, and visibility of applications. The service grid is also minimally intrusive to the business application development process and friendly to all languages.
The main open source project for service Grid is Istio. Istio is based on a complete solution provided by the Kubernetes environment to meet the various needs of microservices applications. With Kubernetes' Pod, Istio injects a Sidecar, Proxy for all external traffic of a business instance, for each microservice instance, enabling behavioral insight and operational control capabilities such as service registry discovery, configuration management, fuses, and link tracing required by a microservice governance framework. It also provides flexible grayscale publishing strategy configuration.
The opposite of declarative is imperative apis. Imperative API is to give each operation step, the target system only needs to follow the steps to execute, the target system returns the result to the caller, the caller to process the result; Declarative apis give a final state, and the target system operates on the resource to meet the requirements without the caller having to intervene.
The advantage of declarative apis is that they make delivery between distributed systems easy. We don't need to care about any process details. Declarative approach can greatly reduce the workload of users and greatly increase the efficiency of development, because declarative approach can simplify the required code and reduce the work of developers. If we use the declarative approach to development, although it is more flexible in configuration, it brings more work.
One of the best examples of declarative apis is Kubernetes. The YML files used to manipulate K8s are all declarative. There are also open source projects with declarative apis for deployment, such as Terraform.
Second, the development trend of cloud native
- Operation and maintenance continue to sink, service grid will become the mainstream, and Serverless will be gradually promoted
One development direction of cloud computing is operation and maintenance sinking. Management functions and operation and maintenance work unrelated to the business are sunk into the infrastructure as far as possible, and applications can focus on the development and operation of business capabilities. The evolution of this trend affects the development direction of cloud computing. From virtualization at the beginning, to IaaS and PaaS, part of the o&M responsibilities of application systems are transferred to the platform o&M process.
PaaS offers cloud applications running container, solved the problem of the application deployment and runtime management problems, but still have a lot of operational work, especially for micro service applications, many of the problems need to be solved, such as service release and perception, the application of multiple instances load balancing, service failure detection and isolation, has applied gray release strategy, etc. These are not solved at the PaaS level and are usually solved by the development framework, the microservices governance framework we mentioned earlier.
Because the value of a business development team is reflected in the provision of business functions, the business development team should focus on the realization of business functions, and the non-functional requirements should be dealt with by the platform. Based on this demand, the service grid emerged. The problem of microservice governance can be unified operation and maintenance management of the service grid, and business applications only need to focus on the realization of business capabilities.
After the emergence of service grid, the life cycle of business applications still needs applications to ensure operation and maintenance. This gradually evolved into the concept of Serverless.