面向 Serverless 开发人员的最佳实践

云计算
re:Invent
0
0
## 视频 <video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/SVS401-Best_practices_for_serverless_developers-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video> ## 导读 您是否希望充分利用 Serverless 体系结构的强大功能,处理生产工作负载?您想知道事件如何帮助应用程序扩展吗?您是否一直在尝试调整应用程序以实现更高的性能和更低的成本?本论坛提供了最佳架构实践、优化和实用路径,专家可以使用它们,构建安全、大规模和高性能的 Serverless 应用程序。 ## 演讲精华 <font color = "grey">以下是小编为您整理的本次演讲的精华,共2100字,阅读时间大约是10分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font> 演讲者首先热情洋溢地欢迎观众参加关于开发[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序最佳实践的研讨会。他强调,亚马逊云科技的服务使得开发者能够专注于为客户创造价值,而非关注基础设施的管理。 [无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算的起源与发展 尽管[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算的概念始于2014年推出的Lambda,但它可以追溯到更早期的时间。例如,2006年推出的S3和SQS等服务,甚至早于2008年推出的EC2。这些服务是亚马逊云科技的初始构建模块,从一开始就采用了[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)的方式。实际上,可以说云计算本身就是诞生于[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)的环境之中。 自Lambda问世以来,随着业界开始将这一概念称为"[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)",这一概念已经发生了很大的变化。起初,它主要帮助人们理解无需管理服务器或基础设施即可运行代码的概念。然而如今,[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)不仅局限于运行代码,还可以用于构建完整的应用程序,而不仅仅是计算方面,同时利用更多的服务。 如今,许多开发者认为[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)是一种操作模型,可用于构建或运行应用程序,而无需关心底层的基础设施管理。这使得专业人士可以将专业知识委托给专门负责这些结果的亚马逊云科技团队。这样一来,开发者就可以将精力集中于那些对客户具有关键价值的差异化工作。 在构建[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序时,基本的构建模块从诸如负载均衡器、实例类型等基础设施元素转变为数据库、函数、队列和工作流程等应用程序构件。这种向更多以应用程序为中心的服务转变是亚马逊云科技[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)方法实现其全部价值的关键所在。亚马逊云科技提供了一系列丰富的应用程序构建块作为服务,并且越来越多的服务正在转向[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)模式。例如,Lambda、DynamoDB、EventBridge、Step Functions以及Amazon的全托管产品如Redshift和ElastiCache等都展示了这个不断扩展的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)服务生态系统。 总之,[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)代表着一种战略思维的转变,它将基础设施管理的负担从开发者的肩膀上卸下,让他们能够专注于为客户提供更具价值的产品和服务。 演讲者认为,将[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)视为构建应用程序的战略思维转变,而不仅仅是一种技术实现方式,是更优的选择。近年来,经济环境使得人们更加关注如何高效地提供商业价值。亚马逊云科技CEO亚当·塞利普斯基在他的主题演讲中也强调了这一点,特别强调了成本效益、速度和客户价值的实现。如今,[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)可以被视作一种运营模式,用于运行或构建应用程序,而无需关心基础设施管理的差异化工作。这使得能够在云中构建并充分利用其所有优势,如安全性、敏捷性和可扩展性。这不仅超出了仅仅使用抽象来构建在云端的方法,这可能还需要更多的努力。 [无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)的优点显而易见:更快地从原型阶段过渡到生产阶段,以便为企业提供反馈并进行快速迭代,从而提高DevOps指标。与传统的大型爆发式发布不同,[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)支持小规模、频繁的更改以实现创新。演讲者引用了DORA指标,这些指标衡量了部署频率、交付时间和更改失败率。高发布频率和低失败率与更快的速度和更高的质量相关。[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)正是通过灵活的增量更改来实现这一点的。 总的来说,[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)代表了利用亚马逊云科技在提供安全、可用性和性能等方面精心设计的成果的思维模式转变。这使得建设者能够专注于为客户交付有区别的价值。 接下来,演讲者探讨了如何采用“[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)优先”的心态,并通过配置而非代码使用亚马逊云科技的服务。一个典型的Lambda应用程序可能有一个事件源触发Lambda函数,该函数执行某些处理并将数据发送到另一个服务。然而,如果事件源可以直接与目的地服务集成,那么可能不需要Lambda函数。这就展示了一个使用直接服务间集成的“全服务器”方法。 Tim Wagner(Lambda的原始开发者之一)曾说过这样一句话,很好地概括了这一观点:“你需要在需要转换数据而非仅传输数据时使用Lambda。”简单地将数据路由通常可以在没有Lambda函数的情况下处理。 在编写Lambda函数时,应避免过度复杂的逻辑。过于庞大的、充满决策树的Lambda函数会导致不必要的复杂性。理想的Lambda函数应当仅包含实现其特定目标所需的最简逻辑。 当将应用程序迁移至云端时,通常会整体迁移至Lambda。然而,这种方法并不能将组件分离并部署到独立的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)服务中。例如,前端可以移至S3,API网关负责路由和限流,消息传递则使用异步队列,而Lambda函数则可以进一步细分为专门的模块。这样有助于提高可扩展性、恢复力、安全性和成本效益。 总的来说,Lambda函数应以模块化和单一用途为原则,而非大型和多功能。一个同时执行图像格式转换、缩略图创建和数据库存储的单一功能可以被拆分为三个专门的功能。这样做不仅可以减少加载不必要代码的机会,还能通过限制作用域来提高安全性。 为了避免"Lambda提升"现象,应在API请求不是很多的情况下避免将所有请求都通过一个带有内部逻辑分支的Lambda函数。相反,应根据常见的权限、依赖关系、初始化时间等因素对Lambda函数进行分组。这种策略可以在简化操作和保持权限控制之间取得平衡。 在构建分布式应用程序时,应考虑使用Step Functions进行编排,而非EventBridge进行协调。Step Functions集中管理服务的顺序和工作流程,而EventBridge则松散地耦合跨服务的事件。许多应用程序会同时使用这两种方法:Step Functions用于服务内的工作流程编排,而EventBridge则用于服务间的松散事件协调。 在API网关中,应遵循配置优先于编码的原则。Lambda函数通常仅用于在API网关和其他服务之间进行代理。然而,API网关可以直接与许多亚马逊云科技服务集成,无需中间的Lambda函数。 总之,有许多机会可以通过本地集成替代代码。一个常见的做法是使用Lambda函数消费DynamoDB流并将事件发布到EventBridge。通过直接配置这个数据流,EventBridge管道将不再需要Lambda代码。 总结来说,在创建[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序时,需要记住的是,性能高且成本低的Lambda函数可以通过与原生服务的集成来实现。然而,也不能过于简化,因为Lambda提供了强大的数据转换功能。 为了优化Lambda的性能和成本,我们需要关注其执行环境的生命周期管理。一个关键因素是Lambda如何根据配置的内存大小来分配相应的CPU资源。最大内存为10GB,提供高达6个CPU核心。然而,代码必须支持多线程才能充分利用多个核心。 对于单线程代码,CPU效率最高发生在约1.5-1.8GB内存的情况下。超过这个范围,尽管更多的内存会被分配更多的CPU资源,但代码无法有效地利用它们。例如,即使只是调用HTTPS终结点的函数也会因为加密开销而从增加内存中受益。 举个例子,有两个函数:一个拥有2GB内存并运行1秒,另一个拥有1GB内存并运行2秒。它们的计算成本相同,这表明执行时间与配置的内存有关。另一个例子显示较短的执行时间并不总是更便宜。一个10秒的函数拥有128MB内存比一个1秒的函数拥有1GB内存更昂贵,这是因为更大的CPU分配。 使用像Lambda Power Tuning这样的Lambda性能调整工具可以帮助优化配置。这个开源工具通过运行负载测试来比较不同内存设置下的性能,以帮助确定最低成本和最快配置,这可能会根据同步或异步调用模式而有所不同。 将函数迁移到Graviton处理器也可以提高性价比。建议在迁移之前进行应用兼容性的测试。总的来说,更新运行时和SDK通常会带来性能提升,因此保持最新是有益的。CloudWatch中的Lambda Insights提供了额外的指标来微调配置。 其他建议包括: - 只导入必要的SDK组件,懒加载库 - 谨慎建立连接——在初始化阶段或在第一次调用时初始化 - 将业务逻辑模块化为独立的包/层 - 使用最新的运行时版本以获得性能提升 - 控制日志级别、格式和目标以减少成本 - 利用Lambda Power Tools遵循最佳编程实践 在接下来的演讲中,演讲者们探讨了亚马逊云科技在处理冷启动问题时所面临的挑战。尽管冷启动影响了不到1%的生产调用,但对于同步工作负载来说,它仍然可能产生一定的影响。冷启动通常发生在函数版本部署、环境被回收进行维护或硬件故障时,涉及创建执行环境、下载代码或容器镜像、初始化运行时以及运行初始化代码等步骤。为了优化冷启动过程,开发者可以采取一些措施,如仅导入必要库、懒加载依赖、有节制地建立连接以及将业务逻辑模块化。 此外,亚马逊云科技还提供了一些优化建议,如使用Lambda Power Tuning进行配置比较、通过Compute Optimizer调整函数大小、更新至最新运行时和依赖项以及启用Lambda Insights以获取额外指标。同时,还可以参考Serverless Land的成本优化指南以减少支出。 为了减少冷启动的影响,开发者还可以考虑预分配并发量,即预先初始化函数实例以避免冷启动。这种方法虽然采用了不同的成本模型,但在使用率超过60-65%的情况下,实际上比支付单次调用费用更加经济实惠。此外,亚马逊云科技还提供了自动重新调配实例的功能,以确保始终保持100个备用环境。 演讲者向开发者提供了一系列关于性能和成本优化的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序的最佳实践。这些实践包括使用最新的运行时和依赖项,启用Lambda洞察以进行监控,适当调整内存配置,以及使用Graviton来提高性价比。此外,优化初始化代码以最小化冷启动,利用SnapStart进行Java测试,并尝试其他语言,都是提高性能的有效方法。同时,使用预分配的并发以避免冷启动,监控并适当调整并发配置,以及利用诸如Lambda Power Tuning之类的工具也是优化性能的重要方法。遵循这些最佳实践,开发者可以在亚马逊云科技 Lambda上构建高性能且成本高效的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序。 不应构建庞大集中的平台,而应整合多个关注安全、可观察性、持续集成与部署、成本管理等方面的平台。平台团队需与开发者密切合作,了解如何使用这些功能以提高生产力。总的来说,借助亚马逊云科技服务,我们可以专注于客户需求而非基础设施。[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)技术标志着应用开发思维的重大转变。亚马逊云科技拥有最丰富的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)构建模块生态系统,支持这一变革。遵循这些最佳实践将帮助开发者构建安全、稳定且经济高效的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用。 **下面是一些演讲现场的精彩瞬间:** 领导者在re:Invent上向现场的和虚拟的与会者致以问候和感谢。 ![](https://d1trpeugzwbig5.cloudfront.net/SVS401-Best_practices_for_serverless_developers/images/rebranded/SVS401-Best_practices_for_serverless_developers_0.png) 通过懒加载初始化库,可以在提高冷启动速度的同时保持性能优势。 ![](https://d1trpeugzwbig5.cloudfront.net/SVS401-Best_practices_for_serverless_developers/images/rebranded/SVS401-Best_practices_for_serverless_developers_1.png) SnapStart for Java函数预先初始化执行环境,从而提高冷启动性能。 ![](https://d1trpeugzwbig5.cloudfront.net/SVS401-Best_practices_for_serverless_developers/images/rebranded/SVS401-Best_practices_for_serverless_developers_2.png) 领导者解释了Lambda如何利用将调用路由到最新可用的执行环境来优化性能。 ![](https://d1trpeugzwbig5.cloudfront.net/SVS401-Best_practices_for_serverless_developers/images/rebranded/SVS401-Best_practices_for_serverless_developers_3.png) 可以通过金丝雀部署、功能标志和可观察性来实现逐步引入更改以及需要在必要时进行快速回滚。 ![](https://d1trpeugzwbig5.cloudfront.net/SVS401-Best_practices_for_serverless_developers/images/rebranded/SVS401-Best_practices_for_serverless_developers_4.png) 在应用程序开发的各个阶段中,实施强制管道、日志记录、跟踪和加密等关键安全措施至关重要。 ![](https://d1trpeugzwbig5.cloudfront.net/SVS401-Best_practices_for_serverless_developers/images/rebranded/SVS401-Best_practices_for_serverless_developers_5.png) 领导者强调了Service Land作为亚马逊云科技服务领域内的最佳资源。 ![](https://d1trpeugzwbig5.cloudfront.net/SVS401-Best_practices_for_serverless_developers/images/rebranded/SVS401-Best_practices_for_serverless_developers_6.png) ## 总结 本次演讲主要探讨了在亚马逊云科技上构建[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序的最佳实践。演讲强调了采用服务驱动的方法来连接各种服务,而非编写自定义代码的重要性。关键要点包括充分利用亚马逊云科技的托管服务,避免使用大型单体功能,转而使用更小且更集中的功能,并使用诸如Step Functions等编排服务而非自定义协调逻辑。为了提升性能,建议优化初始化时间,实现多线程,升级运行时,以及利用预配置的并发性。在软件交付方面,建议使用SAM等框架,通过SAM Local加速本地开发,进行全面的测试,并将速度和品质作为目标。演讲强调,在[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)环境中,运营管理依然至关重要,自动化和防护措施已取代了手动任务。平台团队可以提供帮助,使开发者能够专注于提供独特的价值。 ## 演讲原文 ## 想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站! [2023亚马逊云科技re:Invent全球大会 - 官方网站](https://webinar.amazoncloud.cn/reInvent2023/?s=8739&smid=19458 "2023亚马逊云科技re:Invent全球大会 - 官方网站") [点击此处](https://aws.amazon.com/cn/new/?trk=6dd7cc20-6afa-4abf-9359-2d6976ff9600&trk=cndc-detail "点击此处"),一键获取亚马逊云科技全球最新产品/服务资讯! [点击此处](https://www.amazonaws.cn/new/?trk=2ab098aa-0793-48b1-85e6-a9d261bd8cd4&trk=cndc-detail "点击此处"),一键获取亚马逊云科技中国区最新产品/服务资讯! ## 即刻注册亚马逊云科技账户,开启云端之旅! [【免费】亚马逊云科技“100 余种核心云服务产品免费试用”](https://aws.amazon.com/cn/campaigns/freecenter/?trk=f079813d-3a13-4a50-b67b-e31d930f36a4&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技“100 余种核心云服务产品免费试用“") [【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”](https://www.amazonaws.cn/campaign/CloudService/?trk=2cdb6245-f491-42bc-b931-c1693fe92be1&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用“")
目录
亚马逊云科技解决方案 基于行业客户应用场景及技术领域的解决方案
联系亚马逊云科技专家
亚马逊云科技解决方案
基于行业客户应用场景及技术领域的解决方案
联系专家
0
目录
关闭