InfoQ 最近与 Gojko Adzic 进行了一次访谈,谈到了他最近设计的项目 Claudia.js 。这是一个 JavaScript 工具,能够帮助用户将 Node.js 微服务应用部署至 Amazon Web Service(AWS) Lambda 。Claudia.js 可通过一个单一的命令进行 AWS Lambda 函数与 Web API 的部署、自动处理 IAM 角色传递的等待过程、配置 console.log 的输出以传送至 CloudWatch、并且简化了 AWS Lambda 函数在生产环境、开发环境与测试环境上的版本管理工作。
AWS Lambda 是一种计算服务,它对传入的事件进行响应并运行相应的代码,并且能够自动管理底层的计算资源。AWS Lambda 可自动地运行代码以响应各种事件,例如某个 Amazon S3 bucket 中的数据改动、Amazon DynamoDB 数据表的修改、或是对于 Amazon API Gateway 传入的 HTTP 请求进行响应(此即所谓的“serverless”架构)。
Adzic 是 Neuri Consulting LLP 的合伙人之一,他认为 AWS Lambda 的部署可能会因为牵涉的步骤太多而显得过于复杂。因此他创建了 Claudia.js ,通过这个工具可以简化 Lambda 函数的创建或更新。Claudia.js 不仅支持通过单一的命令部署基于 Node.js 的“微服务”AWS Lambda 应用,还实现了各种复杂任务的自动化,比如它允许将 console.log 的输出传送至 CloudWatch 中,并且对 Amazon API Gateway 资源进行配置,使其行为更符合 JavaScript 开发者的预期。
InfoQ 与 Adzic 进行了一次访谈,谈到了 Claudia.js 的开发过程、创建这门工具的动力和它的目标、以及使用 AWS Lambda 处理生产环境中的实际负载的可行性。
InfoQ:你好 Gojko,感谢你今天能够抽空与 InfoQ 进行这次对话。你能否为我们介绍一下由你创建的新型微服务部署项目 Claudia.js?
Adzic:Claudia.js 能够自动化部署工作流,并且简化了让 JavaScript 代码在 AWS Lambda 中正常运行所必须进行的一些容易出错的任务,让开发者能够专注于解决重要的问题,而无需担任 AWS 服务本身。通过 Claudia 所配置的部署过程是按照 JavaScript 开发者所预期的方式运行的,使这些开发者更适应 Claudia 的使用。在 Claudia 中只需不到 5 分钟就能够创建并部署一个简单的 HTTP 终结点,可以观看这个视频以了解整个过程。
AWS Lambda 与 API Gateway 为用户提供了按需扩展、零运维操作以及几乎免费的执行,按使用量收费的功能。他们确实是在运行服务端代码方面很有力的竞争者。但是,整个配置过程显得过于繁琐,尤其是对于简单的场景来说更为明显。由于其运行时是针对运行 Java 代码而设计的,因此如果用户需要运行 Node.js 功能,就必须解决大量的问题,并且在这方面缺乏良好的文档说明。
Claudia.js 为用户解决了以上所有问题。举例来说,在传统方式下,将一个 JavaScript 方面暴露为 Web API 需要编写约 120 行 shell 脚本,而这一切在 Claudia 中可以由一个单一的命令代替。
InfoQ:Claudia 的总体目标是什么,有哪些方面不属于 Claudia 的目标?举例来说,有关微服务的工具不断涌现,包括 Seneca.js、go-kit 和 Spring Cloud,不过 Claudia 似乎特别专注于应用的部署?
Adzic:目前来说,微服务在云环境上的应用正在蓬勃发展,新的框架与工具不断涌现。你之前提到的工具多数都属于框架的范畴,它们帮助用户逐步实现标准的通信任务、完成工作的分布以及服务发现。这些功能对于我们的使用场景来说有些过度了。我们只希望运行一些简单的东西,例如响应用户的 GET 与 POST 请求、在 S3 中处理文件,或是操作 AWS SQS/SNS 队列中的消息。AWS 服务已经足够完成这些任务了,我们也不介意直接调用这些服务。
在我们从 Heroku 平台进行迁移时遇到了一个大问题,即每次迁移都需要进行大量的样板式的配置工作,这种工作即复杂又容易出错。我们并不想改动组织代码、组织项目、连接到服务以及对 AWS 的功能进行抽象的方式。我们所需的仅仅是让代码能够可靠地、快速地在 Lambda 中运行。
而 Claudia 完全符合我们的目标,它为用户承担了所有重复的配置工作,使代码的配置得到了大大的简化。同时,在将现有的 API 迁移为 Lambda 时,Claudia 几乎不会为用户带来任何负担。它负责收集所有查询字符串、表单提交以及请求头信息,使它们易于在 JavaScript 代码中进行访问。它对于处理流程进行了适当的配置,让其更符合 JavaScript API 的期望,并让用户决定如何通过代码实现所需的功能。
InfoQ:与通过标准的方式将应用部署至 AWS Lambda 相比,使用 Claudia 进行部署有哪些不同?它与由 Mitch Garnaat 所设计的“ Kappa ”工具又有何不同?
Adzic:Claudia 同样使用标准方式将应用部署至 AWS
Lambda 中,它只是将所有样板式的过程实现了自动化。我的想法是不要引入过多的新鲜特性,因此我们使用了标准的 AWS Node.js SDK 以完成所有工作。它能够帮助用户专注于要解决的问题,而无需死记硬背 AWS API 调用的顺序、以及各种必须遵循的安全策略。Kappa 的功能与 Claudia 非常相似,但它是针对 Python 的。此外还有一些针对其他语言的类似的部署工具,例如 Apex 等等。但我并没有找到一种能够很好地处理 JavaScript 的工具。泛用的框架虽然能够支持更多类型的运行时,但必须由开发者负责处理各种特定于语言的问题。当我们尝试在 Lambda 中运行 JavaScript 时,就遇到了大量特定于语言的问题。
Claudia 只支持 JavaScript/Node.js 环境,但它在这方面的表现非常出色。由于 Claudia 专注于 Node.js,因此它能够自动安装各种模板,将参数与结果转换为可以通过 JavaScript 轻松调用的对象,并且使它的工作方式符合 JavaScript 开发者的预期。举例来说,标准的错误报告仍将返回 HTTP 代码 200,这对于 Java 来说并非什么严重的问题,但它会使多数 JavaScript Promise HTTP 库无法正常工作。Claudia 会自动对 API Gatway 进行配置,使其返回 HTTP 500。
InfoQ:你能否描述一下创建 Claudia.js 的动力是什么?它是否是一个大型项目中的一个组成部分?
Adzic:在开发 MindMup 2.0 时,我们开始将后端代码从 Heroku 迁移至 AWS Lambda,为此我们收集了大量的检查清单与故障诊断方面的诀窍,让整个迁移过程更加顺利。而 Claudia 则通过一个易于使用的 API 为用户实现了这些任务的自动化。
今后,我们还计划将所有服务端代码都迁移至 Lambda 上。MindMup 2.0 本质上就是一个单一的 HTML 文件,它通过一个 CDN 服务展现给用户,通过一些后端 API 实现动态功能。这使我们能够轻易地支持大规模的用户使用。
InfoQ:你认为 AWS Lambda 是否已经准备好应用在生产环境中了?如果确实如此,它的典型使用场景又包括哪些?
Adzic:对于我们来说,Lambda 出色地完成了我们所需的功能。但其他项目或许会遇到一些不同的限制,因此“准备好应用在生产环境中”这种说法完全取决于你的上下文。在我看来,它可以成为相对隔离式的服务端处理方式的一种良好的替代产品。在服务端处理中产生一到两秒的延迟没什么问题,但吞吐量、并行执行以及按需伸缩等属性则显得非常重要。这方面的例子包括文件转换、处理用户文件上传、发送通知、调度任务、以及认证或验证。
Lambda 的竞争优势在于无需管理员的干预而实现自动伸缩且按使用量收费。如果代码本身需要大量的管理性工作,那么使用该工具的意义并不大。而如果应用的延误需要限制在微秒级,那么 Lambda(目前来说)或许并非你最佳的选择。
InfoQ:你是否期望用户能够帮助你完善这个项目?如果这样,最好的贡献方式是什么?
Adzic:当然了。Claudia 是一个开源项目,我相信一定有许多其他开发者也在考虑迁移至云代码执行环境。目前来说,它满足了我们所需的一切功能,但如果其他人愿意参与这一项目,我们可以将它改造得适应更广泛的使用场景。项目的代码托管在 GitHub 上,最佳的贡献方式是创建一个 fork 并提交 pull request。该项目的 GitHub 库地址是 https://github.com/claudiajs/claudia 。
InfoQ:再次感谢你能够参与这次谈话。还有哪些内容是你希望分享给 InfoQ 的读者的吗?
Adzic:总的来说,如果你希望创建一些简单的服务,并且运行在 AWS Lambda 中。或者是你正在寻找一些开销较低的、易于上手的工具,并且只希望使用 Node.js 运行时,那么 Claudia 是一个很好的选择。如果你希望使用 SDK、对于服务的分布、分配或是发现功能具有细粒度的控制能力,或是能够支持不同类型的运行时等等,那么建议你去寻找其他的替代工具。
在 Claudia.js 项目的 GitHub 库上可以找到关于该项目的更多信息,Adzic 也创建了一个三分钟的视频“介绍Claudia.js ”,提供了对该工具应用方式的一个高层次的概述。
查看英文原文: Deploying Node.js Microservices to AWS Lambda with Claudia.js: Q&A with Author Gojko Adzic
立即免费注册 AWS 账号,获得 12 个月免费套餐:点击注册
有云计算问题?立刻联系 AWS 云计算专家:立即联系
评论