Files
ewoooc/docs/V10.0-OPTIMIZATION-PLAN.md

482 lines
21 KiB
Markdown

# MOMO Pro System V10.0 - 全面優化計畫
> **版本**: V10.0 (計畫版)
> **日期**: 2026-02-14
> **作者**: CIO 辦公室
> **狀態**: 提案中
---
## 一、執行摘要
本計畫旨在將 MOMO Pro System 從當前 V9.4 升級至 V10.0,實現**企業級的穩定性、自動化運維、與商業智慧**能力。
### 核心目標
| 維度 | V9.4 現況 | V10.0 目標 |
|------|----------|-----------|
| **可用性** | 99% | 99.9% (每月最多 43 分鐘停機) |
| **MTTR** | 手動修復 30+ 分鐘 | 自動修復 < 5 分鐘 |
| **部署頻率** | 手動觸發 | 每日自動部署 (GitOps) |
| **監控覆蓋率** | 60% | 100% |
| **環境一致性** | 手動同步 | 自動同步 + 告警 |
---
## 二、現況分析
### 2.1 環境架構
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ 現行雙環境架構 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ UAT 主機 (192.168.0.110) │ │
│ │ 集中式監控與 BI 平台 │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ K8s momo-app│ │ Superset │ │ Metabase │ │ │
│ │ │ momo-sched │ │ (Docker) │ │ (Docker) │ │ │
│ │ │ momo-postgres│ └─────────────┘ └─────────────┘ │ │
│ │ └─────────────┘ │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Grafana │ │ Prometheus │ │Alertmanager │ │ │
│ │ │ (K8s) │ │ (K8s) │ │ (K8s) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ GitLab │ │ Registry │ │ n8n │ │ │
│ │ │ (Docker) │ │ (Docker) │ │ (Docker) │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
│ │ │
│ │ 同步 / 監控 │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ GCP 正式環境 (35.194.233.141) │ │
│ │ 純應用部署 (無監控堆疊) │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ K8s momo-app│ │ momo-sched │ │momo-postgres│ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ │ ⚠️ 監控由 UAT 集中管理 │ │
│ │ ⚠️ BI 服務指向 UAT │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
```
### 2.2 現有問題總結
| 類別 | 問題 | 影響程度 |
|------|------|---------|
| **環境同步** | UAT/GCP 配置偶爾不一致 | 🔴 高 |
| **部署流程** | CI/CD 部署 GCP 需手動觸發 | 🟠 中 |
| **監控告警** | 部分服務缺乏監控 | 🟠 中 |
| **自動修復** | OOM/死鎖等需人工介入 | 🔴 高 |
| **BI 報表** | Superset 圖表配置繁瑣 | 🟡 低 |
| **文檔管理** | CLAUDE.md 過長,難以維護 | 🟡 低 |
| **備份策略** | 缺乏跨區域備份 | 🟠 中 |
---
## 三、V10.0 優化方案
### 3.1 自動化運維 (AIOps)
#### 3.1.1 環境同步機制 ✅ 已實作
```bash
# 每 30 分鐘自動檢查
scripts/auto-repair/env-sync-monitor.sh
# 功能:
# 1. 比對 ConfigMap
# 2. 比對 Pod 版本
# 3. 比對關鍵檔案 checksum
# 4. 自動同步不一致項目
# 5. Telegram 告警
```
#### 3.1.2 智慧自動修復矩陣
| 問題類型 | 偵測方式 | 自動修復動作 | 通知 |
|---------|---------|-------------|------|
| OOM | `K8s OOMKilled` | 增加 memory +50%, 重啟 | ✅ |
| Pod CrashLoop | 重啟 >5 次/小時 | 回滾到上一版本 | ✅ |
| 資料庫死鎖 | pg_stat_activity | 終止長時間查詢 | ✅ |
| 服務無回應 | 健康檢查 502/504 | 重啟 Pod/Docker | ✅ |
| 磁碟空間 | >85% | 自動清理 logs/tmp | ✅ |
| SSL 過期 | 30 天前 | 自動續約 (Certbot) | ✅ |
| 環境不一致 | ConfigMap diff | 自動同步 | ✅ |
| 爬蟲失敗 | 連續 3 次錯誤 | 重啟 scheduler | ✅ |
#### 3.1.3 告警分級與升級機制
```
Level 1 (Info) → Telegram 通知
Level 2 (Warning) → Telegram + 自動修復嘗試
Level 3 (Critical) → Telegram + 自動修復 + Email
Level 4 (Emergency)→ Telegram + 自動修復 + Email + LINE (主管)
```
### 3.2 CI/CD 優化 (GitOps)
#### 3.2.1 完整 Pipeline 流程
```yaml
# .gitlab-ci.yml V10.0
stages:
- test
- security
- build
- deploy-uat
- integration-test
- deploy-gcp
- verify
workflow:
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: always
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: always
test:
stage: test
script:
- pytest tests/ -v --cov=app --cov-report=xml
coverage: '/TOTAL.+?(\d+%)/'
security-scan:
stage: security
script:
- bandit -r . -f json -o bandit-report.json
- trivy image $IMAGE_NAME --severity HIGH,CRITICAL
artifacts:
reports:
sast: bandit-report.json
build:
stage: build
script:
- docker build -t $IMAGE_NAME:$CI_COMMIT_SHA .
- docker push $IMAGE_NAME:$CI_COMMIT_SHA
- docker tag $IMAGE_NAME:$CI_COMMIT_SHA $IMAGE_NAME:latest
- docker push $IMAGE_NAME:latest
deploy-uat:
stage: deploy-uat
script:
- ssh $UAT_HOST "kubectl set image deploy/momo-app momo-app=$IMAGE_NAME:$CI_COMMIT_SHA -n momo"
environment:
name: UAT
url: https://mo.wooo.work
integration-test:
stage: integration-test
script:
- sleep 60
- curl -f https://mo.wooo.work/health
- python tests/integration/test_api.py
needs: [deploy-uat]
deploy-gcp:
stage: deploy-gcp
script:
- gcloud compute ssh $GCP_VM --command="sudo kubectl set image deploy/momo-app momo-app=$IMAGE_NAME:$CI_COMMIT_SHA -n momo"
environment:
name: Production
url: https://momo.wooo.work
needs: [integration-test]
when: manual # 或 automatic
verify:
stage: verify
script:
- ./scripts/auto-repair/env-sync-monitor.sh check
- curl -f https://momo.wooo.work/health
needs: [deploy-gcp]
```
#### 3.2.2 版本管理策略
```
main (v10.0.0)
├── 直接部署到 UAT (自動)
├── 整合測試通過後部署 GCP (自動/手動)
└── 每次部署自動打 Git Tag
develop (開發中)
├── 功能分支合併點
└── PR 必須通過 CI 檢查
feature/* (功能分支)
├── 開發新功能
└── PR → develop → main
```
### 3.3 監控體系升級
#### 3.3.1 監控層級架構
```
┌─────────────────────────────────────────────────────────────────────────┐
│ V10.0 監控體系架構 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ Layer 4: 業務監控 (Business Metrics) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ • 每日業績達成率 • 爬蟲成功率 • 用戶活躍度 │ │
│ │ • 報表產出準時率 • API 回應時間 • 錯誤率 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ Layer 3: 應用監控 (APM) │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ • Flask 請求追蹤 • 資料庫查詢分析 • 爬蟲執行監控 │ │
│ │ • 排程任務狀態 • 外部 API 呼叫 • 錯誤追蹤 (Sentry) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ Layer 2: 容器/K8s 監控 │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ • Pod 狀態/重啟 • 資源使用率 • 部署狀態 │ │
│ │ • 映像版本追蹤 • ConfigMap 變更 • Secret 存取 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ Layer 1: 基礎設施監控 │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ • CPU/記憶體/磁碟 • 網路流量 • 系統負載 │ │
│ │ • SSL 憑證狀態 • DNS 解析 • 外部服務可用性 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
#### 3.3.2 新增監控指標
| 指標類別 | 指標名稱 | 閾值 | 告警等級 |
|---------|---------|------|---------|
| **業務** | 爬蟲成功率 | < 90% | Critical |
| **業務** | 每日業績匯入延遲 | > 30 分鐘 | Warning |
| **業務** | API 平均回應時間 | > 2 秒 | Warning |
| **應用** | Flask 錯誤率 | > 1% | Warning |
| **應用** | 資料庫查詢時間 | > 5 秒 | Warning |
| **容器** | Pod 記憶體使用率 | > 85% | Warning |
| **容器** | Pod 重啟次數 | > 3/小時 | Critical |
| **基礎** | 磁碟使用率 | > 85% | Warning |
| **基礎** | SSL 剩餘天數 | < 30 天 | Warning |
#### 3.3.3 Grafana 儀表板規劃
| 儀表板名稱 | 內容 | 受眾 |
|-----------|------|------|
| **Executive Summary** | KPI 總覽、業績達成率、系統健康度 | 主管 |
| **Operations Dashboard** | 服務狀態、告警列表、最近部署 | 運維 |
| **Application Performance** | API 效能、錯誤追蹤、資料庫效能 | 開發 |
| **Infrastructure Health** | CPU/RAM/Disk、網路、K8s 資源 | 運維 |
| **Crawler Monitoring** | 爬蟲執行狀態、成功率、資料量 | 業務 |
### 3.4 商業智慧 (BI) 強化
#### 3.4.1 Superset 圖表標準化
| 圖表 ID | 圖表名稱 | 類型 | 資料源 |
|---------|---------|------|--------|
| 1 | 品牌銷售額排名 | Bar Chart | monthly_summary_analysis |
| 2 | 月銷售趨勢 | Line Chart | monthly_summary_analysis |
| 3 | 類別銷售佔比 | Pie Chart | monthly_summary_analysis |
| 4 | 銷售數量 Top 15 | Bar Chart | monthly_summary_analysis |
| 5 | 區域銷售分布 | Bar Chart | monthly_summary_analysis |
| 6 | 毛利率趨勢 | Line Chart | monthly_summary_analysis |
| 7 | 瀏覽量趨勢 | Area Chart | monthly_summary_analysis |
| 8 | 每日業績概覽 | Big Number | daily_sales_snapshot |
#### 3.4.2 Metabase 集合整理
```
📊 MOMO 業績分析
├── ⭐ 2026 專業分析儀表板(新版)
│ ├── 即時業績概覽
│ ├── 品牌分析
│ ├── 趨勢分析
│ └── 預測模型
└── 📦 舊版業績分析(已棄用)
└── 歷史資料備份
```
### 3.5 資料備份與災難復原
#### 3.5.1 備份策略 (3-2-1 原則)
| 備份類型 | 頻率 | 保留期限 | 儲存位置 |
|---------|------|---------|---------|
| 資料庫全備 | 每日 02:00 | 30 天 | UAT 本地 |
| 資料庫增量 | 每小時 | 7 天 | UAT 本地 |
| 跨區域備份 | 每日 04:00 | 14 天 | GCS (asia-east1) |
| 配置檔備份 | 每次變更 | 永久 | Git + GCS |
#### 3.5.2 災難復原流程
```
RTO (Recovery Time Objective): 30 分鐘
RPO (Recovery Point Objective): 1 小時
復原流程:
1. 確認災難類型 (UAT 故障 / GCP 故障 / 完全災難)
2. 啟動備用環境或復原程序
3. 從最近備份還原資料庫
4. 驗證服務健康
5. 切換 DNS 或流量
6. 通知相關人員
```
### 3.6 安全強化
#### 3.6.1 安全檢查清單
| 項目 | 當前狀態 | V10.0 目標 |
|------|---------|-----------|
| Fail2Ban | ✅ 已啟用 | 維持 |
| UFW 防火牆 | ✅ 已啟用 | 維持 |
| SSL/TLS | ✅ A+ 評級 | 維持 |
| HSTS | ✅ 已啟用 | 維持 |
| 端口隱藏 | ✅ 僅 80/443/22 | 維持 |
| 程式碼掃描 | ✅ Bandit | 增加 SonarQube |
| 映像掃描 | ✅ Trivy | 維持 |
| WAF | ❌ | 新增 ModSecurity |
| Secret 管理 | K8s Secret | 升級 Vault |
#### 3.6.2 合規性目標
- [ ] ISO 27001 資訊安全管理
- [ ] GDPR 個資保護 (如適用)
- [ ] 定期滲透測試 (每季)
- [ ] 安全意識培訓
### 3.7 文檔與知識管理
#### 3.7.1 CLAUDE.md 重構
```
CLAUDE.md (主文件,簡潔版)
├── 專案概覽
├── 環境架構
├── 帳號密碼
└── 快速指令
docs/
├── ARCHITECTURE.md # 詳細架構說明
├── DEPLOYMENT.md # 部署流程
├── MONITORING.md # 監控告警
├── TROUBLESHOOTING.md # 故障排除
├── API-REFERENCE.md # API 文檔
├── DATABASE-SCHEMA.md # 資料庫結構
├── SECURITY.md # 安全規範
└── CHANGELOG.md # 變更記錄
```
#### 3.7.2 Runbook 建立
| Runbook | 內容 | 適用場景 |
|---------|------|---------|
| Pod OOM 處理 | 診斷步驟、記憶體調整、回滾 | Pod 記憶體不足 |
| 資料庫連線問題 | 連線池檢查、重啟流程 | 連線超時 |
| 爬蟲失敗處理 | 日誌檢查、重試、手動觸發 | 爬蟲異常 |
| CI/CD 失敗處理 | Pipeline 診斷、手動部署 | 部署失敗 |
| SSL 憑證更新 | Certbot 更新、Nginx 重載 | 憑證到期 |
---
## 四、實施計畫
### 4.1 里程碑規劃
| 階段 | 時程 | 交付物 |
|------|------|--------|
| **Phase 1: 基礎穩定** | Week 1-2 | 環境同步機制、自動修復完善 |
| **Phase 2: CI/CD 強化** | Week 3-4 | GitOps 流程、自動化測試 |
| **Phase 3: 監控升級** | Week 5-6 | 新監控指標、Grafana 儀表板 |
| **Phase 4: BI 優化** | Week 7-8 | Superset/Metabase 標準化 |
| **Phase 5: 安全強化** | Week 9-10 | WAF、Vault、合規文檔 |
| **Phase 6: 文檔整理** | Week 11-12 | CLAUDE.md 重構、Runbook |
### 4.2 風險評估
| 風險 | 機率 | 影響 | 緩解措施 |
|------|------|------|---------|
| 環境同步失敗 | 中 | 高 | 雙重驗證機制 |
| 自動修復誤觸發 | 低 | 中 | 保守閾值設定 |
| CI/CD Pipeline 中斷 | 中 | 高 | 手動部署備案 |
| 新監控影響效能 | 低 | 低 | 資源隔離 |
### 4.3 成功指標
| 指標 | 目標值 | 測量方式 |
|------|--------|---------|
| 系統可用性 | 99.9% | Uptime 監控 |
| 平均修復時間 | < 5 分鐘 | 告警到恢復時間 |
| 部署頻率 | 每日 | CI/CD Pipeline |
| 環境一致性 | 100% | 同步檢查結果 |
| 告警準確率 | > 95% | 誤報率分析 |
---
## 五、資源需求
### 5.1 硬體資源
| 項目 | UAT 現況 | V10.0 建議 |
|------|---------|-----------|
| CPU | 4 核心 | 8 核心 |
| RAM | 8 GB | 16 GB |
| SSD | 100 GB | 200 GB |
| 網路 | 1 Gbps | 維持 |
### 5.2 軟體授權
| 軟體 | 類型 | 費用 |
|------|------|------|
| K3s | 開源 | 免費 |
| Prometheus/Grafana | 開源 | 免費 |
| Superset/Metabase | 開源 | 免費 |
| GitLab CE | 開源 | 免費 |
| HashiCorp Vault | 開源 | 免費 |
| ModSecurity | 開源 | 免費 |
### 5.3 人力需求
| 角色 | 投入時間 | 任務 |
|------|---------|------|
| DevOps 工程師 | 50% | 自動化、監控、CI/CD |
| 後端開發 | 30% | API 優化、測試 |
| 資料分析師 | 20% | BI 報表、資料品質 |
---
## 六、附錄
### 6.1 相關文檔
- [AGENTS.md](../AGENTS.md) - Codex 專案入口
- [CONSTITUTION.md](../CONSTITUTION.md) - 專案憲法
- [DEPLOYMENT_WORKFLOW.md](DEPLOYMENT_WORKFLOW.md) - 部署流程
### 6.2 變更記錄
| 日期 | 版本 | 變更內容 |
|------|------|---------|
| 2026-02-14 | Draft | 初版計畫提案 |
---
**文件結束**
*本計畫需經技術評審與管理層核准後實施。*