主要观点:大约一年前开始研究 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
类处理异常,可自定义实现ExceptionHandlerComponent
和ResponseSerializerComponent
。 - 需提供
ResponseSerializerComponent
的实现,默认实现简单包裹响应,可根据需要扩展/更改。
重要细节: - 一年前研究时 AWS Lambda 不成熟,处理输入输出 JSON 需注解 POJO。
- Serverless 框架易设置云服务上的无服务器函数,按步骤可生成 Java 项目模板。
- ScaLambda 中
ApiResponse
类是Either[Exception, T]
的别名,方便处理函数中的错误。 - 默认的
DefaultExceptionHandler
和DefaultResponseSerializerComponent
可直接使用或自定义替换。 ResponseSerializerComponent
用于包裹响应消息,默认实现简单包含状态码和数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。