With the rolling tide of cloud computing, the concept of CloudNative (CloudNative) emerged at the historic moment, CloudNative is very hot, fire in a mess, 0202 years, if you do not understand CloudNative, that really out.

Everyone will say that the cloud is native, but few people tell you what the cloud is native, if you look for information, read most will feel the cloud around the fog cover, a little knowledge, in short very empty; It may even make you doubt your own intelligence for a while, but if I can’t read an article, I attribute it to the person who wrote it being stupid, which is not necessarily true, but this way of thinking helps me avoid the negative emotions of self-doubt.

The explanation of cloud native is not clear because there is no exact definition of cloud native. Cloud native has been developing and changing, and the right of interpretation does not belong to any one person or organization.

What is cloud native?

Technology change, must be thought first, cloud native is a method of building and running applications, is a set of technology system and methodology. CloudNative is a combination word, Cloud+Native. Cloud means that the application resides in the Cloud, rather than in a traditional data center; Native means that applications are designed with the cloud environment in mind from the beginning, designed for the cloud, run in the best posture on the cloud, and make full use of the elastic and distributed advantages of the cloud platform.

Matt Stine of Pivotal first introduced the concept of CloudNative in 2013; In 2015, when cloud native was first introduced, Matt Stine defined several characteristics of cloud native architecture in his book Migrating to Cloud Native Architecture: 12 factors, microservices, self-agile architecture, API-based collaboration, vulnerability; In 2017, Matt Stine changed his tune in an interview with InfoQ, summarizing cloud-native architecture as modular, observable, deployable, testable, replaceable, and processable. In Pivotal’s latest official website, cloud native is summarized in four key points: DevOps+ continuous delivery + microservices + containers.

In 2015, the Cloud Native Computing Foundation (CNCF) was established. After THE INCORPORATION of CNCF, the original definition of cloud native includes: container packaging + automated management + microservice-oriented; In 2018, CNCF updated the cloud native definition to include Service Mesh and declarative apis.

As you can see, different people and organizations have different definitions of cloud native, and the same people and organizations have different definitions of cloud native at different points in time, which is confusing to me. My response is simply to pick the definition that I can remember and understand best: DevOps+ continuous delivery + microservices + containers.

In short, in line with the cloud native architecture application should be: using open source stacks (K8S + Docker) to container, improve flexibility and maintainability based on micro service architecture, using agile methods, enterprise support continued iteration and ops automation, using cloud infrastructure platform to achieve flexibility, dynamic scheduling and optimizing resource utilization.

Cloud native applications are easy to build, easy to deploy, and scalable on demand. The advantages are varied, the disadvantages are very small; Second to kill the traditional Web framework, hang hit the ancestral IT mode, is really a survival, evaluation and promotion of rare ultimate top-secret weapons.

The four elements of cloud elements

The service: Almost every cloud native definition contains micro service, monomer applications would be relatively with the micro service, the service has theoretical basis, that is conway’s law, the guidance services how segmentation, mysterious, who can called a theory of law are not easy to understand, or te didn’t b, probably mean organization decided to product form, I don’t know whether it has anything to do with Marx’s relations of production affecting productivity.

The advantage of microservice architecture is that after the function is cut, the service is decoupled, the cohesion is stronger, and the change is easier. Another technique for partitioning services is said to be based on DDD.

Container: Docker is the most widely used container engine, which is widely used in the infrastructure of Cisco, Google and other companies. Based on LXC technology, Docker provides implementation guarantee for micro-services and plays the role of application isolation. K8S is a container orchestration system, which is used for container management and load balancing between containers. Both Docker and K8S are written in Go and are good stuff.

DevOps: This is a combination, Dev+Ops, which is the combination of development and operations. Unlike development and product, which often go hand in hand, DevOps actually includes testing. DevOps is an agile mind, a communication culture, and an organizational form that provides continuous delivery capabilities for cloud natives.

Continuous delivery: Continuous delivery is about developing on time, updating on time, taking small steps, and going against the traditional waterfall development model. This requires both development versions and stable versions, which actually requires a lot of processes and tools.

How to cloud native?

First of all, Cloud computing has taken advantage of cloud computing. Without cloud computing, there is no cloud native. Cloud computing is the foundation of cloud native.

