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


为了不让团队互相影响 , 并且避免巨大的 package.json 和 serverless.yml (CloudFormation 的资源限制数量为 200)以及过长的 CloudFormation 部署时间 , 同时也为了方便我们在代码库中定位 , 并在所有 Lambdas 函数之间明确清晰的团队职责:我们定义了微服务中划分项目的边界 。 Ben Ellerby 在这篇文章中写了一个方法 , EventBridge Storming , 来帮助定义这些界限 。
https://aws.amazon.com/cn/eventbridge/
在我们的单体代码库中:一个微服务 = 一个 CloudFormation 堆栈 = 一个 serverless.yml + package.json 。 此外 , 微服务会属于自己的数据实体 , 这些数据实体不会与其他微服务共享 。
我们早时推荐完全使用 JavaScript , 但出于种种原因 , 你可能想要使用另一种语言 , 或者可能希望逐步迁移到 JavaScript 中的无服务器架构 。 在无服务器架构中 , 微服务的极端优势是你可以在架构中轻松混合多种技术栈 , 同时也能够保持微服务之间的抽象接口的简单性和一致性 。
以事件驱动的方式交流
InfoQ|一个经典的100%无服务器架构在AWS上是什么样?
本文插图

这些微服务需要完全独立 , 如果其中一个微服务出现事故 , 或者我们正在对另一个微服务进行重大改动 , 这对于系统其他部分的影响应该越小越好 。 为实现这个目标 , Lambdas 函数仅通过 EventBridge 这个无服务架构的事件总线来和其他 Lambdas 交流 。 在这篇文章中 ,Ben Ellerby 详细叙述了为什么 EventBridge 用途这么大。
https://medium.com/serverless-transformation/eventbridge-the-key-component-in-serverless-architectures-e7d4e60fca2d
2
详解每一个架构模块
现在我们已经介绍了一些背景知识 , 接下来让我们讲解上面那副令人望而却步的无服务器架构图中的每一个架构模块 , 并且详细介绍在 AWS 中最具有无服务器架构精神的服务 。
前端开发
InfoQ|一个经典的100%无服务器架构在AWS上是什么样?
本文插图

我们优秀的无服务器后端需要以某种方式为前端提供数据 。 为简化与 AWS 耦合的前端开发 , 我们利用了 Amplify 。
https://aws.amazon.com/cn/amplify/
Amplify 囊括了几个不同的东西:一个命令行工具、一个基础架构即代码(IaC)工具、一个 SDK 和一套 UI 组件 。 我们利用前端的 JS 的 SDK 来加快与其他资源(比如用于认证的 Cognito)的集成 , 这些资源通常是通过其他 基础架构即代码工具(比如无服务架构框架)来部署的 。
网站托管
InfoQ|一个经典的100%无服务器架构在AWS上是什么样?
本文插图

如今 , 大多数网站是单页应用(Single Page Application , SPA) , 它们是功能齐全的动态应用程序 , 被打包在一组静态文件中 。 这些文件是在用户的浏览器首次访问 URL 时下载的 。 在 AWS 环境中 , 我们在 S3(一个文件存储服务)中托管这些静态文件 , 并通过 CloudFront(一个内容分发网络 , 即 CDN)来公开 。
https://aws.amazon.com/cn/cloudfront/
话虽如此 , 现在的趋势显然在朝着诸如 Next.js 之类的 (无)服务端渲染(Server Side Rendering , 即 SSR)发展 。 要在无服务器架构中运行一个 SSR 网站 , 我们可以利用 CloudFront 中的 Lambda @ Edge 。 这使我们能够使用尽可能更接近用户端的 Lambdas 函数来进行服务端渲染 。 请查看这篇文章以深入探讨该主题 。
https://www.serverless.com/blog/serverless-nextjs
域名与证书
InfoQ|一个经典的100%无服务器架构在AWS上是什么样?


推荐阅读