事件驱动架构为开发人员提供了更高的可用性、弹性、可扩展性和成本优化。随着微服务和云的兴起,事件驱动架构对于开发人员的理解变得越来越重要。

这篇博客解释了什么是无服务器架构,什么时候应该使用它,以及如何使用 API Gateway、Lambda、SQS、SNS 和 SES 等 AWS 无服务器服务。

Q.Serverless是什么意思?

部署应用程序通常需要服务器基础架构。这意味着需要管理虚拟或物理服务器及其操作系统和先决条件。使用来自亚马逊等云提供商的虚拟服务器确实消除了物理限制,尽管它仍然需要对操作系统及其软件流程进行一定程度的定制。

无服务器架构是一种构建和运行应用程序和服务的方式,而无需管理其背后的基础设施。 使用无服务器架构,您的应用程序当然仍然在服务器上运行,但服务器管理由 AWS 完成。因此,您只需专注于应用程序代码中的各个功能。

AWS 将其无服务器服务定义为“使您能够将更多运营职责转移到 AWS 的原生云架构,从而提高您的敏捷性和创新能力。”下图展示了您可以使用解决方案的实施指南在几分钟内部署的无服务器架构。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--O-8YJllj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i1.wp. com/d1.awsstatic.com/product-marketing/Serverless/diagram_serverless-computing_weather-app.216b17d18ea1b3ed6e6e24b2cd9b58264b52058d.png%3Fresize%3D1100%252C405%26ssl%3D1)

学分:https://i1.wp.com/d1.awsstatic.com/product-marketing/Serverless/diagram_serverless-computing_weather-app.216b17d18ea1b3ed6e6e24b2cd9b58264b52058d.png?resizeu003d1100%2C405&sslu003d1

它也被称为功能即服务 (FaaS),是一种执行模块化代码的无服务器方式,可以响应事件执行,例如用户单击应用程序中的元素。这使得轻松开发和部署微服务变得容易。

因为每个功能都可以自动扩展,这是一种非常划算的计算资源付费方式。您只需为函数被调用的时间付费,而不是为让您的应用程序始终开启并等待如此多不同实例的请求付费。

Q.何时以及为什么要考虑无服务器?

如果您需要部署少量功能,则应考虑使用无服务器提供程序。随着时间的推移,将应用程序的小部分迁移到无服务器功能可能更有意义,因为迁移整个应用程序可能对系统架构非常复杂。

1.性价比高,成本是根据CPU使用时间计算的。

  1. 简化的可扩展性,因为供应商可按需处理所有扩展。

  2. **事件驱动,**因此无需复杂的部署过程即可推出错误修复和新功能,开发人员可以为特定事件添加和修改代码。

学分:https://hexaware.com/wp-content/uploads/2020/04/characteristics-of-Serverless-Computing.png

一些 AWS 无服务器服务:

A.Amazon API Gateway: AWS API Gateway 是一种托管服务,用于构建、部署和扩展各种类型的 API。 API 网关可以通过监控、记录、限制、缓存和其他基础设施要求来消除管理多个 API 的一些开销。

只需在 AWS 管理控制台中单击几下,您就可以创建 REST 和 Web Socket API,它们充当您的应用程序从后端服务访问数据、业务逻辑或其他 AWS 服务的前门。它的其他一些好处是,

  1. 您可以使用 API Gateway 同时运行同一个 API 的多个版本。

  2. 您可以从 API Gateway 仪表板监控指标和信息的性能——关于 API 调用、数据延迟、错误率。

  3. 您可以根据您在每个区域中跨 AWS 账户发出的 API 请求数量来降低成本。

  4. 您可以使用 AWS Identity and Access Management 或 IAM 以及 Amazon Cognito 授权访问您的 API。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--GKX5Dzdz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://docs.aws.amazon。 com/whitepapers/latest/microservices-on-aws/images/image3.png)

学分:https://docs.aws.amazon.com/whitepapers/latest/microservices-on-aws/images/image3.png

有关实施 Amazon API Gateway 的更多信息。

1.https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-from-example.html

B.AWS Lambda: AWS Lambda 是一种无服务器计算服务,旨在让您运行应用程序代码,而无需管理和预置您自己的 EC2 实例。这使您不必在解决方案中维护和管理额外的技术责任层。相反,该责任将移交给 AWS 来为您管理。

只需上传您的代码,Lambda 就会以高可用性和成本效益处理运行和扩展代码所需的一切,因为您只需为所服务的请求和为每个请求运行代码所需的计算时间付费。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--uvJmgnMM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2908q01vomqb2.cloudfront.net/ fc074d501302eb2b93e2554793fcaf50b3bf7291/2019/06/27/Screen-Shot-2019-06-27-at-2.23.51-PM-1024x510.png)

学分:https://aws.amazon.com/blogs/architecture/understanding-the-different-ways-to-invoke-lambda-functions/

Lambda 函数本身并没有多大作用。它需要被执行。我们称之为触发器。有许多 AWS 服务可以触发 Lambda 函数。当您的 Lambda 函数被执行时,Lambda 需要知道它需要执行的代码片段。这是您的代码(处理程序)的入口点。这告诉 Lambda 要执行的函数在哪个文件或类中,以及它的名称。

