无服务器应用程序通过依赖外部存储服务来处理状态,而不是在运行时环境中维护它。由于无服务器函数在设计上是短暂且无状态的——这意味着每次调用都是全新的开始——请求或函数调用之间需要的任何数据都必须存储在函数本身之外。这通常使用数据库、缓存系统或对象存储来完成。例如,无服务器 API 可能会使用 Amazon DynamoDB 存储用户配置文件,或使用 Azure Cosmos DB 存储会话数据。这些服务提供持久、可扩展的存储,可以持续存在超出单个函数执行的生命周期。
开发人员经常结合使用数据库和缓存层来平衡性能和持久性。对于频繁访问的数据,例如用户偏好或临时会话令牌,分布式缓存(例如通过 AWS ElastiCache 或 Azure Cache 的 Redis)可以减少延迟。对于较大的文件,对象存储服务(例如 AWS S3 或 Azure Blob Storage)很常见。一个实际的例子是一个文件处理应用程序,其中无服务器函数将文件上传到 S3,触发一个包含元数据的数据库条目,并使用缓存来跟踪处理状态。这种分离确保状态在函数重启或扩展事件中幸存下来。
为了跨多个函数或工作流管理状态,使用了事件驱动模式和编排工具。诸如 AWS Step Functions 或 Azure Durable Functions 之类的服务允许链接函数,同时保持上下文。例如,一个电子商务结账流程可能会使用 Step Functions 来跟踪订单的支付、库存检查和发货更新——并将每个步骤的结果存储在共享状态对象中。客户端存储(如 cookies 或令牌)也可以分流状态管理,例如将会话 ID 存储在 JSON Web Token (JWT) 中,服务器根据数据库验证该令牌。这种方法使函数保持轻量级,同时确保一致的状态处理。