源起
回望整个计算机技术发展史,我们会发现 “抽象、解耦、集成” 的主题贯穿其中。产业每一次的抽象、解耦、集成,都将创新推向新的高度,也催生出庞大的市场和新的商业模式。
大型机时代,硬件和软件都是定制化的,使用专有的硬件、操作系统和应用软件。
PC 时代,硬件被抽象解耦成 CPU、内存、硬盘、主板、USB 设备等标准化的部件,不同厂商生产的部件可以*组合,组装成整机。软件被抽象解耦为操作系统、库等可复用组件。硬件和软件的抽象解耦,创造了新的商业模式,释放了生产力,造就了 PC 时代的繁荣。
云的时代,硬件软件化和软件服务化成为最显著的两个趋势。
硬件软件化的核心在于硬件功能中越来越多的部分由软件来呈现,从而在迭代效率、成本等方面获得显著优势。以软件定义存储(Software Defined Storage,SDS)为例,SDS 是位于物理存储和数据请求之间的一个软件层,允许用户操控数据的存储方式和存储位置。通过硬件与软件解耦,SDS 可运行于行业标准系统或者 X86 系统上,意味着用户可以无差别的使用任何标准的商用服务器来满足不断增长的存储需求。硬件与软件解耦也让 SDS 能够横向扩展,消除容量规划,成本管理等方面的复杂性。
云时代的另一趋势是软件服务化。应用软件的功能通过网络以远程调用的模式被海量用户使用。服务成为应用构建的基础,API 被实现为服务提供给开发者,微服务架构获得广泛的成功。服务也成为云产品的基本形态。过去 10 年,云已经证明了它的成功。用户只需要通过调用 API 就能获取服务器,而无需自己建设数据中心。算力以前所未有简洁的方式提供给用户。
还记得 Google 那篇著名的 “Datacenter as a computer “ 论文吗?如果我们把云看作是 DT 时代的计算机,那么一个很自然的问题是:随着云的 API(全托管服务)越来越丰富,什么才是适合于云的编程模型?我们应当以何种 “抽象、解耦、集成” 的方式构建基于云的应用?
在回答上述问题之前,让我们首先将目光转向 SaaS 领域。Salesforce 是 SaaS 领域的明星企业,在平台化能力建设方面的布局为我们提供了一个绝佳的案例。早期的 SaaS 产品采用标准化的交付模式,通过开放 API 接口实现被集成的能力。随着 Salesforce 产品越来越丰富,客户规模日益增长,企业开始面临新的挑战:
- 如何更快地推出新产品,加强产品间的整合和协同?
- 客户迅速增长,需求多样。如何高效地满足客户的定制化需求,增加客户粘性?
- 如何提高产品被集成的能力,更好的衔接上下游资源?
- 当产品能力和 API 完整度到达一定水准后,如何让开发者快速整合 API,围绕 Salesforce 能力便捷地开发应用?
- 如何设计好的商业模式,让客户、企业和开发者共赢?
Salesforce 的策略是让整个业务、技术和组织平台化。平台放大了企业的价值,让企业、客户、开发者三方受益。通过不断提升平台的应用交付能力,对内大幅提高产品的研发效率,加强产品的集成和整合;对外则大幅提高了产品的被集成能力,建立开发者生态。
从 2006 年开始,Salesforce 在平台化能力建设上大力投资,推出了 Apex,Visualforce 等编程语言,允许客户、合作伙伴和开发者在多租户环境下编写和运行自定义的逻辑代码。在此基础上,2008 年推出自研 Force.com PaaS 平台,客户能够在该平台上围绕 Salesforce 的能力构建自己的应用程序。2010 年收购了流行的 PaaS 服务商 Heroku,2019 年推出 Serverless 计算平台 Evergreen,进一步加强应用构建和集成与被集成能力。除了应用的构建能力,Salesforce 近几年来也在应用的移动化、数据化和智能化方面进行了大量的投资,延伸平台在相关领域的能力,帮助客户实现管理流程的数据化和智能化,并通过数据分析和交易撮合为客户带来增量业务。
总结 Salesforce 的发展历程,我们可以得出一些观点:
- API 已成为价值交付最重要的形式。
- 把 API 作为价值交付形式的产品或组织,当 API 丰富度和能力完整度达到一定水准后,会升级为平台,通过平台突破能力瓶颈,实现业务、产品和技术新的进化。
- 平台能力高低体现在其编程模型上,即是否能帮助用户高效、低成本的构建新一代应用。
- 平台除了大幅提升企业价值交付的能力,更重要的是建立起应用开发生态。
虽然云远比上述 SaaS 案例复杂,但遵循着类似的发展逻辑。几乎所有云服务的产品功能都通过 API 体现,云服务商也把发展平台编程模型,提升用户价值交付能力和建立应用开发生态作为最重要的目标。当我们从编程模型的视角去审视云的产品体系,纷繁复杂的云服务各自的定位逐渐清晰。
基础设施即服务(IaaS)和容器技术是云的基础设施,以 K8S 为代表的容器编排服务是云原生应用的操作系统,面向特定领域的后端服务(BaaS)则是云的 API。为了实现更高的生产力,在存储、数据库、中间件、大数据、AI 等领域,大量的 BaaS 服务是全托管、Serverless 的形态,这一趋势已持续多年。例如现在客户已经非常习惯使用 Serverless 化的对象存储,而不是自己基于服务器搭建数据存储系统。当云提供了丰富的 Serverless BaaS 服务后,需要一种新的通用计算服务,能够屏蔽基础设施的复杂度,基于云服务快速构建应用。因此 Serverless 计算应运而生,它包含了以下要素:
- Serverless 计算是全托管的计算服务,客户编写代码构建应用,无需管理和运维服务器等底层基础设施。
- Serverless 计算是通用、普适的,结合云 API(BaaS 服务)的能力,能够支撑云上所有重要类型的应用。
- Serverless 计算不但实现了最纯粹的按需付费(为代码实际运行消耗的资源付费),也应当支持预付费等计量模式,使得客户成本在各种场景下,与传统方式相比都极具竞争力。
- 不同于虚拟机或容器等面向资源的计算平台,Serverless 计算是面向应用的。要能整合和联动云的产品体系及其生态,帮助用户在价值交付方式上实现颠覆式创新。
现状:当下 Serverless 在哪些场景落地?
随着用户心智的建立,产品本身能力的完善,Serverless 近年来呈加速发展的趋势。我们看到在很多场景下,用户使用 Serverless 架构在可靠性、成本和研发运维效率等方面获得显著的收益。
小程序/Web/Mobile/API 后端服务
在小程序、Web/Moible 应用、API 服务等场景中,业务逻辑复杂多变,迭代上线速度要求高,而且这类在线应用,资源利用率通常小于 30%,尤其是小程序等长尾应用,资源利用率更是低于 10%。Serverless 计算的免运维,按需付费的特点非常适合构建小程序/Web/Mobile/API 后端系统,通过预留计算资源+实时自动伸缩,开发者能够快速构建延时稳定、能承载高频访问的在线应用。在阿里内部,使用 Serverless 构建后端服务是落地最多的场景,包括前端全栈领域的 Serverless For Frontends,机器学习算法服务,小程序平台实现等等。
大规模批处理任务处理
典型的离线任务批处理系统,例如大规模音视频文件转码服务,包含计算资源管理、任务优先级调度、任务编排、任务可靠执行、任务数据可视化等一系列功能。如果从机器或者容器层次开始构建,用户通常使用消息队列进行任务信息的持久化和计算资源的分配,使用 K8S 等容器编排系统实现资源的伸缩和容错,自行搭建或集成监控报警系统。如果任务涉及多个步骤,还需要整合工作流服务实现可靠步骤执行,而通过 Serverless 计算平台,用户只需要专注于实现任务处理逻辑,而且 Serverless 计算的极致弹性能很好的满足突发任务对算力的需求。
基于事件驱动架构的在线应用和离线数据处理
典型的 Serverless 计算服务通过事件驱动的方式广泛的与云端各种类型服务集成,用户无需管理服务器等基础设施和编写集成多个服务的胶水代码,轻松构建松耦合、分布式的事件驱动架构的应用。
以阿里云函数计算为例,通过 API 网关和函数计算的集成,用户可以快速实现 API 后端服务。通过对象存储和函数计算的事件集成,函数能实时响应对象创建、删除等事件,实现以对象存储为中心的大规模数据处理。通过消息中间件和函数计算的事件集成,用户能快速实现海量消息的处理。通过和阿里云 EventBridge 的集成,无论是一方云服务,还是三方的 SaaS 服务,或者是用户自建的系统,所有的事件都可以快速便捷的被函数计算处理。
运维自动化
通过定时触发器,用户能够用函数快速实现定时任务,而无须管理执行任务的底层服务器。通过云监控触发器,用户可以接收 ECS 重启/宕机,OSS 对象存储流控等 IaaS 层服务的运维事件,并自动触发函数处理。
未来:Serverless 将向何处去?
近年来,Serverless 一直在高速发展,呈现出越来越大的影响力。主流的云服务商也在不断地丰富云产品体系,提供更好的开发工具,更高效的应用交付流水线,更好的可观测性,更细腻的产品间集成,但一切才刚刚开始。
趋势1:Serverless 将无处不在
任何足够复杂的技术方案将被实现为全托管、Serverless 化的后端服务。不只是云产品,也包括合作伙伴和三方服务。云及其生态的能力将通过 API + Serverless 来体现。事实上,对于任何以 API 作为功能透出方式的平台型产品或组织,例如钉钉、微信、滴滴等等,Serverless 都将是其平台战略中最重要的部分。
趋势2:和容器生态将更加紧密融合
容器在应用的可移植性和交付流程敏捷性上实现了颠覆式创新,是现代应用构建和交付的一次重要变革。
- 绝佳的可移植性。通过操作系统虚拟化技术,应用及其运行环境被虚拟化为容器,实现了 build once,run anywhere。容器化的应用能够无差别的运行在开发机,on-premise,以及公有云的环境中。
- 敏捷的交付流程。容器镜像已经成为应用封装和分发事实上的标准。今天全世界的开发人员都习惯将容器作为应用交付和分发的方式。围绕容器,已经建立了完整的应用交付工具链。
容器已经成为现代应用运行的基础,但用户仍然需要负责服务器等基础设施的管理,包括水位预估、机器运维等等。因此业界出现了 AWS Fargate,阿里云 ECI 等 Serverless container 服务,帮助用户专注于容器化应用的构建,而无需负担基础设施的管理成本。从 Serverless 视角来看,函数计算等 Serverless 计算服务为用户带来了全自动的伸缩模式、极致弹性以及完全按需的计量方式,却在用户开发习惯的兼容性、可移植性、完工具链和生态等方面面临挑战,而这正是容器的优势。相信随着技术的发展,未来容器镜像也将成为函数计算等更多 Serverless 应用的分发方式,容器庞大的工具生态和 Serverless 免运维、极致弹性结合在一起,为用户带来全新的体验。
趋势 3:Serverless 将通过事件驱动的方式连接云及其生态中的一切
我们已经在前述章节中讨论了函数计算通过事件驱动和云服务连接的意义,这样的能力也会扩展到整个云的生态。无论是用户自己的应用,还是合作伙伴的服务;无论是 on-premise 环境,还是公有云,所有的事件都能以 Serverless 的方式处理。云服务及其生态将更紧密的连接在一些,成为用户构建弹性高可用的应用的基石。
趋势 4:Serverless 计算将持续提高计算密度,实现最佳的性能功耗比和性能价格比
虚拟机和容器是两种取向不同的虚拟化技术。前者安全性强,开销小,后者则相反。Serverless 计算平台一方面要求最高的安全性和最小的资源开销,鱼与熊掌必须兼得;另一方面要保持对原有程序执行方式的兼容,比如支持任意二进制文件,这使得适用于特定语言 VM 的方案不可行。因此 AWS Firecracker,Google gVisor 这样新的轻量虚拟化技术应运而生。以 AWS Firecracker 为例,通过对设备模型的裁剪和 kernel 加载流程的优化,实现了百毫秒的启动速度和极小的内存开销。一台裸金属实例支持数以千计的实例运行。结合应用负载感知的资源调度算法,云服务商有望在保持稳定性能的前提下,将超卖率提升一个数量级。
当 Serverless 计算的规模和影响力变得越来越大,从应用框架、语言、硬件等层面,根据 Serverless 的负载特点进行端对端优化就变得非常有意义。新的 Java 虚拟机技术大幅提高 Java 应用的启动速度,非易失性内存帮助实例更快被唤醒,CPU 硬件和操作系统协作对高密环境下性能扰动实现精细隔离,所有新技术正在创造崭新的计算环境。
实现最佳性能功耗比和性能价格比的另一个重要方向是支持异构硬件。长期以来,X86 处理器的性能越来越难以提升。而在 AI 等对算力要求极高的场景,GPU、FPGA、TPU(Tensor Processing Units) 等架构的处理器的计算效率更具优势。随着异构硬件虚拟化、资源池化、异构资源调度、应用框架支持的成熟,异构硬件的算力也能通过 Serverless 的方式释放,大幅降低用户使用门槛。
后记
2009 年,UC Berkeley 发表了一篇著名的论文 ”Above the Clouds: A Berkeley View of Cloud Computing”,讨论了云及其价值、挑战和演进路径,其中的真知灼见在云的十年发展历程中陆续被验证,今天已没有人怀疑云的价值和对各行各业深刻的影响。2019 年,他们发表了新的论文,“Cloud Programming Simplified: A Berkeley View on Serverless Computing”,预言 Serverless 将主导下一个十年云的发展,产业的发展是螺旋式上升,Serverless 的诞生和兴起逻辑早已蕴含其中。相信下一个十年, Serverless 将重塑企业创新的方式,帮助云成为社会发展的强大动力。