作者 | 易立 阿里云资深技术专家
导读:云原生是云计算领域的热点之一。就像 “一千个人眼里有一千个哈姆雷特”,大家对"云原生"的定义也见仁见智。本文将介绍云原生应用架构和生命周期管理的进化方向。
CNCF- 云原生计算基金会对于“云原生”的定义如下 :
“云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。云原生的代表技术包括容器、服务网格、微服务、不可变基础设施和声明式 API。
这些技术能够构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使工程师能够轻松地对系统作出频繁和可预测的重大变更。
云原生计算基金会(CNCF)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。”
在我们的理解中,云原生计算包含三个维度的内容:
可编程的、动态的、弹性基础设施:支持公共云、专有云、边缘计算等不同环境。
分布式应用架构:具备松耦合、可弹性扩展、高容错性等特点。
创新的应用开发、交付方式:基于自动化、可观测、可管理的软件交付流程,加速创新效率的同时保障系统稳定性。
接下来将以系列文章的形式,和大家分享阿里云容器服务团队在云原生计算领域的探索和思考。本文主要聚焦在云原生基础设施。
本系列文章:
Gartner 将云原生基础设施划分成四大类:
我们可以看到这几类基础设施,计算单元的粒度越来越细,也越来越多体现的云原生的特质:
模块化程度越来越高 - 自包含的应用打包方式,应用与底层物理基础设施解耦。
自动化运维程度越来越高 - 自动化的资源调度和弹性伸缩能力,用户将关注点逐渐聚焦到应用自身。
弹性效率越来越高 - VM 可以实现分钟级扩容;容器可以实现秒级扩容;函数可以做到毫秒级扩容。
故障恢复能力越来越高 - 随着系统自愈性的增强,大大简化了应用架构容错的复杂性。
为了更好地理解云原生计算出现的时代背景,我们必须要理解云计算的经济学基础与核心竞争力所在。
经济学家亚当·斯密提出:分工是社会发展的必然,而且分工将极大的提高生产效率。
从经济学的角度来讲,云计算是 IT 产业发展的必然阶段。互联网和移动互联网时代的到来,加速了企业的数字化转型。云计算可以提供时刻在线的服务能力,并满足日益增长不断变化的计算需求。此外,云计算将 IT 服务的固定成本投入转化成为了可变成本,极大降低了创新成本。在咖啡馆中,随处可见创业的青年人围坐在一起构画未来,是互联网和云计算让梦想变得触手可及。
云计算的经济学基础来自规模经济。直观上,批量采购,带来更低的供应链成本;大型数据中心,降低运营成本。更重要的是,由于不同用户不同时间的工作负载不同,可以利用规模优势进行削峰填谷。结合自动化、智能化的供应链和运营体系,进一步提升了硬件资产运营效率。云计算正如电力这样的公共服务基础设施,集中发电比每家每户自建发电机,有更低的成本和更高的效率。
此外,云计算是典型的平台型业务模式。随着规模的增长,会产生网络效应。提供为企业提供产品 / 服务的 ISV 与 SI,会更加青睐于那些拥有更多用户的云平台。而用户会更加倾向于能够提供丰富技术产品和服务支撑生态的云平台。随着云平台的成长,将对用户和生态产生更强的吸引力。
云计算的核心技术创新加速规模效应的形成。比如,计算资源池化与虚拟化技术,让应用和底层硬件资源解耦。一方面提升资源利用率,降低计算成本;一方面提升了资源的弹性供给,弹性成为差异化云基础设施和传统 IDC 的关键能力。
此外,在传统 IT 中,软件、硬件和服务由不同厂商分离交付。而云计算将软件、硬件、服务一体化交付,极大降低了计算成本,提升了交付效率,提供了创新的技术能力。这里面有几个关键点:
软硬一体设计,可以针对规模和性能进行全栈优化,极大降低计算成本。而且由于云计算的规模效应,随着产量的增加,边际成本会拉低平均制造成本。全球主流云厂商都在 IDC 设计、网络、芯片等方向加大自研投入。
以 API 方式交付 IT 能力,一方面可编程的基础设施极大提升了 IT 的敏捷性,更好地支持业务敏捷性;一方面 API 可以更加方便地被集成到三方服务商的解决方案中,进一步加速规模效应产生。
随着 IT 能力的规模化,一些数据化、智能化的创新技术和业务模式逐渐形成。比如 ECS 宕机预测和自动热迁移,可以将虚拟机的 SLA 提升到传统需要硬件冗余才能达到的稳定性标准;RDS 对数据库的自动优化和问题诊断,无需 DBA 的人力过多介入。
2013 年春,Docker 技术开源宣告了云原生计算的序幕。Docker 公司创新地提出了应用打包规范 Docker 镜像,它将应用及其所有依赖项打包,从而使应用可以在不同的计算环境之间快速、可靠地运行。容器技术提供了一个优雅的抽象,让开发所需要的灵活性、开放性和运维所关注的标准化、自动化达成平衡。容器镜像迅速成为了应用分发的工业标准。随后 Google 开源的 Kubernetes 因为其优秀的开放性、可扩展性和活跃的社区,在容器编排之战中脱颖而出,成为分布式资源调度和自动化运维的事实标准。Kubernetes 屏蔽了底层基础架构的差异,提供了良好的可移植性,可以帮助应用一致地运行在不同的环境,包括数据中心、云、边缘计算等。
在技术上,容器技术彻底解耦了应用和运行时环境,可以帮助应用更加快速平滑地迁云;容器轻量化、自包含的特性极大简化了应用弹性,释放云的核心价值。此外,容器技术的标准化促进生态的分工和协同。基于 Kubernetes,社区开始构建上层的业务抽象。比如,服务网格 Istio、机器学习平台 Kubeflow 以及无服务器应用框架 Knative 等等。通过这样的架构分层,进一步降低了技术门槛,加速了云价值释放。对于企业客户而言,他们可以通过 Kubernetes 这样的开放标准来设计企业的云架构、避免厂商锁定的顾虑,更好地支持多云 / 混合云。容器技术和生态的发展会加速云计算规模经济形成。所有的云厂商都在加大对容器技术领域的投入。
作为云原生技术的演进,无服务器计算(Serverless)进一步释放了云计算的能力,将弹性伸缩、高可用、安全等需求由基础设施实现。无服务器计算抽象了运行时环境,让开发人员可以将更多的精力放在应用程序的设计和优化上,而不是与基础架构相关的配置和管理上;Serverless 应用可以迅速弹性伸缩,用户无需进行容量规划;采用按需付费的模型,用户只按应用实际消耗的资源付费。在无服务器计算中,应用逻辑被解耦为多个函数,每个函数可以通过事件驱动的方式触发执行。执行粒度进一步细化,可以进一步提升弹性的效率,此外还把应用部署从本地代码(如 x86 指令集)提升到了高级语言层面,这给成本优化带来了更多的空间(比如可以在 ARM 等低成本的计算资源上来运行 Python/NodeJS 脚本)。这推动了进一步的社会分工,云厂商可以通过规模化、集约化和技术创新实现计算成本的持续优化。
伯克利的论文《A Berkeley View on Serverless Computing》提出断言:Serverless 计算将会成为云时代默认的计算范式。但是这条路还很漫长,现有无服务器计算 FaaS 也存在自身的局限性:
FaaS 应用架构和研发、交付流程和传统应用相比有很大的改变。
可移植性和厂商锁定的顾虑,FaaS 依然缺乏标准,而且通常需要依赖大量的后端服务 (BaaS, Backend as a Service),这导致了为 AWS 开发的 Serverless 应用较难移植到阿里云的平台,或者在自己的数据中心中运行。
FaaS 也引入了一些新的技术挑战,比如冷启动会导致应用响应延迟,按需建立数据库连接成本高等等,需要平台能力的持续增强。
企业上云之路,要根据自己的业务需求,技术能力和组织结构来选择合适的路径。
我们可以将迁移之路分为 3 类:
Rehost 新托管 - 简单地通过 lift-and-shfit 方式,将线下物理机替换成为云上虚拟机或者裸金属实例,不改变原有的运维方式。
Re-platform 新平台 - 利用托管的云服务替换线下自建应用基础设施,比如通过 RDS 数据库服务替换自建 MySQL;通过容器服务,比如阿里云 ACK 来取代自建 K8s 集群。托管的云服务通常提供更好的弹性、稳定性和自治运维能力,可以让用户关注于应用而非基础设施管理。
Refactor/Re-architect 重构 / 新架构 - 包括单体应用的微服务架构改造,应用的容器化和 Serverless 化整体开发和交付架构改造。
从 Rehost、Re-platform 到 Re-architect,我们可以看到迁移的成本和复杂性在增加,但是敏捷性、弹性、可用性、容错性等收益也在持续增加。云原生已经成为势不可挡的技术趋势。在 CNCF 2020 年发布的《云原生开发状态报告》中,我们可以看到全球有 470 万云原生开发者,占全部后端开发者的 36%,其中包括 290 万使用容器技术以及 330 万使用 Serverless 架构的开发人员。
站在容器角度,我们看到未来云原生基础设施的一些技术趋势。
在 1988 年,当时施乐 PARC 的首席科学家 Mark Weiser 提出了“Ubiquitous Computing”的概念,“在未来,计算将无处不在”。随着互联网的发展和进化,5G、AIoT 等新技术的涌现,随处可见的计算需求已经成为现实,无处不在的计算正在改变我们的世界。
针对不同计算场景,容器运行时有不同的需求。比如在传统数据中心,基于操作系统虚拟化的 RunC/Docker 容器可以很好地满足大部分业务需求;如何提升更好的安全隔离能力?KataContainer,Firecracker, gVisor, Unikernel 等新技术层出不穷。但是没有任何一款容器技术可以在安全隔离性、执行效率和通用性上都做到完美。我们在相当长的一个历史阶段,依然可以看到多种技术路线并存和多彩纷呈的竞争。OCI(Open Container Initiative)标准的出现,可以对不同的技术采用一致的方式进行容器生命周期管理,进一步促进了容器引擎技术的持续创新。
其中有几个主要的趋势:
基于 MicroVM 的安全容器的占比将逐渐增加,可以提供更高的安全隔离能力。虚拟化和容器技术的融合,已经成为了一个重要趋势。在公共云上,比如 AWS 的 Firecracker 已经成为 Lambda/Fargate 等 Serverless 云服务的基础设施;阿里云的袋鼠容器引擎,已经成为 ECI/ASK 的基础。
基于软硬一体设计的机密计算容器开始展露头角。比如,阿里云安全、系统软件、容器服务团队和蚂蚁可信原生团队共同推出了面向机密计算场景的开源容器运行时技术栈 inclavare-containers 支持基于 Intel SGX 机密计算技术的机密容器实现,如蚂蚁的 Occlum,开源社区的 Graphene 等 Libary OS。降低机密计算的技术门槛,简化可信应用的开发、交付和管理。
OS 的虚拟化创新也从未停步,从 Linux 4.5 内核开始 cgroup v2 接口在逐渐成熟,将进一步完善了资源隔离性。Docker 也发布了 rootless 模式,可以更好利用 Linux 操作系统的安全能力来提升容器的安全性。
WebAssembly 是新一代可移植、轻量化、应用虚拟机,在 IoT,边缘计算,区块链等场景会有广泛的应用前景。在服务器端,WebAssembly 是容器的颠覆者还是同盟者?大家会有不同的观点。个人比较倾向于后者,WASM/WASI 可以成为一个跨平台的容器实现技术。近期 Solo.io 推出的 WebAssembly Hub 就是将 WASM 应用通过 OCI 镜像标准进行统一的管理和分发,可以很好地应用在 Istio 服务网格生态中。
Kubernetes 已经成为云时代的操作系统。我们可以对比一下经典的 Linux 和 Kubernetes 的概念模型,他们都是定义了开放的、标准化的访问接口;向下封装资源,向上支撑应用。
它们都提供了对底层计算、存储、网络、异构计算设备的资源抽象和安全访问模型。可以根据应用需求进行资源调度和编排。Linux 的计算调度单元是进程,调度范围限制在一台计算节点。而 Kubernetes 的调度单位是 Pod,可以在分布式集群中进行资源调度,甚至跨越不同的云环境。
在初期,Kubernetes 上主要运行着无状态的 Web 应用。随着技术的成熟和社区的发展,我们看到更多的有状态应用和大数据 /AI 应用负载逐渐迁移到 K8s 上。目前企业的大数据业务还是被 YARN 等调度技术主导,但是 K8s 已经在大数据社区得到更多的关注。Flink、Spark 等开源社区和一系列商业公司如 Cloudera、Databricks、星环都开始加大对 K8s 的支持力度。
统一技术栈提升资源利用率:多种计算负载在 K8s 集群统一调度,可以有效提升资源利用率。Gartner 预测“未来 3 年,70% AI 任务运行在容器和 Serverless 上。” AI 模型训练和大数据计算类工作负载需要 K8s 提供更低的调度延迟、更大的并发调度吞吐和更高的异构资源利用率。针对这些挑战,华为推出了 Volcano 项目,提供了一个针对数据计算类任务的独立调度器。阿里云在和 K8s 上游社区共同合作,在 Scheduler V2 framework 上,通过扩展机制增强 K8s 调度器的规模、效率和能力,具备更好的兼容性,可以更好地支撑多种工作负载的统一调度。
统一技能栈降低人力成本:K8s 可以在 IDC、云端、边缘等不同场景进行统一部署和交付。云原生提倡的 DevOps 文化和工具集可以有效提升技术迭代速度,整体上降低人力成本。
加速数据服务的云原生化:由于计算存储分离具备巨大的灵活性和成本优势,数据服务的云原生化也逐渐成为趋势。容器和 Serverless 的弹性可以简化对计算任务的容量规划。结合分布式缓存加速(比如 Alluxio 或阿里云 Jindofs)和调度优化,也可以大大提升数据计算类和 AI 任务的计算效率。
阿里云计算平台和容器服务团队已经在多个领域共同探索云原生大数据 /AI 场景的产品技术创新。
除了 FaaS 的快速发展,Serverless 和容器技术也开始融合,尤其是得到了云厂商的高度关注。通过 Serverless 容器,一方面可以根本性解决 K8s 自身的复杂性,让用户无需受困于 K8s 集群容量规划、安全维护、故障诊断等运维工作;另一方面进一步释放了云计算的能力,将安全、可用性、可伸缩性等需求下沉到基础设施实现,可以帮助云厂商形成差异化竞争力。
阿里云在 2018 年 5 月推出 ECI(Elastic Container Instance 弹性容器实例)、ASK (Alibaba Cloud Serverless Kubernetes) 等产品,并在 2019 年 2 月正式商业化。目前业界所有公有云厂商都推出了 Serverless 容器产品,除阿里云 ASK/ECI 外,还包括 AWS Fargate, Azure ACI,华为 CCI,腾讯 EKS, GCP CloudRun 等。
在 AWS 的调研中,在 2019 年 40% 的 ECS(AWS 弹性容器服务)新客户采用 ECS on Fargate 的 Serverless Container 形态。
Serverless 容器可以和 FaaS 形成良好的互补。Serverless 容器支持容器镜像作为应用载体,支持各种类型应用,比如无状态应用、有状态应用、计算任务类应用等。大量用户现有的应用无需修改即可部署在 Serverless Container 环境中。
在 Gartner 在 2020 年 Public Cloud Container Service Market 评估报告中把 Serverless 容器作为云厂商容器服务平台的主要差异化之一,其中将产品能力划分为 Serverless 容器实例和 Serverless Kubernetes 两类,这与阿里云 ECI/ASK 的产品定位高度一致。
Gartner 在报告中也谈到 Serverless 容器业界标准未定,云厂商有很多空间通过技术创新提供独特的增值能力,其对云厂商的建议是:
扩展 Serverless 容器应用场景和产品组合,迁移更多普通容器 workload 到 Serverless 容器服务。
推进 Serverless 容器的标准化,减轻用户对云厂商锁定的担忧。
上云已是大势所趋。但是对于企业客户而言,有些业务由于数据主权和安全隐私的考虑,会采用混合云架构。一些企业为了满足安全合规、成本优化、提升地域覆盖性和避免厂商锁等需求,会选择多个云供应商。混合云 / 多云架构已经成为企业上云的新常态。Gartner 指出,“到 2021,超过 75% 的大中型组织将采用多云或者混合 IT 战略。”
此外,随着 5G 时代的临近,AIoT 应用快速发展,一个万物智联的时代开始到来。边缘计算可以更好地链接物理世界和数字世界,为应用提供更低的网络延迟、更高的网络带宽和更低的网络成本。边缘计算将成为企业云战略的重要组成部分,我们需要有能力将智能决策、实时处理能力从云延展到边缘和 IoT 设备端。
在 Gartner 发布的《2020 年基础架构和运营的十大趋势》中提出了分布式云的趋势。随着云平台已经成为企业数字化转型的创新平台,一个变化随之产生——云正在靠近它们。在分布式云中,公有云的服务能力可以位于不同的物理位置,而公共云平台提供者会负责服务的运营、治理、更新和演变。
然而不同环境的基础设施能力、安全架构的差异会造成企业 IT 架构和运维体系的割裂,加大云战略实施的复杂性,增加运维成本。在云原生时代,以 Kubernetes 为代表的云原生技术屏蔽了基础设施的差异性,推动了以应用为中心的混合云 / 分布式云架构的到来。可以更好地支持不同环境下应用统一生命周期管理和统一资源调度。Kubernetes 已经成为企业多云管理的事实基础。
2019 年 Google 推出 Anthos 多云应用平台,其基础就是 GKE K8s 托管服务。微软在 Build 2020 会议上宣布了 Azure Arc 支持 Kubernetes 集群的预览版。微软 CEO 萨蒂亚·纳德拉将 Azure Arc 描述为混合云计算的控制平面,可以统一管理云上、边缘和 IDC 中运行的 Kubernetes 集群,以及 Windows 和 Linux 服务器实例。
阿里云容器服务 ACK 去年 9 月份发布了混合云 2.0 架构,提供了完备的混合云 K8s 管理能力。
首先 ACK 提供了统一集群管理能力,除了可以管理阿里云 K8s 集群之外,还可以纳管用户在 IDC 的自有 K8s 集群和其他云的 K8s 集群。利用统一的控制平面实现多个集群的统一的安全治理、可观测性、应用管理、备份恢复等能力,比如利用日志服务、托管 Prometheus 服务,可以无侵入地帮助用户对线上、线下集群有一个统一的可观测性大盘。利用云安全中心,AHAS 可以帮助客户在混合云的整体架构中发现并解决安全和稳定性风险。
此外,托管服务网格 ASM 提供统一的服务治理能力,结合阿里云云企业网 CEN、智能接入网关 SAG 提供的多地域、混合云网络能力,可以实现服务就近访问,故障转移,灰度发布等功能。
ACK 也提供了统一的应用交付能力,通过 GitOps 方式可以将应用安全、一致、稳定地发布在多个不同的云环境中。配合网格 ASM 提供的流量管理能力,可以支持云容灾、异地多活等应用场景,提升业务连续性。
2019 年 6 月,阿里云 ACK@Edge 边缘容器发布。边缘 K8s 容器集群中可以同时管理云端 ECS 和边缘 ENS 节点、以及 IoT 设备。我们在 K8s 基础之上,针对边缘计算场景的特殊性,提供了单元化隔离和断连自治、自愈和安全等增强能力。借助 ACK@Edge,我们可以将一些需要低延迟处理的应用部署在边缘节点实现就近访问,比如,我们可以把 AI 模型预测和实时数据处理放置到边缘,进行实时智能决策;而将模型训练,大数据处理等需要海量算力应用放到云端。可以极大简化云边端一体应用协同。
在 2020 年 5 月底,我们将 ACK@Edge 的核心组件开源 — OpenYurt,该项目的核心理念是『Extending your native Kubernetes to edge.』,在架构上保持了对原生 K8s 无侵入的设计,通过一系列组件和工具,提供了对边缘计算场景良好的支持能力。推出该开源项目,一方面可以把我们在云原生边缘计算领域的积累回馈社区,另一方面我们希望加速云计算向边缘延伸的进程,并和社区共同探讨未来云原生边缘计算架构的统一标准。
云原生计算加速了应用和基础资源的解耦,充分释放云的弹性;通过关注点分离,让开发者关注业务价值,而复杂性下沉到基础设施。对企业而言,云原生计算可以帮助企业优化云架构,最大化发挥云价值。在后续的文章中,我们将继续介绍云原生应用架构和生命周期管理的进化方向。
阿里云容器平台团队求贤若渴!社招技术专家/高级技术专家,base 杭州/北京/深圳。欢迎发简历到:[email protected]。
“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”