visionA/docs/autoflow/02-prd/nonfunctional.md
jim800121chen fb7da5d180 chore(autoflow): migrate .autoflow/ 共享層文件至 docs/autoflow/
依 autoflow-agent workspace v2 設計把 PRD / 設計 / 架構 / 交付類
共享文件從個人層 .autoflow/(ignored)搬到 docs/autoflow/(進 git),
讓團隊可共享產品與架構文件,個人層只留 progress / review / testing 等
per-branch 筆記。

- 02-prd/        21 個檔(PRD、features、market-analysis 等)
- 03-design/     18 個檔(design-spec、wireframes、flows 等)
- 04-architecture/ 31 個檔(TDD、design-doc、ADR×14、API 規格等)
- 07-delivery/   3 個檔(project-summary、phase-0.6-handover、stage-deployment-setup)

合計 73 檔。原檔已從 .autoflow/ 移除(migration 工具執行 git mv,
但因 .autoflow/ 在 .gitignore 中、git 將此操作視為新增、無 rename history)。
2026-05-04 16:55:55 +08:00

8.4 KiB
Raw Blame History

7. 非功能性需求 — visionA Cloud

父文件:PRD.md


7.1 效能

7.1.1 API 回應時間

端點類型 Phase 0 目標 Phase 1 目標 備註
簡單 API/api/auth/me/api/devices 列表) P95 < 200ms P95 < 100ms 不過 tunnel 的
裝置操作(透過 tunnel P95 < 500ms + tunnel RTT P95 < 300ms + tunnel RTT 含 tunnel 往返
模型上傳100MB P95 < 60 秒 P95 < 30 秒presigned 網路頻寬限制
Pairing 產生 token P95 < 100ms P95 < 50ms

7.1.2 推論效能

指標 Phase 0 目標 Phase 1 目標
Camera 端到端延遲 P95 < 500ms < 350ms
Camera FPS >= 10 fps >= 20 fps視裝置 + 模型)
首次推論啟動時間 < 3 秒 < 2 秒

參考值local-tool本機的 Camera 端到端延遲 ~150-250msvisionA Cloud 多出的部分主要是 tunnel WAN RTT。

7.1.3 Tunnel 效能

指標 Phase 0 目標
Tunnel 建立時間 < 2 秒(含 TLS handshake + yamux handshake
Tunnel 重連時間 < 5 秒(斷線偵測到重連成功)
Tunnel throughput >= 5 Mbps至少能跑 MJPEG 480p
並發 yamux streams per session >= 32

7.1.4 前端效能

指標 Phase 0 目標
首頁 FCP < 2 秒cold load
頁面切換 < 300msApp Router prefetch
WebSocket 訊息處理 < 50ms
MJPEG 畫面渲染 維持 >= 20 fps

7.2 安全性

7.2.1 傳輸加密

  • 必須使用 TLSPhase 1 起強制Phase 0 dev 環境可暫用 http
  • Tunnel 必須用 wss://(不能走明文 WebSocket
  • TLS 版本:>= 1.2,建議 1.3
  • HSTS headerPhase 1 起)

7.2.2 認證與授權

需求 Phase 0 Phase 1
使用者登入 Stub不安全 JWT + bcrypt
Session 管理 記憶體 token Redis + rotation
Pairing Token 安全 一次性 + 15min TTL + DB hash 儲存 + rate limit
Session Token 安全 純字串存記憶體 + DB hash + 撤銷機制 + rotation
API Rate Limiting 不做 必做Auth 相關 endpoint
CSRF 防護 cookie-only SameSite=Strict cookies
XSS 防護 React 自動轉義 + CSP header

7.2.3 資料隔離

Phase 0 即須滿足

  • 使用者 A 不能看到使用者 B 的裝置、模型、叢集
  • 所有 API endpoint 必須檢查 resource 的 owner_user_id vs current user
  • WebSocket 連線也要做同樣檢查

7.2.4 敏感資料保護

資料 處理方式
密碼 Phase 0 不存stub 只記 in-memoryPhase 1 bcrypt
Session Token 不 log 出來
Pairing Token 產生後 只顯示一次後端不可再查明文Phase 1 存 hash
使用者模型檔 存在 ObjectStorage需 user 授權才能下載
推論影像 / 結果 Phase 0 不儲存Phase 1 如有儲存需加密

7.2.5 依賴套件安全

  • Gogo mod audit(或 Snyk每月掃一次
  • Nodenpm audit 每週掃一次
  • Docker 映像:每月重 build 套新 base image
  • 漏洞回應 SLACritical 1 週修High 2 週修

7.3 可擴展性Scalability

7.3.1 Phase 0 定位:可跑得動就好

  • 單機部署 OK
  • 支援 ~10 同時使用者、~20 裝置同時在線
  • 狀態 in-memory重啟就沒了

7.3.2 Phase 1 定位:支援 100 人同時使用

  • 接 PostgreSQL 作 persistent store
  • 接 Redis 作 session store / tunnel session map跨 api-server instance 共享)
  • api-server 可水平擴展stateless
  • remote-proxy 仍然有狀態tunnel session 在記憶體),但可用 consistent hashing 分散

