作者按:让我们一起开启《数字化》之旅,希望大家对数字化有新的思考和启发,欢迎留言评论。
云原生是一种构建和运行应用程序的方法,是一套技术体系和方法论。云原生(CloudNative)是一个组合词,Cloud+Native。
Pivotal最初的定义
Pivotal 是云原生应用的提出者,并推出了Pivotal Cloud Foundry 云原生应用平台和 Spring 开源 Java 开发框架,成为云原生应用架构中先驱者和探路者。早在2015年Pivotal公司的Matt Stine写了一本叫做迁移到云原生应用架构的小册子,其中探讨了云原生应用架构的几个主要特征:
符合12因素应用
面向微服务架构
自服务敏捷架构
基于API的协作
抗脆弱性
CNCF最初的定义
到了2015年Google主导成立了云原生计算基金会(CNCF),起初CNCF对云原生(Cloud Native)的定义包含以下三个方面:
应用容器化
面向微服务架构
应用支持容器的编排调度
云原生的重新定义
到了2018年,随着近几年来云原生生态的不断壮大,所有主流云计算供应商都加入了该基金会,且从Cloud Native Landscape中可以看出云原生有意蚕食原先非云原生应用的部分。CNCF基金会中的会员以及容纳的项目越来越多,该定义已经限制了云原生生态的发展,CNCF为云原生进行了重新定位。以下是CNCF对云原生的重新定义(中英对照):
Cloud native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.
(云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式API。)
These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.
(这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。)
The Cloud Native Computing Foundation seeks to drive adoption of this paradigm by fostering and sustaining an ecosystem of open source, vendor-neutral projects. We democratize state-of-the-art patterns to make these innovations accessible for everyone.
(云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。)
下图为其公布的Cloud Native Landscape,给出了云原生生态的参考体系。
云原生 = 微服务 + DevOps + 持续交付 + 容器化
微服务技术使得应用原子化,所有的应用都可以独立的部署、迭代。
DevOps使得应用可以快速编译、自动化测试、部署、发布、回滚,让开发和运维一体化。
持续交付让应用可以频繁发布、快速交付、快速反馈、降低发布风险。
容器使得应用整体开发以容器为基础,形成代码组件复用、资源隔离。
相比于传统应用,云原生应用意味着统一:
统一的技术标准:通常以微服务架构进行服务开发,服务之间使用标准的API契约进行通信。松耦合的架构方式会减轻因需求变更导致的系统迭代成本,并加快交付速度。
微服务倡导基于API接口通信,避免在服务间共享数据库,文件等有状态的实体。单个服务能独立的更新,扩展,重启而不影响其他服务。
微服务使得单个服务的开发团队更小,也更加独立。亚马逊内部采取2个披萨原则——即团队规模维持在刚好两个披萨能够吃饱,来限定团队规模。团队沟通成本可以维持在较低水平, 同时每个人都承担富有挑战性的工作。
松耦合+独立小型的团队使得持续更新和敏捷管理协作成为可能,因此微服务成为了云原生应 用的最佳开发实践之一。
统一的交付方式:标准容器化的打包方式实现了真正的应用可移植性,不依赖于特定的基础架构(虚拟机,混合云等)。
容器技术起源于linux的进程隔离虚拟化技术,将一组进程单独限定在同一个资源目录下,并可以限定其资源使用的配额。
Docker的出现将应用的整个运行时环境都打包成一个镜像文件,并基于容器本身的隔离特性,实现了应用在特定容器中可以轻松的在不同环境间移植,同时确保宿主机的安全。
在资源有限的场景,容器基于进程粒度的资源使用方式,也会降低系统的资源开销。
基于容器的应用将有助于构建统一的开发,交付和集成环境,是云原生应用的最佳交付载体。
统一的运维部署:基于容器的编排平台,可以充分利用不可变基础设施的特性。这使得在传统运维模式中的复杂部署策略(如灰度,蓝绿)变得轻而易举。
容器编排平台提供的自动化运维特性和声明式资源管理方式简化了持续构建中工具链之间的协作和调度。
容器编排带来的弹性伸缩能力和容错调度能力也让智能化运维成为可能。
技术驱动下的敏捷协作,和编排平台带来的运维能力共同构建了云原生应用的最佳运维实践——DevOps
总之,云原生顾名思义,就是在云上土生土长的应用。云原生指的是一个灵活的工程团队,遵循敏捷的研发原则,使用高度自动化的研发工具,开发专门基于并部署在云基础设施上的应用,以满足快速变化的客户需求。这些应用采用自动化的,可扩展的,和高可用的架构。这个工程团队通过高效的云计算现网的运维来提供这一应用服务,并且根据线上反馈对服务进行不断地改进。