CON309 | 使用 Serverless 容器轻松高效地构建应用程序

CON309 | 使用 Serverless 容器轻松高效地构建应用程序

关键字: [Amazon Web Services re:Invent 2023, Amazon Lambda, Serverless Containers, Application Development, Concurrency, Scaling Model, Compute Efficiency]

本文字数: 2800, 阅读完需: 14 分钟

视频

导读

在本次分享中,探索 Amazon App Runner、Amazon Lambda 容器和 Amazon Fargate 之间的并发性和扩展性。探讨了价值和性能差异,重点在于帮助您为用例做出最佳平台决策。

演讲精华

以下是小编为您整理的本次演讲的精华,共2500字,阅读时间大约是12分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。

在过去的几年里,作为一位经验丰富的软件开发人员,我参与了众多创业公司的建设。在这个过程中,我领悟到了一个宝贵的经验——您需要根据开发周期的不同阶段选择合适的工具。正如园丁会根据植物的成熟阶段选择适当的工具来培育植物一样,软件开发者也需要根据技术产品的发展阶段选择合适的技术。

在评估如何轻松高效地构建应用程序时,这一点尤为重要。从最初的原型到处理数百万用户和复杂的每秒请求的企业级平台,容器在提供快速迭代速度和成本效益方面表现出色。

让我们来看看容器如何有益于绿色项目——即您正在测试以寻找产品市场契合度的创新想法。在启动新的软件项目时,开发过程的便捷性至关重要,这样您可以专注于快速创新和迭代。通过利用Docker Hub库中超过500万个预构建的容器镜像,您可以在几分钟内启动一个生产就绪的环境。

例如,您可以启动一个由Python核心团队自身优化的坚不可摧的Python 3.8运行时环境。这个镜像提供了您在安全Linux操作系统上运行的所需精确版本的Python。或者对于Node.js,您可以选择由Node.js专家专为14.x长期支持版本构建的目的明确的图像。这些图像已经针对性能优化和安全加固进行了调整。

您无需从头开始构建自己的容器、依赖项、配置和部署工具链。社区已经为您完成了这些工作,并创建了加速环境设置的Docker映像。这使得小团队能够发挥超出其重量级的影响力,并以大型组织的方式发布。

通过使用容器,您可以将时间花在最重要的事情上——快速开发为客户提供价值的企业功能。您可以专注于您的核心产品,而不是构建部署和DevOps管道。容器支持快速原型设计,以便您可以快速失败并更快地学习。

如今,让我们来探讨一下光谱的另一端——那些拥有数百万用户的成熟软件。在这个领域,便捷性已不再是首要关注点,取而代之的是效率、可靠性和标准化。随着时间的推移,传统系统往往会积累大量技术债务,因为不同的工程师会以不同的方式定制工具。

容器提供了标准的部署单位,消除了团队之间的碎片化。无论新工程师加入哪个团队,熟悉Docker的他们都能迅速投入工作。不再需要只有少数人理解的特制配置。

标准化在大规模的工程组织中显著提高了生产力。当一个新开发者加入时,他们可以使用与生产环境相同的容器进行本地构建。当他们部署代码时,他们可以确信在阶段性和生产环境中,它的运行方式将保持一致且无意外。一致性可以解除开发人员的限制,使他们更快地提供价值。

从效率角度来看,容器允许你在相同的基础设施上运行更多的应用程序。虚拟机通常运行在非常低的5-15%的利用率下,虽然消耗金钱但做不了多少工作。使用容器,你可以消除臃肿的虚拟机,并通过5-10倍减少基础设施成本。

例如,而不是在每个应用服务上运行自己的专用虚拟机,你可以在一个虚拟机上运行所有这些服务,使用容器。通过将工作负载放在一起,你可以最大化资源利用率并最小化成本。容器实现了巨大的效率收益。

可靠性也得到了提高。如果物理服务器崩溃,你只需重新启动容器并在数秒内恢复服务。不可变的容器映像提供一个重启应用的已知良好状态的蓝本。

回滚变得无缝,因为你只是在重新部署之前的容器版本。使用容器,你消除了特殊的服务器并获得了一致的可靠性。

正如我们所看到的,无论是刚开始还是在大规模跨数千台服务器的任务关键系统中运行,容器都有优势。但这只是故事的一部分。另一个关键考虑因素是效率,尤其是计算资源的高效利用。

