使用 Amazon Lambda 进行无服务器计算:云架构中的一场革命

引言

十年前,无服务器架构还像是痴人说梦。不再如此了! 有了 Amazon Lambda,我们现在可以建构和运行应用程序而不需要考虑服务器。云供应商会无缝地处理所有服务器的供应、扩展和管理。我们只需要关注代码。 这为云部署带来了前所未有的敏捷性、自动化和优化。但是,要发挥它的全部潜力需要对 Lambda 独特的架构和能力有扎实的掌握。这篇文章旨在通过实际示例、经验教训和以工程师视角深入内部工作原理来揭开它的魔力!

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

什么是无服务器计算?

在深入探讨 Lambda 之前,让我们先厘清"无服务器"的真正含义。无服务器并不意味着完全没有服务器。物理服务器仍然为云基础设施提供支持。 关键的区别在于开发人员不需要直接供应或管理这些服务器。云供应商将基础设施复杂性抽象出来。我们的代码部署在短暂的容器中,这些容器是事件驱动的,会自动扩展,并且仅针对消耗的资源进行计费。 这种"无服务器,无运维"的模型将成本与使用量高度对齐,并加速了开发。传统的服务器、虚拟机和容器在许多工作负载中仍然发挥着其作用。但是 Lambda 在处理事件驱动和瞬态计算需求方面表现卓越。

Lambda 执行模型

Lambda执行模型与传统架构有根本不同。让我们来剖析一下底层发生的事情:

一些关键方面:

  • 无状态:每次执行都在单独的容器中进行。执行之间没有亲和关系。
  • 短暂:容器可以在毫秒内初始化和销毁。
  • 事件驱动:执行由配置的事件触发。
  • 可扩展: 根据队列深度动态添加和删除容器。
  • 无服务器:我们不管理容器基础设施。亚马逊云科技处理所有这些。 通过这种模型,Lambda 可以内在地处理许多并行请求并按需扩展。我们的代码只关注业务逻辑。 接下来我们看看 Lambda 执行中的生命周期事件。

Lambda 函数生命周期

当发生事件调用时,Lambda 会经历一个明确定义的生命周期:

  • 冷启动:对于首次调用,Lambda 必须初始化一个容器。这会导致一些延迟。
  • 初始化和调用:代码被加载并执行。调用处理程序方法。
  • 关闭:一次执行完成后,容器停止。任何后续的执行都会重用热容器。 理解这种冷启动开销对于优化 Lambda 性能至关重要。我们看看下面如何做。

优化 Lambda 冷启动

没有什么比冷启动慢更让人痛苦的了。幸运的是,有一些经过验证的技术可以缓解这一问题:

  • 使用容器重用:设置非零超时,以便容器在调用之间保持存在。
  • 优化部署程序包大小:删除不需要的依赖项和工件以最小化下载时间。
  • 选择高性能运行时:Go、Python 和 NodeJS 初始化开销很低。
  • 预取容器:使用预配置并发性保持容器初始化。
  • 优化IAM角色:使用 Amazon SSO 等服务减少角色承担的延迟。

做好冷启动是一门艺术和科学!有了上述技巧,我们可以轻松实现亚秒级的冷启动。 现在让我们转而看一些Lambda实际应用的示例。

Lambda 使用案例

凭借 Lambda 灵活的执行模型,可能性是无穷的。下面是一些喜欢的 Lambda 使用方式:

数据处理

  • 流处理用于实时分析
  • 批量数据转换
  • 生成聚合报告

集成和消息传递

  • 通过 SQS 触发用于分布式工作负载
  • 对 SNS 通知做出反应
  • 服务之间的集成粘合剂

Web 应用程序

  • 运行无服务器后端
  • 提供 API 网关支持
  • 预处理 HTTP 请求

基础设施自动化

  • 自定义自动化工作流程
  • 程序化资源管理
  • 自我修复能力

等等!

Lambda 仅由我们的创造力所限。

为了更具体,我们接下来演练一个真实的无服务器 Web 应用程序。

构建一个无服务器 Web 应用程序

我们来看看 Lambda 如何支持可扩展的无服务器 Web 架构:

  • API网关: Lambda函数为API后端提供支持。
  • 异步工作: SQS和SNS集成Lambda实现扩展工作负载。
  • 静态资产: S3托管前端静态资产,如HTML/CSS/JS。 通过这种设置,我们可以获得强大的可扩展性、出色的性价比和低管理开销。Lambda服务处理基础设施的重力劳动,如可用性、冗余和扩展。我们只关注核心产品交付! 当然,无服务器应用程序也有其自己的细微差别。明天的文章将分享一些实际的优化、调试、CI/CD和其他运维方面的技巧。

总结思考

我们只触及了 Lambda 和无服务器的改变游戏规则的潜力。在底层, Lambda 通过无状态、短暂和事件驱动的执行颠覆了基础设施管理。 这为我们的云架构带来了前所未有的敏捷性、自动化和效率。请记住,大权带来大责任! Lambda 仍需要经过深思熟虑的设计和运维才能平稳运行。 希望你喜欢这个 Amazon Lambda 快速概览之旅。请告诉我哪些方面让你产生共鸣,或者你想要了解的任何其他 Lambda 主题。再会,继续构建那些无服务器解决方案!

参考资料

文章来源:dev.amazoncloud.cn/column/arti...

相关推荐
心理之旅2 小时前
高校文献检索系统
运维·服务器·容器
大佐不会说日语~3 小时前
使用Docker Compose 部署时网络冲突问题排查与解决
运维·网络·spring boot·docker·容器
曾几何时`6 小时前
Docker容器化部署编译运行模块
运维·docker·容器
直饮水观察哨8 小时前
商用净水器亲测对比,哪个更专业?
容器
Suchadar9 小时前
Docker基础命令(二)——数据卷管理端口映射与容器互联
运维·docker·容器
firstacui9 小时前
Docker容器网络管理与容器数据卷管理
运维·docker·容器
努力搬砖的咸鱼11 小时前
部署你的第一个应用到 K8s
微服务·云原生·容器·kubernetes
舰长11512 小时前
使用 kubeadm搭建生产环境的单 master 节点 K8S 集群(一)
云原生·容器·kubernetes
hwj运维之路13 小时前
Docker面试题汇总系列
运维·docker·云原生·容器
VermiliEiz14 小时前
使用二进制方式部署k8s(6)
云原生·容器·kubernetes