Skip to content

第十站练习答案 ​

返回纵览 | 专题一 | 专题二

ADR 示例 ​

text
Decision: 当前工单台使用 WSGI。
Context: 请求均为短同步 CRUD;数据库驱动与中间件为同步;没有长连接。
Consequences: 部署路径成熟,阻塞调用边界清楚;未来真实长连接需求需重新评估 ASGI。
Rejected: 仅因 Django 支持 async 就切 ASGI;没有测量到收益,反而扩大混合栈。

连接预算 ​

4 个 worker × 每 worker 10 条连接 = 应用侧理论 40 条。还要为迁移、管理、任务 worker、监控和故障恢复预留连接,并确认数据库硬上限。池大小不是越大越好;它会把排队从应用搬到数据库。

可回滚迁移 ​

如果本次只做向后兼容的新增列/表,保留 schema,回滚到旧应用并停止新批次;不要机械反向迁移删除新列。确认旧应用不会读取新状态,暂停不兼容后台任务,保留发布与数据校验记录。

bash
python manage.py showmigrations
python manage.py migrate --plan
python manage.py check --deploy

专题二核对 ​

  • 静态文件名带内容哈希,并让旧制品至少存活到所有旧 HTML 缓存过期;回滚时继续提供旧哈希资源。
  • 数据库失败让 readiness 返回非 2xx,使代理停止分流;liveness 仍反映进程是否活着,避免依赖故障制造重启风暴。
  • 发布证据至少记录制品摘要、迁移计划、配置版本、探针结果、业务冒烟、指标窗口、决策人和回滚时间点。

深水边界 ​

真正不可逆的数据变换需要备份、前进修复或业务补偿。迁移文件中的 reverse 函数存在,也不代表业务数据能无损回到旧语义。

开放练习(不提供答案) ​

在干净环境从备份恢复数据库,部署旧版本和新版本分别执行只读校验;记录恢复时间、缺失数据窗口和人工步骤。

返回 Django 课程首页 | 返回学习路线

加码题解:部署、探针与升级证据 ​

python
def probe_status(*, database_ok, cache_ok):
    return {
        'live': True,
        'ready': database_ok and cache_ok,
        'dependencies': {'database': database_ok, 'cache': cache_ok},
    }

关键推理 ​

liveness 与 readiness 分开,依赖故障时摘流而不是盲目重启。

可替代方案 ​

部署平台可把探针、迁移计划、版本 SHA 和 smoke test 绑定成一次发布证据。

典型错误 ​

先切流量再迁移,或启用 HSTS 后没有回滚与域名迁移预案。

复盘时请把状态码/事务/权限/资源清理中的至少一项写成自动化测试,而不是只截图成功页面。

用心记录每一步成长