InfoQ|一个经典的100%无服务器架构在AWS上是什么样?


作者 | Xavier Lefèvre
策划 | 万佳
提起无服务器架构 , 它所囊括的内容远远多于 AWS Lambdas 这样的函数即服务(FaaS) 。 Lambdas 如此吸引人有两个原因:自动缩放功能(扩容、减容)以及按使用量计价的模型 。 为了利用这些能力, 并从无服务器架构的优势中获得最大利益, 我们需要其他基础架构组件也具有同样的灵活性 。
在一个 Web 项目中 , 这样的架构是怎么样的呢?
在 Theodo , 我们热爱无服务器架构技术 , 并将这项技术应用到越来越多的项目中 。 今天 ,一些服务和模式开始被行业广泛使用 。 所以 , 我们决定分享 Web 应用的基础架构最佳实践 。 如果你不了解无服务器架构 , 并且希望找到回答这些问题的高级指南 , 那么你就来对地方了!
先来看看这个简单粗暴的全文“剧透”吧!(别担心 , 我们将深入讲解其中各个方面)
InfoQ|一个经典的100%无服务器架构在AWS上是什么样?
本文插图

在上述图表中 ,方框代表的是存在于大多数无服务器架构中的典型并且明确界定的领域或技术功能 。 他们不一定代表微服务或 CloudFormation 术语中的堆栈(Stack)(我们在下文会提到)。
1
我们的实践
我们的目标是拥有一个稳健且完全托管的系统 , 并使开发者拥有舒适的开发体验 。 为了实现这个目标 , 我们选择了:
AWS
云技术的竞争很激烈:亚马逊云服务(AWS)、谷歌云服务(GCP)、微软云服务(Azure)、IBM 云服务、阿里云服务 。 他们都提供了一些令人惊艳的产品 , 并且以前所未有的速度在快速发展 。 Ben Ellerby 在这篇文章中比较了前三名的云服务提供商 , 而我们更青睐于 AWS 的解决方案 。
https://medium.com/serverless-transformation/choosing-the-right-cloud-provider-a-serverless-cloud-atlas-eeae672076ce
在无服务器架构方面 , AWS 是最先进的 。 借助 AWS 的解决方案 , 我们可以尽可能接近无服务器架构 。 为了说明这一点 , 我们将在下文中详细介绍构成我们架构模块的每个 AWS 服务 。
TypeScript 中的 Node
JavaScript 是世界上最受欢迎的编程语言之一 , 因此它有一个庞大的社区!根据 Datadog 的调查 , 无服务器架构的世界中也是如此 。
尽管 Python 以 47%的占有率领先 , 但目前已部署的 Lambdas 中有 39% 是运行 JavaScript 的 。 TypeScript 使该语言更进一步 , 增加了一层额外的保护 。 最后 ,在绝大多数用例中 ,Lambdas 中的 JavaScript 都运行得很好 。
Serverless Framework
无服务器架构框架完成了大部分基础架构即代码(Infrastructure as Code, IaC)的工作(基于 CloudFormation) 。 你定义一个对 HTTP 事件做出响应的 Lambda 函数 , 无服务器架构框架将自动部署相关的 API Gateway 资源、相应的路由以及新的 Lambda 函数 。 当我们达到框架的极限 , 并且需要更复杂的服务配置时 , 我们只需简单地添加一些 CloudFormation 即可。
https://aws.amazon.com/cn/api-gateway/
细粒度的 Lambda 函数
Lambda 是一个函数 , 它有自己的工作任务 , 并且能做得很好 。 我们的前端需要获得一个项目列表吗?为这个功能新建一个 Lambda 函数吧 。 当用户注册后 , 我们需要发送确认电子邮件吗?为这个功能新建另一个 Lambda 函数吧 。 当然 , 某些特定的代码(例如数据实体)可以分解成小的单元 , 并在专用的 utilities 文件夹中共享 。 但一定要非常小心这些代码 , 因为任何更改都会影响所有相关的 Lambda 函数 。 而且因为每个 Lambda 是可以独立测试和部署的 , 因此我们可能会遗漏一些内容(这时 TypeScript 就派上用场了) 。
分解成微服务


推荐阅读