使用 AWS Lambda 和 Scala 的无服务器架构

主要观点:大约一年前开始研究 AWS 的无服务器服务 AWS Lambda,其 premise 简单,无需管理和部署服务器,按需付费且可无限扩展。虽未研究基于 JVM 的 Lambda 性能,但未频繁使用时可能有性能成本。一年前它还不成熟,需用注解处理输入输出 JSON 对象,于是创建了 ScaLambda 库以更习惯的 Scala 方式处理 AWS Lambda。
关键信息:

  • AWS Lambda 只需定义单个函数端点并映射到 API 网关即可实现无限扩展,无需维护升级服务器,按秒计费。
  • ScaLambda 库用于以更习惯的 Scala 方式处理 AWS Lambda,使用 Circe 和 Shapeless 自动生成编码器/解码器。
  • 部署 AWS Lambda 可使用 Serverless 框架,生成 Java(JVM)基于的 Gradle 项目模板,可配置端点和函数调用。
  • ScaLambda 可将 Java 项目升级为 Scala 项目,更新输入输出类为 Scala case 类,更新请求处理程序使用 Circe 自动 JSON 编码/解码。
  • 库支持错误处理,通过ApiResponse类处理异常,可自定义实现ExceptionHandlerComponentResponseSerializerComponent
  • 需提供ResponseSerializerComponent的实现,默认实现简单包裹响应,可根据需要扩展/更改。
    重要细节:
  • 一年前研究时 AWS Lambda 不成熟,处理输入输出 JSON 需注解 POJO。
  • Serverless 框架易设置云服务上的无服务器函数,按步骤可生成 Java 项目模板。
  • ScaLambda 中ApiResponse类是Either[Exception, T]的别名,方便处理函数中的错误。
  • 默认的DefaultExceptionHandlerDefaultResponseSerializerComponent可直接使用或自定义替换。
  • ResponseSerializerComponent用于包裹响应消息,默认实现简单包含状态码和数据。
阅读 6
0 条评论