基于传统服务端部署方案的ssr服务,想要构建一个可以抗住高并发的系统,常会有以下痛点:
类别 | 具体问题 |
---|---|
性能瓶颈 | • 服务端渲染消耗大量cpu与内存 • 数据库连接数限制 • 静态资源和动态请求混合,导致负载不均衡 |
扩容挑战 | • 手动配置扩容缩容策略 • 多实例,额外的负载均衡 • 扩容过程可能影响用户体验 • 冷启动时间 |
成本问题 | • ec2实例,按时计费 • 应对高峰需要预留足够资源 • 多可用区部署成本 • 运维人员投入成本 |
目前的常规serverless平台如(vercel、netlify),基本解决了上述问题,他们提供了:
对于小型的应用,使用vercel、netlify是不错的选择。它不但提供了快速开发部署的能力,还可以减少大量的成本(按量付费,运维)。
虽然这些平台已经非常优秀,但对于企业级应用,他们仍然存在一些问题:
局限性类型 | 具体问题 |
---|---|
安全与依赖 | • 需要暴露源码给平台,安全性不可控 • 平台锁定 • 费用不低,高级功能按需付费,跨地区部署产生额外费用 |
技术限制 | • 函数执行时长限制(Vercel为10秒,Netlify为10分钟) • 函数内存限制(Vercel为1GB,Netlify为1.5GB) • 部署包大小限制(通常在50MB-100MB之间) • Lambda层打包大小限制 • 冷启动延迟(可能达到几百毫秒) • WebSocket支持有限 • 某些Node.js原生模块可能不兼容 |
扩展性限制 | • 跨函数通信效率较低 • 长连接支持不够理想 • 无法直接访问某些底层系统资源 • 数据持久化依赖外部服务 • 自定义运行时受限 • 无法运行某些特殊的系统服务 |
怎么解决上述平台的问题,又能享受serverless带来的便利呢?直接使用aws lambda架构实现。上述的serverless平台其实它们底层都是基于aws lambda进行深度封装的,我们可以直接使用aws lambda来构建自己的serverless架构。既可以享受serverless带来的便利,对于定制化需求,也可以更好的实现。
优势类别 | 具体特点 |
---|---|
技术规格限制 | • 内存:128MB-10GB可选择 • 执行时间:最长15分钟 • 部署包:50MB(直接上传),250MB(包含层) • 支持自定义运行时 • 可以使用容器镜像 • 完整的VPC网络配置能力 |
架构灵活度 | • 可与多种AWS服务集成 • 自定义Layer • 更多触发器、编排函数 • 适用于复杂后端服务 |
安全与稳定性 | • 代码本地管理,只需要构建产物上传 • 完整的IAM权限控制 • 可使用私有API网关 • 支持自定义SSL证书 • 监控和告警更完整 • 问题排查能力更强 |
费用类型 | 计算方式 | 金额(USD) |
---|---|---|
计算费用 | 100000秒 × $0.00000625125/128MB-秒 | $0.63 |
请求费用 | 10M请求 × $0.60/M | $6.00 |
总费用 | 计算费用 + 请求费用 | $6.63/月 |
费用类型 | 计算明细 | 金额(USD) |
---|---|---|
计算费用 | (540000 GB-s - 400000免费GB-s) × $0.0000166667 | $2.33 |
请求费用 | (300万请求 - 100万免费请求) × $0.20/M | $0.40 |
总费用 | 计算费用 + 请求费用 | $2.73/月 |
显然,如果要构建企业级应用,无论从安全性,架构灵活性,成本上看,aws lambda都是更好的选择。
场景 | 推荐方案 | 原因 |
---|---|---|
小型应用 | Vercel/Netlify | • 开发效率高 • 运维成本低 • 快速部署 |
企业应用 | AWS Lambda | • 安全性高 • 可定制性强 • 成本可控 |
高并发场景 | AWS Lambda | • 自动扩缩容 • 性能稳定 • 成本优势 |
Q: Serverless适合所有类型的应用吗? A: 不是。以下场景可能不适合:
目前讨论的是如何基于serverless架构进行选型。你可能会有疑问,如果我的服务是一个传统架构的服务,比如nestjs服务,我怎么才能利用serverless架构的优势?需要完全重构么?
其实不需要完全重构。服务的lambda化,侵入性很低。
那么怎么搭建/改造一个 nestjs 后端服务成为一个基于aws lambda 的 serverless 架构的服务?
下一章,介绍如何搭建一个基于 aws lambda 的 nestjs 后端服务。
如果您有任何问题、建议或合作意向,欢迎通过此表单与我联系。我会尽快回复您的留言。