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 也引入了一些新的技术挑战,比如冷启动会导致应用响应延迟,按需建立数据库连接成本高等等,需要平台能力的持续增强。