Lambda 将使用该处理程序从收到的触发器中执行您的 Lambda,但您的代码可能需要接收有关刚刚触发它的更多信息。该信息通过我们所谓的“事件有效负载”传递给处理程序。

C.Simple Queue Service (SQS) 是 AWS 提供的一项完全托管的服务,适用于无服务器系统或任何分布式架构。

它只是组件之间消息的队列服务,它具有大规模发送、存储和接收这些消息的能力。也可以使用 AWS 管理控制台、AWS CLI 或使用 AWS 开发工具包来配置服务。

  1. 您架构的生产者组件负责将消息发送到您的队列。

  2. SQS 服务将消息存储在多个 SQS 服务器上,以便在指定队列中保持弹性。

  3. 消费者负责处理队列中的消息。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--nicEQOyp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://knowledgehills.com/images/ aws/AWS-SQS-Flow.jpg)

学分:https://knowledgehills.com/images/aws/AWS-SQS-Flow.jpg

当架构的消费者元素准备好处理来自队列的消息时,将检索消息,然后通过激活消息的可见性超时将其标记为正在处理。 此超时确保同一消息不会被另一个消费者读取和处理。处理完消息后,消费者会从队列中删除消息。 在此期间,消费者会处理消息。如果它处理消息失败,可能是由于通信错误,消费者不会向 SQS 发送删除消息请求。因此,如果可见性超时并且它没有收到删除消息的请求,则该消息将再次在队列中可供其他消费者处理。有两个队列可以使用,

  1. 标准队列,您有无限的吞吐量、至少一次交付和尽力而为的订购。

2.先进先出队列,你有高吞吐量,先进先出交付,和exactly-once处理。

死信队列不同于标准队列和 FIFA 队列,因为死信队列不用作源队列来保存生产者提交的消息。 相反,源队列使用死信队列来发送由于某种原因而无法处理的消息。 死信队列必须配置为与使用源的队列类型相同的队列类型。

D。简单通知服务 (SNS) 用作发布和订阅消息服务。它以主题(用于收集消息的组)为中心。

  1. 通过端点的用户可以订阅该主题,然后将消息或事件发布到该特定主题。

  2. 消息发布后,该主题的所有订阅者都会收到该消息的通知。

SNS 是一项托管服务且具有高度可扩展性,允许您将消息自动分发给您环境中的所有订阅者,包括移动设备。它可以使用 AWS 管理控制台、CLI 或 AWS 开发工具包进行配置。

[](https://res.cloudinary.com/practicaldev/image/fetch/s--gGsXQZMg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d2908q01vomqb2.cloudfront.net/ 1b6453892473a467d07372d45eb05abc2031647a/2017/11/20/introducing_sns_message_filtering_image_4.png)

学分:https://aws.amazon.com/blogs/compute/simplify-pubsub-messaging-with-amazon-sns-message-filtering/

SNS 使用发布者和订阅者的概念,类似于 SQS。

  1. 生产者或发布者向一个主题发送消息,该主题用作中央通信控制点。

  2. 然后通过 HTTP、HTTPS、Email、Email-JSON 等通知主题的消费者或订阅者此消息。

  3. SNS 提供了通过主题策略控制对主题的特定访问的方法。策略本身遵循与 IAM 策略相同的格式。

通过将 SNS 和 SQS 相互集成在一起,可以设计一个解决方案,通过推送的方式向订阅者发送消息。为此,您需要让您的 SQS 队列订阅 SNS 主题。 与 AWS Lambda 的集成允许 SNS 通知调用现有的 Lambda 函数。与 SQS 一样,Lambda 函数必须订阅主题。

有关SNS的更多信息,

1.https://aws.amazon.com/blogs/mobile/invoking-aws-lambda-functions-via-amazon-sns/

2.https://aws.amazon.com/blogs/compute/simplify-pubsub-messaging-with-amazon-sns-message-filtering/

E。简单电子邮件服务 (SES) 使处理自动化电子邮件系统与您的客户沟通成为可能。

  1. 接收电子邮件时,您可以构建应用程序以自动响应传入的电子邮件,例如取消订阅时事通讯的请求。

  2. 发送电子邮件时,您可以将您的应用程序自动构建为事件的电子邮件,例如电子邮件确认。

AWS 将自动扫描垃圾邮件和病毒,并拒绝来自不受信任来源的任何邮件。接收电子邮件时,有两种方法可以配置 SES 来指示它如何处理电子邮件。

  1. 基于收件人的控制,您设置配置以根据收件人定向电子邮件。这些收件人列表被归类为条件。接收规则用于控制满足条件时采取的操作。

  2. 基于 IP 地址的控制根据其源 IP 地址定义您的电子邮件会发生什么。此方法允许您根据电子邮件的原始 IP 地址选择是接受还是拒绝电子邮件。

学分:https://aws.amazon.com/blogs/messaging-and-targeting/auto-reply-to-incoming-emails-using-amazon-simple-email-service-ses/

有关事件驱动架构的更多信息,

  1. https://aws.amazon.com/event-driven-architecture/
Logo

云原生社区为您提供最前沿的新闻资讯和知识内容

更多推荐