为了提高效率,我们需要研究并发性。随着计算技术的发展,人们越来越关注处理更多并发任务以提升速度和功能。最初,IBM PC每次只能运行一个4MHz的程序,要想启动新程序,必须实际更换软盘。

后来,在Windows 2.1中实现了协作式多任务处理,程序自愿交出控制权以实现伪并行操作。虽然有所改进,但仍不是真正的并发,因为单个恶意应用程序可能会冻结整个25MHz系统。

紧接着,我们迎来了具有预夺式多任务处理的Windows 95,操作系统强制在各个程序之间分割执行时间片以共享120MHz的CPU。最大的突破是双核2.5GHz处理器,能够在独立的内核上同时运行程序——真正的并行处理,带来了巨大的性能提升。

时至今日,我们已经拥有庞大的客户端-服务器生态系统,用户只需点击一下即可触发数十或数百个由负载平衡集群处理的异步10-100ms后台请求。

那么,如何高效地构建应用程序以利用这些并发性呢?答案在于事件循环。通过将代码拆分为小型非阻塞1ms块,单个进程可以处理数千个并发请求。当一个块正在等待I/O时,另一个块在执行。

这使得在一个CPU核心上可以实现惊人的100-1000次每秒的请求处理量。例如,一个简单的120ms用户注册请求可能只有10ms的实际CPU时间。其余时间花在等待网络和磁盘上。

使用异步代码和事件循环,我们可以在单核上处理100个并发请求,从而在有用的工作中填充等待时间。事件循环可以极大地提高单个计算资源的吞吐量。

然而,这种方法在达到峰值容量时效果并不理想。过多的并发性会导致队列积压,因为CPU会达到100%的利用率。延迟会从10ms飙升至秒,用户会收到错误,混乱也随之而来。

解决方法是扩展到多个核心和服务器。这就是无服务器容器的作用所在:根据需要,您可以立即旋转额外的实例来处理任何流量。

亚马逊云科技在其Lambda服务中率先采用了无服务器计算模式。该模式将函数封装在每次调用500毫秒的处理系统中,这些系统被组织成微虚拟机。用户将根据每100毫秒的CPU使用时间与并发度成比例地付费。借助Lambda,在请求之间的空闲时段内,由于没有实例在运行,成本可以降低至零。

由于微虚拟机的启动速度非常快,延迟保持在10-50毫秒的低水平。并且,规模可以是无限制的——Lambda会迅速启动更多的微虚拟机以应对流量峰值的增长。这使得Lambda非常适合处理具有间歇性峰值的工作负载,例如电子商务、市场营销活动或流量变化不大的网站。

然而,当您有持续的高速并发时,可能会出现一些问题。过多的微虚拟机会快速增加成本。为了解决这个问题,出现了App Runner的事件循环容器。与隔离请求不同,App Runner利用异步事件循环来处理每个容器实例多达100个并发请求。

您可以配置每个容器所需的请求。App Runner根据您定义的限制管理负载平衡和自动调整容器数量以处理每秒100-1000个请求。这种架构对于具有稳定高吞吐量的工作负载非常经济高效。

尽管容器启动时间为30秒,延迟较高,但容量可以快速扩展为以100个请求的大块形式。事件循环允许每个实例更高的吞吐量。这使得App Runner非常适合核心业务应用程序,这些应用程序在白天使用率高,但在夜间流量低。

Fargate进一步允许您定制完整的容器和基础设施栈。您管理容器计数、负载平衡、自动扩展规则以及部署的每一个方面。这需要更多的努力,但如果您有大规模的高性能需求,它可以允许广泛的优化。

通过Fargate,您可以从实例类型到网络配置到匹配您的工作负载的独特概况的所有方面进行调整。您还可以利用强大的协调器,如Kubernetes,来自动化容器的部署和管理。Fargate提供的控制级别非常适合大型关键任务应用程序。

在选择正确的无服务器容器方法时,需要考虑您的具体用例。决策因素包括工作负载的模式和要求。

Lambda 适用于峰值负载较低且每秒处理1到10个请求的工作负载。Fargate 更适合处理高稳定性且每秒处理1000多个请求的工作负载。App Runner则能够平衡每天不同时间内的流量,每秒处理100到500个请求。

Lambda的微虚拟机提供了最细粒度的扩展,可以根据单个请求并以100毫秒的使用方式进行缩放和计费。对于具有大型波动的不稳定流量,Lambda可以最小化成本。

Fargate具有更高的开销,但在优化栈之后,其在规模上的效率最高。App Runner在非高峰期暂停的情况下,为可变流量达到平衡。

