目录
文章目录
云原生的起源
容器技术,即:操作系统虚拟化技术,最早出现于 1979 年,名为 Chroot Jail,沿用至今。
2004 年,谷歌开始使用容器技术,到 2006 年,谷歌发布了 Process Container(进程容器)技术。Process Container 的目的是希望能够像虚拟化技术一样,给进程提供操作系统级别的资源限制、优先级控制、资源审计能力和进程控制能力。
2007 年,Process Container 技术进入 Linux Kernel。因为在 Linux Kernel 中,Container(容器)这一名词具有许多不同的意义,所以为了避免混乱,Process Container 就更名为了 Control Groups,简称:Cgroups。
2008 Linux 发布 Linux Container,即 LXC,将 Cgroups 的资源管理能力和 Namespace 的视图隔离能力组合在一起,实现进程级别的隔离。
2013 年,dotCloud 公司基于 LXC(包括:cgroup、namespace、chroot)技术进行封装正式发布了 Docker Container。
2014 年,Kubernetes 容器编排平台也正式发布。Kubernetes 项目的初衷,就是为了提供一种方便、快速、优雅地 Containers 管理平台。
2015 年,由 Google、Redhat 以及 Microsoft 等大型云计算厂商牵头成立了 CNCF(Cloud Native Computing Foundation,云原生计算基金会),隶属于 Linux 基金会旗下,致力于培育和维护一个厂商中立的开源生态社区,并以此来推广云原生技术。而 Kubernetes 则是 CNCF 托管的第一个开源项目(注:实际上也是为了对抗当时大红大紫的 Docker 公司在容器圈一家独大的局面)。
CNCF 中托管的一系列项目,都致力于云原生应用整个生命周期的管理,从部署平台、日志收集、Service Mesh(服务网格)、服务发现、分布式追踪、监控以及安全等各个领域通过开源软件为我们提供一整套解决方案。
截止 2020 年 2 月,CNCF 已有 433 个会员,其中不乏国内各个行业的的龙头企业。
如何定义云原生
2013 年,Pivotal 公司(捷开发领域的领导者)的 Matt Stine 首次提出云原生(CloudNative)的概念。
2015 年,Matt Stine 在《迁移到云原生架构》一书中定义了符合云原生架构的几个特征:12 因素、微服务、自敏捷架构、基于 API 协作、扛脆弱性。
2017 年,Matt Stine 将云原生架构归纳为:模块化、可观察、可部署、可测试、可替换、可处理 等 6 大特质。Matt Stine 认为云原生它是一个思想的集合,包括 DevOps、持续交付(Continuous Delivery)、微服务(MicroServices)、敏捷基础设施(Agile Infrastructure)、康威定律(Conways Law)等。
而 Pivotal 官方则对云原生概括为 4 个要点:
- 容器
- 微服务
- 持续交付
- DevOps
而 CNCF 则将云原生定义为:
- 云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。
- 这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
- 云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。
不同的公司、不同的人对云原生都有着不同的定义,同一家公司在不同的时间阶段定义也不一样。根据摩尔定律推断,未来对于云原生的定义还会不断变化。但可以肯定的是 —— Pivotal 是 Cloud Native 概念和方法论的先行者, CNCF 是 Cloud Native 的最佳实践者。
- Pivotal 定位于 PaaS 层端到端的解决方案及数字化转型,从文化、流程、方法论、蓝图规划、软件开发方式等,都有一套模式,主要用户是传统大中型企业 CIO,整体策略是自顶向下。
- CNCF 立足于整个云计算生态和技术创新、变革者,偏重于技术、工具链和底层基础设施,主要用户是开源社区的开发者、互联网及新兴企业,影响力可想而知,整体策略是自底向上。
简而言之,云原生根据一套方法论(Pivotal)和技术体系(CNCF),在云上构建一套可运行的应用系统。该应用系统会打破传统的构建方式,充分利用“云”的原生能力,发挥出 “云” 的最大价值,使其具备原生特征,快速为业务赋能。
笔者则认为,理解云原生(CloudNative)只需要拆开来看:
- Cloud:表示应用程序位于云中,而不是传统的数据中心;
- Native:表示应用程序原生为云而设计,充分利用和发挥云平台的弹性以及分布式优势。
可见,实际上,云原生是一条最佳路径或者最佳实践。更详细的说,云原生为用户指定了一条低心智负担的、敏捷的、能够以可扩展、可复制的方式最大化地利用云的能力、发挥云的价值的最佳路径。
因此,云原生其实是一套指导进行软件架构设计的思想。按照这样的思想而设计出来的软件:首先,天然就 “生在云上,长在云上”;其次,能够最大化地发挥云的能力,使得我们开发的软件和 “云” 能够天然地集成在一起,发挥出 “云” 的最大价值。
所以,云原生的最大价值和愿景,就是认为未来的软件,会从诞生起就生长在云上,并且遵循一种新的软件开发、发布和运维模式,从而使得软件能够最大化地发挥云的能力。
说到了这里,大家可以思考一下为什么容器技术具有革命性?
其实,容器技术和集装箱技术的革命性非常类似,即:容器技术使得应用具有了一种 “自包含” 的定义方式。所以,这样的应用才能以敏捷的、以可扩展可复制的方式发布在云上,发挥出云的能力。这也就是容器技术对云发挥出的革命性影响所在,所以说,容器技术正是云原生技术的核心底盘。
云原生与云计算
谈云原生就离不开云计算。
- 云计算传统的三层架构,即:基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS),它们重塑了 IT 基础设施的形态,节约 IT 成本、提升业务敏捷性。后来再扩展至 “无服务器计算架构”(Serverless,指用户无须购买或关注基础设施,即可运行应用程序,按需付费,弹性扩容,也是 PaaS 演进的一种 “极端” 形态);
- 而基于云计算的云原生,则重塑了应用程序,摈弃传统的软件架构,在架构设计、开发方式、部署维护等各个阶段和方面都基于云的特点重新设计,从而建设全新的云化的应用,即云原生应用。
简而言之,云计算是面向 IT 资产的,而云原生则是面向业务形态的。