如何进行Serverless开发和应用

如何进行Serverless 开发和应用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

AWS Serverless 服务是一种对应用工程师来说无服务器的计算方式,基础概念是将运行服务所需的基础设施交由 AWS 管理。使用 AWS Serverless 服务的工程师可以专注于面向客户逻辑服务层的开发,而不需要在基础设施的构建、管理、扩容等任务上分散过多精力。AWS Serverless 开发的核心是名为 Lambda 的计算服务。

今天我们将围绕 Lambda ,介绍在不同的应用场景下Lambda与各种 AWS 服务的不同组装模式,来初步探讨基于 AWS Serverless 的开发和部署。

What?

首先介绍一下什么是 Serverless 开发。

如何进行Serverless 开发和应用

和经典的开发、编译、部署运行方式不同,使用 AWS Serverless 计算服务 Lambda,仅需要上传源文件,选择执行环境并执行,便能得到运行结果。在这过程中,服务器部署、runtime 安装、编译、都由 AWS Serverless 计算平台管理执行。对开发人员来说,只需要维护源代码和 AWS Serverless 执行环境的相关配置即可。

Why?

为什么要选择 Serverless 呢?

如何进行Serverless 开发和应用

对开发人员来说,使用 AWS Serverless 服务能够节省大量管理基础设施架构的精力,并更好地专注于业务逻辑的开发。而对服务而言,AWS 本身的服务性质使得它能很好的支持弹性扩展和高并发场景。此外基于 AWS Serverless 的开发往往拥有快速更新、快速部署的优点,其按需收费(on-demand)的收费方式,在如轻量部署测试环境、快速验证等应用场景下对削减开支也有优势。

How?

那么,我们来看一下如何用 AWS Serverless 的相关服务迅速组装一个简单的 Web Service。

如何进行Serverless 开发和应用

AWS Serverless 提供了丰富的服务目录,以覆盖各种功能的使用需求。搭建 Web Service 服务除了核心的计算服务 Lambda 之外,常常还需要和请求入口路由(API Gateway)、持久化存储(S3)、CDN(CloudFront)、防火墙(WAF)、域名解析(Route 53)等服务组合使用。如果需要支持 https 协议,还可以使用证书管理服务(ACM)实现。

将上述服务组装好之后,一个完整的响应请求流程将会是这样的:

  • 用户请求经由域名解析到达 CloudFront,由 WAF 进行频率控制、IP 过滤、header 验证等安全性保障后,通过 API Gateway 路由转发给核心的 Lambda 计算服务。

  • Lambda 会对请求进行处理,处理时如若需要会从持久化存储 S3 中读取或存储数据,并且最终将处理结果通过 API Gateway 返回给用户端。

  • Lambda 在逻辑计算时产生的日志会输出到 CloudWatch 提供的日志管理服务中以便日后查询。此外,还可以进行额外的优化,比如配置 CloudFront 直接从 S3 中加载静态资源,以减轻时间和计算开销。

Lambda 的启动方式

如何进行Serverless 开发和应用

在刚刚的 Web Service 的例子中,Lambda 的执行是由 API Gateway 服务唤起(Invoke)的。实际上 Lambda 执行可由多种方式唤起。首先 AWS 本身的服务中,常常会和 Lambda 结合使用的有消息发布(SNS)、消息队列(SQS)、负载均衡器(ALB)、状态机(Step Function)等服务。

当然通过 SDK、Command Line 或者 API 接口,也可以启动 Lambda 函数的执行。执行模式分为同步和异步两种:

  • 同步模式的调用:需要等待 Lambda 函数执行完毕才会返回结果

  • 异步模式的调用:在调用 Lambda 的执行接口之后会立即返回,Lambda 函数的执行结果需要通过其他途径获取。

这两种调用模式可供不同场景灵活选择使用。

消息驱动的例子

我们再看一个消息驱动的报警处理系统中使用 AWS Serverless 服务的例子。

如何进行Serverless 开发和应用

比如我们有一个运行中的系统,设定异常报警发生时会将报警消息发送给 SNS 服务。SNS 服务是一个消息的 Pub/Sub 服务,对报警消息执行一个基础的 fan-out 发布操作,一方面通过电话、邮件通知负责人,另一方面同时调用 Lambda,Lambda 中可以进行一些对报警的自动化处理。这就是一个最简单的报警处理系统。

如何进行Serverless开发和应用