With the maturity of virtualization technology and the popularity of distributed frameworks, driven by open source communities such as container technology, sustainable delivery, choreography systems, and development concepts such as microservices, cloud applications have become an irreversible trend.

The three-tier division of cloud computing, namely Infrastructure as a Service (IaaS), Platform as a service (PaaS) and software as a Service (SaaS), provides the technical foundation and direction guidance for cloud native. The real cloud is not only the change of infrastructure and platform, but also the change of application. The architecture design, development mode, deployment and maintenance are all redesigned based on the characteristics of the cloud, so as to build a new cloud application, namely cloud native application.

1. While traditional applications deployed locally are often written in C/C ++ and enterprise-level Java, cloud native applications need to be written in new web-centric languages such as GO and Node.js.

2. Traditional applications deployed locally may require downtime for updates, while cloud native applications should always be up to date and need to support frequent change, continuous delivery, blue-green deployment.

3. Traditional applications deployed locally cannot scale dynamically and require redundant resources to resist traffic peaks. Cloud native applications, on the other hand, use the elastic automatic scaling of the cloud to reduce costs and increase efficiency through sharing.

4. Traditional applications deployed locally depend on network resources, such as IP addresses and ports, or are hard coded. Cloud native applications have no such restrictions on network and storage.

5. Traditional applications that are deployed locally are usually operated manually by humans, while cloud native applications are automated.

6. Traditional applications deployed locally usually rely on the system environment, while cloud native applications are not hardwired to any system environment, but rely on abstract infrastructure, thus achieving good portability.

7. Some traditional applications deployed locally are monomer (monolayer) applications or strongly dependent applications, while cloud native applications based on microservice architecture are more reasonable with vertical service division and modularity.

As you can see, moving to cloud native applications requires a new cloud-native approach to work. Cloud native includes many aspects: infrastructure services, virtualization, containerization, container orchestration, microservices. Fortunately, the open source community has done a lot of effective work in cloud native applications, and many open source frameworks and facilities can be directly used through the application. Docker was launched in 2013 and soon became the de facto standard for containers. In the dogfight surrounding container arrangement, K8S, which was born in 2017, soon stood out. These technologies significantly lower the technical threshold for developing cloud-native applications.

Although the cloud-native referral document is a bit of a guide, I can’t argue with the advantages it lists. In that case, cloud native is great, and does the application need to switch to cloud native immediately? My point of view is: ideal is full, reality is often very skinny, need to start from the actual needs of the application, whether the current problem really affect the business development, and whether the cost of starting over can be borne.

Trends and impacts of technology

Software design has two key goals: high cohesion and low coupling. Around these two core goals, design principles such as single responsibility, open and close principle, Richter replacement, dependency induced, interface isolation, and minimum knowledge are proposed.

Software engineers are always striving for both goals, to write software that is clearer, more robust, and easier to extend and maintain.

But later, people found that have more appeal, want to develop the software easier, faster, and programmers want to write less code, non-professional researchers also hope to be able to develop the program, as a result, more and more stupid programming language was invented, and more programming technology and the programming thought is invented, such as libraries, components, cloud infrastructure.

So a lot of technology into a slew of skills, such as assembly, times have changed, after the founding of the animal can’t become pure, no dragon can kill, then many software engineers has become an adjustable parameter engineers, Call the API brick house, with a spell components library package expert, talent, this is the result of division of labor efficiency, the special technology development.

In nearly 20 years of science and technology the Internet development, big trend is sinking technology, especially in recent years, with the development and popularization of cloud computing, infrastructure is more and more thick, business development is becoming more and more easy, more and more is also no technical content, and troubled small team performance, security, scalability, load problems are gone, This makes the greasy uncles of the Internet industry feel like they are about to be swept into history.

While it is undeniable that technology is becoming less important, it is not that pessimistic. In the PC era, when VB, Delphi, MFC appeared, there are similar arguments, what you see is what you get, a little mouse, you can develop PC desktop program, is it very high-end? At that time, the concern of code farmers is probably more than now, but later with the rise of the Internet, the emergence of the back-end development of this kind of work, code farmers quickly found a new battlefield, network, distributed, database, massive services, disaster recovery and error prevention, so play a bunch of new patterns.

If the infrastructure of the PC era is the control library, and the infrastructure of the Internet era is the cloud, what is the infrastructure of the AI era? What high-end gameplay will there be?


Click follow to learn about the fresh technologies of Huawei Cloud