7.3.3 Phase 2+ 定位:支援 1000+ 使用者

  • Multi-region 部署
  • CDN 前置
  • S3 / MinIO 大檔儲存
  • remote-proxy 支援 session migration裝置換一個 proxy 節點不會斷)

7.3.4 架構預留

Phase 0 就要預留的擴展點

  • 狀態抽象SessionStore 介面)→ 換 Redis 不動業務邏輯
  • AuthProvider 介面 → 換真實 Auth 不動業務邏輯
  • ObjectStorage 介面 → 換 S3 不動業務邏輯
  • api-server 儘量 stateless除了 Auth 快取)
  • config-driven環境變數 / YAML

7.4 可用性Availability

7.4.1 Phase 0 SLO內部使用

指標 目標
api-server uptime 95%(有 bug 接受)
remote-proxy uptime 99%(影響面大,較嚴)
前端可訪問 99%CDN

7.4.2 Phase 1 SLO外部早期採用者

指標 目標
Overall uptime 99%(月最多 7 小時 downtime
Tunnel session 存活率 99.5%
API 成功率 99.5%

7.4.3 降級策略

Tunnel 斷線時

  • 前端顯示「裝置離線」狀態,推論頁面明確提示
  • 自動重連(指數退避)
  • 不要讓整個 session 失效

Backend 崩潰時

  • 前端顯示「服務暫時無法使用」Offline Overlay沿用 local-tool 的 pattern
  • WebSocket 自動重連
  • 使用者重新整理頁面即可恢復

Converter API 不可用時Phase 2

  • 轉檔功能暫時不可用,但其他功能不受影響
  • UI 顯示「轉檔服務暫時中斷」

7.4.4 Graceful Shutdown

api-server / remote-proxy 關機時:

  • 不再接受新連線
  • 已有連線完成後才關
  • 廣播 system.shutdown-imminent WebSocket 事件讓前端做準備
  • (沿用 local-tool 的 /api/system/shutdown-notify pattern

7.5 可觀測性Observability

7.5.1 Phase 0 最小要求

  • 結構化 logJSON 格式,含 user_id / request_id / device_id
  • log levelINFO / WARN / ERROR / DEBUG
  • 記錄每個 API 請求method、path、status、duration、user_id
  • 記錄每個 tunnel session 生命週期事件(建立、斷線、重連)

7.5.2 Phase 1 加強

  • MetricsPrometheus 格式
    • HTTP 請求數 / 延遲分佈 by endpoint
    • Tunnel session 數 by status
    • 推論請求數 by user / device
    • 錯誤率 by endpoint
  • TracingOpenTelemetry跨 api-server ↔ remote-proxy ↔ agent 的 trace
  • DashboardsGrafana關鍵指標視覺化
  • Alerting錯誤率異常、tunnel 大量斷線等

7.5.3 Phase 2 加強

  • 使用者層級的 analytics需尊重 privacy
  • Business metricsWAD、Pairing conversion、推論量

7.6 相容性與支援

7.6.1 瀏覽器支援

瀏覽器 支援版本
Chrome 最新 3 個版本
Firefox 最新 3 個版本
Safari 最新 2 個版本
Edge 最新 3 個版本
IE 不支援

7.6.2 Local Agent 支援

平台 支援版本
macOS 14+ (x86_64)
Windows 10+ (x64)
Linux Ubuntu 22.04+ (x86_64)
ARM Phase 0 不支援local-tool 限制)

7.6.3 多語系i18n

  • Phase 0繁體中文 + English沿用 local-tool
  • Phase 2加簡體中文、日文

7.6.4 無障礙a11y

  • Phase 0沿用 local-tool 的 a11y 水準Radix UI 內建 a11y
  • 基本要求:鍵盤操作可行、重要元素有 aria-label
  • Phase 1做 WCAG 2.1 AA 自動化測試axe-core

7.7 部署與維運

7.7.1 部署方式

Phase 0

  • Docker Compose 本機啟動
  • 兩個 containerapi-server + remote-proxy
  • 前端靜態部署Vercel / Netlify / S3+CloudFront
  • 儲存local filesystem

Phase 1

  • 仍以 Docker 為主
  • 加上 PostgreSQL + Redis
  • Cloud-agnosticAWS / GCP / self-hosted 皆可)
  • 加 ALB / Cloud LB

Phase 2

  • Kubernetes如有需要多節點
  • Multi-region

7.7.2 CI/CD

  • Phase 0手動 build + deployGitHub Actions on main push 可選)
  • Phase 1GitHub Actions每 PR 跑測試merge 自動 deploy 到 staging
  • Phase 2Blue/green deployment

7.7.3 Backup

  • Phase 1 起DB 每日 backup保留 30 天
  • 模型檔S3 有 versioning

7.8 法規與合規Phase 1+ 才認真處理)

Phase 0 內部使用不需要。Phase 1 外部開放前要完成:

  • Terms of Service
  • Privacy Policy明列哪些資料被收集、如何使用
  • Cookie Policy有用 cookie
  • GDPR如果要對歐洲用戶開放
  • 台灣個資法(主場市場)

連結