01. 云原生概述

云原生的技术理念始于 Netflix 等厂商从 2009 年起在公有云上的开发和部署实践。2015 年云原生基金会 CNCF 成立,标志着云原生从技术理念转化为开源实现,并给出了目前被广泛接受的定义: 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API

CNCF 致力于通过培养和维持一个开源、供应商中立的项目生态系统来推动云原生技术的广泛采用,进而实现让云原生无处不在的愿景。 CNCF 对云原生的定义让云原生的概念进一步具体化,从而让云原生更容易被各行业理解,为云原生在全行业广泛应用奠定了基础。 云原生关键技术正在被广泛采纳,CNCF 调查报告显示,超过 8 成的用户已经或计划使用微服务架构进行业务开发部署等,这使得用户对云原生技术的认知和使用进入新的阶段,技术生态也在快速的更迭。

相较于早年的云原生技术生态主要集中在容器、微服务、DevOps 等技术领域,现如今的技术生态已扩展至底层技术、编排及管理技术、安全技术、监测分析技术、大数据技术、人工智能技术、数据库技术以及场景化应用等众多分支,初步形成了支撑应用云原生化构建的全生命周期技术链。同时细分领域的技术也趋于多元化发展,CNCF 的云原生开源版图,由开始单一的容器编排项目 Kubernetes,发展到如今 5大类 100 多个项目的,Kubernetes 已经成为云原生的操作系统,在其上发展出面向各行业、不同功能、不同应用场景的开源项目,Spark、Flink、Kafka、Redis 等开源项目也陆续加入 CNCF 的云原生技术图谱,进一步完善了云原生技术生态。

云原生是一种现代化的软件开发和部署方法,旨在充分利用云计算的优势,提高应用程序的可伸缩性、弹性和可靠性。 业界关于云原生的概念,最早出现在 2010 年,由应用集成中间件厂商 WSO2 提出,其关于云原生关键特征的提炼与描述包括: - 分布式动态连接:云化应用与中间件需支持多个共享配置及共享会话状态,且并行运行的节点,另外不能假设云化应用是一种单一语言开发的,因此各云化应用之间要支持动态按需连接(与具体开发语言无关)。 - 弹性:也即云化应用与中间件的分布式子节点应能根据系统的动态负载情况,进行按需的实例伸缩,包括调用云基础服务 API 启停虚机镜像。 - 多租户:

采用云原生可以带来的价值则包括:更高的资源利用率,更快的发放效率,更好的应用治理; 从上面的云原生特征总结来看,与 NIST 对云计算的关键要素定义看起来比较相似,但云计算的定义更多是从云平台的视角出发,而云原生则更多是以云化应用为讨论出发点。

云原生的详细定义包括云原生计算基金会(Cloud Native Computing Foundation,CNCF)的官方定义和延伸含义。 - 官方定义:云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统做出频繁和可预测的重大变更。 - 延伸定义:云原生包括云原生产品、云原生技术、云原生架构,以及构建现代化应用的开发理念,如 DevOps。 具体说明如下: - “云原生产品”和“云原生技术”需要基于云基础设施(IaaS)。云原生产品是指运行在云计算环境中的应用程序和服务,它们通常采用容器化技术,微服务架构和持续交付流程来构建和部署。而云原生技术则是指用于创建和维护这些云原生产品的工具和技术,包括容器编排工具(如Kubernetes),持续集成/持续部署(CI/CD)工具,服务网格等。 - “云原生架构”和“云原生开发理念”是基于云原生技术和产品构建或实现的。注意,对于不是基于云原生 技术或者产品的架构和理念,如基于传统物理服务器发布构建的 DevOps,是不会被划分到云原生范畴的。