2020年12月1日,正值全球因COVID-19疫情而动荡不安的年末,AWS为云社区带来了一个重要的更新:对AWS Lambda函数的容器支持。这项能力允许将Lambda函数打包为容器映像,从而使用户能够利用容器的优势来运行这些函数。

无服务器计算功能让企业能够迅速启动并运行业务代码。新的计算服务简化了基础设施的设置和配置,同时提供了可扩展性和操作便利性,减少了在生产环境中运行的复杂性。
然而,无服务器产品目前仍然存在一些限制。例如,当用户尝试使用不支持的编程语言时,或者在导入库时会遇到问题。AWS Lambda层通过允许用户将所需的库和外部代码作为“层”添加到Lambda函数中来解决这一问题。同时,Azure也提供了“绑定扩展”,允许社区基于开放源代码模型构建新的绑定类型,以便将其引入Azure函数。
尽管如此,这些方法在实际应用中仍存在一定的局限。因此,AWS Lambda函数的新容器映像支持旨在为云社区提供解决方案,以应对现有问题。
结合无服务器和容器产品的功能并不是什么新鲜事。虽然无服务器计算的优势使得这一计算模型极具吸引力,但同时也带来了灵活性和可用性方面的限制。正如古老的谚语所说,有些东西是可以得而不必失去的。
为了克服这一问题,各大云服务供应商正在努力提供多样化的云计算服务,并通过增强灵活性来提升用户体验。各项服务各具折衷,目的是提供丰富的产品组合,以满足多样化客户群的需求。
例如,AWS提供了EC2容器、AWS Lambda函数和AWS Fargate。Azure和Google Cloud也提供类似服务,如Azure容器注册表、Azure容器实例和Google Cloud Run等。此外,还有相关功能如AWS Lambda层、Azure绑定扩展及其他增量改进。
显然,云供应商在计算范式和相关服务上具有较高的多样性。除了我们在无服务器产品中看到的改进外,无服务器容器的兴起,即容器即服务(CaaS),也值得关注。本文旨在探讨CaaS的概念,并分析AWS、Azure和Google Cloud在这一领域提供的现有服务。
探讨CaaS范式
云计算的一个主要优点是显著降低了服务器硬件管理的复杂性。随着云产品的普及,企业可以将硬件管理责任转交给云供应商。然而,这也引入了需要学习如何配置虚拟服务器的新操作负担。从基础设施即服务(IaaS)到容器即服务(CaaS),再到功能即服务(FaaS),这些不同的范式各自提供不同的抽象级别,其中FaaS因其高抽象性而最易使用。
自然,云开发人员急于采用FaaS服务,这一模式已成为无服务器计算的主流。然而,随着抽象层级的增加,灵活性往往会受到牺牲,操作限制随之而来。
例如,使用被视为IaaS范式的Amazon EC2实例时,用户需要指定各种规则和网络安全监控等设置。尽管容器编排带来了便利,但自动缩放的定义在容器级别却相对复杂。不过,这种额外的操作负担使得用户几乎可以按照任何希望的方式配置环境,选择适合其业务需求的运行时和自动缩放规则。
然而,增加的灵活性也意味着失去无服务器的三大核心特征,这也是该计算模型的主要优势。它们包括:
&Middot; 服务器管理由供应商抽象化
&Middot; 随用随付的支付模式
&Middot; 自动扩展和高可用性
因此,CaaS旨在通过在容器和无服务器服务之间提供最佳体验来解决这些问题。接下来,我们将探讨三家主要云供应商提供的CaaS产品。
云端容器的选择
AWS Fargate
AWS Fargate是AWS的CaaS解决方案,区别于传统的IaaS和FaaS服务(如Amazon EC2和AWS Lambda)。与Amazon EC2不同,Fargate已经建立了容器基础架构,包括网络、安全性和自动扩展。用户只需为每个容器实例指定资源,Fargate便会在后台处理其他事务。
每个Fargate实例都配有专用的ENI,允许任务间群集之间进行通信,而同一任务的群集通过localhost进行通讯。此外,任务管理由ECS负责,Fargate被定义为ECS的计算引擎,提供了一种不同的任务管理方式,正是Fargate与容器服务之间的联系特征。
值得一提的是,Fargate与无服务器计算的结合,使得其能够实现所需的自动扩展,支持按需付费模型。
Azure容器实例
Azure于2017年中首次推出Azure容器实例(ACI),成为首家提供CaaS服务的云供应商,旨在简化开发人员设置容器实例的过程,从而在其CaaS产品中引起其他供应商的共鸣。
ACI在安全性、网络和存储方面提供预配置的隔离容器,所有ACI都增强了安全能力,因为其各自的容器模型在虚拟机监控程序级别提供保护,适合多租户用例。此外,ACI的计费模型遵循无服务器计算的模式,用户只需按每秒使用的内存和vCPU付费,这与AWS Fargate相似。
需要注意的是,定价模型可能因Azure提供的不同资源而异。相比之下,AWS Fargate在不支持特定容器(如GPU)的情况下限制可预配容器类型,而ACI则支持这些特殊容器,但因其不同的特性而定价不同。
Azure还提供了一个高度集成的生态系统,以提升开发人员的体验。例如,用户在部署容器映像时可以利用Azure容器注册表(ACR),类似于Docker注册表。此外,还有一系列工具和服务,如Azure门户、Azure CLI和Azure资源管理器可供使用。
第三个CaaS服务是Google Cloud的Cloud Run。这是这组CaaS服务中最新发布的产品,自2019年11月开始普遍可用。使用Google Cloud Run,开发人员可以部署无状态容器,类似于其他两家供应商的CaaS服务。该服务不仅保留了无服务器的核心优势,还提供了对其他编程语言、系统二进制文件及所需库的灵活支持。
尽管Google Cloud Run是市场上最后推出的产品,但Google已经通过Google Kubernetes Engine(GKE)提供了某种形式的CaaS。作为Kubernetes的创始者,Google提供完全托管的Kubernetes服务显得格外自然。关于GKE及其如何将Kubernetes带入无服务器平台的讨论,已在SeRveRleSSDaYs伊斯坦布尔会议上提及。
我将GKE称为某种CaaS的原因是,因为它更接近Kubernetes即服务(KaaS)产品,而不是CaaS。这是因为在手动创建GKE集群时,节点和环境将永久可用,因此无论使用情况如何,都会产生费用。在这一点上,Google Cloud Run更具无服务器特点,更符合CaaS的定义。总体来看,比较GKE和Google Cloud Run时,后者更符合按需付费模型,易于使用。
结论
随着云计算的普及,云服务供应商不断创新以满足客户的需求。随着行业逐步采用云技术,容器编排成为重要的挑战。为了解决这些问题,无服务器计算时代应运而生。尽管这一新兴计算模型成功抽象了基础架构设置,但灵活性却有所牺牲。因此,现在无服务器容器的兴起为用户提供了更好的选择。
AWS、Azure和近期的Google Cloud都已通过各自的服务进入这一领域。无论它们的产品如何不同,这三者之间都存在共鸣。它们在简化容器编排的同时,保留了所需的灵活性,以支持开发人员在使用云服务时的各种用例,从而整体上促进了云技术的普及。毕竟,过去十年来,云计算的概念已经成为软件领域的焦点,改变了软件的构建和运行方式。CaaS通过创新的方式提升了用户体验,使得伟大的发明家托马斯·爱迪生的创新精神得以延续。
