Files
xiaoxia-saas/packages
saas-backend-agent 1a917a3472
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 47s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m56s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 2m21s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 2m47s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m11s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 3m35s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 6m23s
AI Code Review / AI Code Review (pull_request) Successful in 6m36s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 8m57s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 12m37s
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Style (pull_request) Has been cancelled
feat(p1): OSS 双 endpoint 分离 — 上传/下载走 VPC 内网,签名 URL 走公网
问题:
- 116 是阿里云杭州 ECS,之前 oss_endpoint=oss-cn-hangzhou.aliyuncs.com(公网),
  worker 上传/下载 OSS 走公网卡到 0.3~0.7 MB/s,mezzanine 上传 104s + 成片上传 55s,
  吃掉 160s+ 渲染耗时。
- oss_helpers 自己维护一套 bucket 实例,和 SharedStorageService 重复实现,且
  normalize_storage_key 没做 URL decode(unquote),带编码字符的 key 签名出来
  返回 403,触发 _verify_url_accessible 2 次重试延迟。

改造:
1. config/base.py 新增 oss_internal_endpoint 配置项 + effective_oss_internal_endpoint
   属性:阿里云公网域名(oss-cn-<region>.aliyuncs.com)自动推导 -internal 内网
   域名,显式配置可覆盖;非阿里云/MinIO 回退公网。
2. packages/shared/storage.py 维护两个 bucket:
   - self.bucket:internal endpoint(VPC 千兆带宽),SDK 上传/下载/删除/exists
   - self.public_bucket:public endpoint,仅用于 sign_url 生成公网可访问 URL
   public_url 永远拼公网域名,对外不可感知。
3. apps/worker/video_processing/oss_helpers.py 收敛为 SharedStorageService 的
   薄 wrapper(-226 行),保留所有旧函数签名兼容现有调用:
   - oss_bucket() 返回 internal bucket
   - upload_to_oss/download_asset/delete_from_oss 转发到 storage 走 internal
   - get_signed_download_url 转发到 storage.get_download_url 用 public_bucket 签名
   - resolve_asset_path 转发到 storage 统一逻辑
4. normalize_storage_key 统一 unquote,修复签名 403。
5. config/api_settings.py 增加 OSS_INTERNAL_ENDPOINT 属性方便诊断。

预期效果:
- OSS 上传/下载从 0.3~0.7 MB/s → VPC 千兆(~100 MB/s),两段上传 160s 压到 <3s
- 签名 URL 不再 403,_verify_url_accessible 首试即过,不再重试
- 整体渲染耗时目标 <30s(GPU 编码链路 ~10s + OSS 传输 <5s + 合成/封面 <15s)
- 前端/P4000/MediaKit 外网访问 OSS 完全不变(public_url 仍是公网域名)
2026-09-28 09:58:33 +08:00
..