数据库、对象存储与后台任务

把状态移出应用实例,才能安全重建和扩缩容

云迁易编辑部更新于 2026-07-14内容与审核规范

本地 Demo 经常把 SQLite、上传文件、队列和定时状态放在项目目录。生产环境一旦更换实例、滚动发布或水平扩容,这些隐含状态就会导致数据丢失、任务重复和不同实例看到不同内容。


状态推荐位置不应成为唯一副本的位置
账号、订单、业务记录
托管关系数据库或经过评审的数据库集群
容器文件系统、单机 SQLite
用户上传与原始资料
私有对象存储
Web 服务器上传目录
会话和短期缓存
受控缓存服务,允许过期和重建
应用进程内存作为唯一状态
长任务与重试状态
消息队列或持久化任务表
单进程内队列
模型输出缓存
有 TTL、租户隔离和数据分类的缓存
无期限普通日志

单人低流量工具可以从简单架构起步,但“简单”应意味着托管服务更少、责任更清晰,而不是没有备份、权限和恢复路径。


  1. 每次结构变更使用版本化迁移脚本,并在预生产数据副本演练。
  2. 发布窗口内保持前后版本兼容,优先使用“新增字段—回填—切换读取—移除旧字段”。
  3. 记录锁表时间、磁盘空间、执行耗时和失败后的停止条件。
  4. 在变更前取得可用恢复点,但不要把“有备份”当作脚本回滚方案。
  5. 发布后验证核心读写、约束、索引和后台任务,而不只看迁移命令退出码。

  • Bucket 默认私有,浏览器通过短时、最小范围授权上传或下载。
  • 服务端生成对象键,不直接信任文件名作为目录和权限边界。
  • 限制类型、大小、数量和并发;高风险文件进入隔离扫描流程。
  • 数据库保存对象标识和业务关系,不把永久公开 URL 当作唯一记录。
  • 为误删、版本、归档和生命周期配置恢复策略,并测试对象级恢复。

任务至少要有稳定业务 ID、幂等键、超时、有限重试、退避、死信和人工重放入口。模型 API、邮件、支付和文件转换都可能产生费用或副作用,重试前必须判断操作是否安全。

定时任务在多个实例上运行时要避免重复调度。可以使用云调度服务、具有租约的任务系统,或明确只有一个调度者;不要假设“现在只有一台服务器”会永远成立。


  • 托管数据库备份在隔离实例完成恢复和业务查询。
  • 对象存储随机抽取文件验证内容、元数据、权限和版本。
  • 队列重复投递不会生成两条订单或两次收费请求。
  • 缓存全部清空后,核心业务仍能从权威数据源恢复。

继续阅读:数据库迁移对象存储迁移备份、恢复与版本回滚

Built with