无服务器架构用于Web应用程序
无服务器:无需管理服务器即可运行代码
无服务器计算是一种构建应用程序的方式,你完全不需要考虑服务器。你编写代码,上传到云提供商,他们处理所有其他事情——扩展、可用性、安全补丁。你只需为代码实际使用的计算时间付费,而不是为闲置的服务器容量付费。
功能即服务
最常见的无服务器形式是功能即服务(FaaS)。AWS Lambda、Cloudflare Workers、Vercel Functions 以及类似的服务允许您部署响应事件的单独函数。事件可能是 HTTP 请求、文件上传、队列中的消息或定时器。函数运行,完成工作,然后关闭。
这种模式具有令人难以置信的可扩展性。如果一个请求进来,一个函数运行。如果一百万个请求进来,一百万个函数并行运行。您无需预置容量或担心流量峰值——云提供商会自动处理。
冷启动问题
无服务器的主要缺点是冷启动。当一个函数一段时间未被使用时,提供商需要将代码加载到内存并启动运行时,然后才能处理请求。这会给第一个请求增加几百毫秒的延迟。对于面向用户的应用程序,这可能是明显的。
有多种方法可以缓解冷启动。您可以通过定期发送请求来保持函数处于热状态。您可以使用预置并发来保持最小数量的实例就绪。您还可以选择启动更快的运行时——Node.js 和 Python 比 Java 或 .NET 启动更快。一些提供商(如 Cloudflare Workers)通过使用不同的架构几乎消除了冷启动。
何时使用无服务器
无服务器非常适合许多用例。具有可变流量模式的 API 受益于自动扩展。后台任务如图像处理、视频转码和数据转换非常适合无服务器。计划任务如发送每日报告或清理旧数据易于实现。而 Webhook(您需要响应来自外部服务的事件)是天然的匹配。
无服务器不太适合长时间运行的进程(函数通常有 15 分钟的超时限制)、可预测的高流量应用程序(专用服务器可能更便宜)以及需要 GPU 等专用硬件的工作负载。
构建无服务器应用程序
典型的无服务器应用程序使用多个服务一起工作。API 网关接收 HTTP 请求并将其路由到 Lambda 函数。DynamoDB 或 Aurora Serverless 等无服务器数据库存储数据。CDN 提供静态文件。身份验证由 Cognito 或 Auth0 等服务处理。文件存储使用 S3 或类似的对象存储。
像 Serverless Framework 和 SST(Serverless Stack)这样的框架使得定义和部署无服务器应用更加容易。它们提供本地开发环境,处理云资源配置,并简化多环境管理。