在控制与便利性之间存在权衡。Fargate以更高的复杂性为代价,提供了最大的可配置性。Lambda采取了相反的方法,非常易于使用,但定制程度较低。App Runner处于中间地带。

在选择时,需要考虑你的工作负载模式、增长趋势和技术需求。优先考虑新项目的创新速度,并为现有的高规模软件优化性能和成本。无服务器容器支持任何应用程序生命周期的多样性。采取正确的方法,你可以在第一天轻松高效地建立,并继续成功地进行扩展几十年。

下面是一些演讲现场的精彩瞬间:

提出了一种观点,即软件开发人员需要在适当的时候使用合适的工具。

CON309 | 使用 Serverless 容器轻松高效地构建应用程序_第1张图片

在处理大量独立功能的输入输出密集型任务时,处理器大部分时间都在等待执行代码而不是实际执行。

CON309 | 使用 Serverless 容器轻松高效地构建应用程序_第2张图片

应用运行器通过在不同CPU核心上并行运行多个副本来处理扩展和负载平衡,从而使应用程序能够处理更多的并发请求。

CON309 | 使用 Serverless 容器轻松高效地构建应用程序_第3张图片

客户端端代码会向由亚马逊云科技App Runner管理的Envoy代理负载均衡器控制的自动终点发送请求,该系统会根据并发请求的限制来调整容器数量。

CON309 | 使用 Serverless 容器轻松高效地构建应用程序_第4张图片

应用运行器是适用于具有可变流量模式的业务应用的理想服务,可以通过自动调整CPU和内存使用率来实现优化定价。

CON309 | 使用 Serverless 容器轻松高效地构建应用程序_第5张图片

亚马逊云科技Fargate允许客户根据应用需求在ECS和EKS之间进行选择来协调容器,提供灵活性。

CON309 | 使用 Serverless 容器轻松高效地构建应用程序_第6张图片

应用运行器提供了自动化扩展和入口,同时在抽象层次上介于Lambda和Fargate之间。

CON309 | 使用 Serverless 容器轻松高效地构建应用程序_第7张图片

总结

演讲者探讨了如何通过使用无服务器容器来高效且轻松地构建应用程序的策略。他强调了在开发过程中的每个阶段都需选择合适的工具的重要性。容器技术支持快速的原型设计和标准化流程。演讲者详细研究了使用亚马逊云科技服务(如Lambda、App Runner和Fargate)运行容器的方法。Lambda采用低并发量模式,按每毫秒计费;App Runner则提供了自动缩放和负载均衡功能;而Fargate则需要用户自行配置缩放和负载均衡,但在高并发量场景下表现优秀。选择哪种服务取决于应用当前和未来并发需求。演讲者通过将服务与不同的并发强度和稳定性进行匹配,得出了一些关于如何选择的最佳实践。例如,Lambda适合处理峰值低、并发量小的应用;Fargate更适合高并发量和稳定性的场景;而App Runner则介于两者之间。总之,演讲者认为容器技术和无服务器服务在整个应用生命周期中都能为开发者带来诸多便利。

演讲原文

想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站!

2023亚马逊云科技re:Invent全球大会 - 官方网站

点击此处,一键获取亚马逊云科技全球最新产品/服务资讯!

点击此处,一键获取亚马逊云科技中国区最新产品/服务资讯!

即刻注册亚马逊云科技账户,开启云端之旅!

【免费】亚马逊云科技“100 余种核心云服务产品免费试用”

【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”

亚马逊云科技是谁?

亚马逊云科技(Amazon Web Services)是全球云计算的开创者和引领者,自 2006 年以来一直以不断创新、技术领先、服务丰富、应用广泛而享誉业界。亚马逊云科技可以支持几乎云上任意工作负载。亚马逊云科技目前提供超过 200 项全功能的服务,涵盖计算、存储、网络、数据库、数据分析、机器人、机器学习与人工智能、物联网、移动、安全、混合云、虚拟现实与增强现实、媒体,以及应用开发、部署与管理等方面;基础设施遍及 31 个地理区域的 99 个可用区,并计划新建 4 个区域和 12 个可用区。全球数百万客户,从初创公司、中小企业,到大型企业和政府机构都信赖亚马逊云科技,通过亚马逊云科技的服务强化其基础设施,提高敏捷性,降低成本,加快创新,提升竞争力,实现业务成长和成功。

CON309 | 使用 Serverless 容器轻松高效地构建应用程序_第8张图片

你可能感兴趣的:(aws)