云原生是一条最佳路径或者最佳实践,为用户指定了一条敏捷的、能够以可扩展、可复制的方式最大化地利用云的能力、发挥云的价值的最佳路径。云原生其实是一套指导进行软件架构设计的思想,按照这样的思想而设计出来的软件:天然就“生在云上,长在云上”,能够最大化地发挥云的能力,使得我们开发的软件和“云”能够天然地集成在一起,发挥出“云”的最大价值。 云原生的最大价值和愿景,就是认为未来的软件,会从诞生起就生长在云上,并且遵循一种新的软件开发、发布和运维模式,从而使得软件能够最大化地发挥云的能力。
容器技术是云原生技术的核心底盘,它使得应用具有了一种“自包含”的定义方式,能以敏捷的、可扩展可复制的方式发布在云上,发挥出云的能力。云原生技术有两个理论基础:
- 不可变基础设施。这一点目前是通过容器镜像来实现的,其含义就是应用的基础设施应该是不可变的,是一个自包含、自描述可以完全在不同环境中迁移的东西;对于应用而言,它就不需要关心容器跑在哪里,这就是基础设施一致性非常重要的一个特征。镜像本身就是自包含的,其包含了应用运行所需要的所有依赖,因此也可以漂移到云上的任何一个位置。
- 云应用编排理论。当前的实现方式就是 Google 所提出来的“容器设计模式”。
云原生的技术范畴包括了以下几个方面:
- 第一部分是云应用定义与开发流程。这包括应用定义与镜像制作、配置 CI/CD、消息和 Streaming 以及数据库等。
- 第二部分是云应用的编排与管理流程。这也是 Kubernetes 比较关注的一部分,包括了应用编排与调度、服务发现治理、远程调用、API 网关以及 Service Mesh。
- 第三部分是监控与可观测性。这部分所强调的是云上应用如何进行监控、日志收集、Tracing 以及在云上如何实现破坏性测试,也就是混沌工程的概念。
- 第四部分就是云原生的底层技术,比如容器运行时、云原生存储技术、云原生网络技术等。
- 第五部分是云原生工具集,在前面的这些核心技术点之上,还有很多配套的生态或者周边的工具需要使用,比如流程自动化与配置管理、容器镜像仓库、云原生安全技术以及云端密码管理等。
- 最后则是 Serverless。Serverless 是一种 PaaS 的特殊形态,它定义了一种更为“极端抽象”的应用编写方式,包含了 FaaS 和 BaaS 这样的概念。而无论是 FaaS 还是 BaaS,其最为典型的特点就是按实际使用计费(Pay as you go),因此 Serverless 计费也是重要的知识和概念。
云原生关键技术点有这四个方向:
- 如何构建自包含、可定制的应用镜像;
- 能不能实现应用快速部署与隔离能力;
- 应用基础设施创建和销毁的自动化管理;
- 可复制的管控系统和支撑组件。