Skip to main content

Lion Travel - GlobeConnect Product Hub 系統總覽

完整的 B2C 旅遊產品平台架構文件 - 中央與區域雙層架構

最後更新: 2026-02-07


📚 目錄​

  1. 系統概述
  2. 架構理念:中央與區域
  3. 專案架構圖
  4. 核心專案詳解
  5. 技術棧總覽
  6. 資料流與整合
  7. 部署架構
  8. 開發流程
  9. 團隊協作

系統概述​

GlobeConnect Product Hub (GPH) 是 Lion Travel 的全球化 B2C 旅遊產品平台,採用中央與區域雙層架構,實現全球產品資源的統一管理與區域化運營。

核心目標​

  1. 中央化產品採購 - 從外部供應商(如 SERP)統一採購產品
  2. 區域化產品運營 - 各區域站點(TW, US, JP)獨立管理與銷售
  3. AI 增強產品內容 - 多語言翻譯與描述優化
  4. 全球訂單交換 (GOX) - 跨區域訂單協作系統

關鍵特性​

  • ✅ 雙層架構 - 中央 (Central) + 區域 (Regions)
  • ✅ 多語言支援 - en-US, zh-TW, ja-JP
  • ✅ 多幣別定價 - 支援 12+ 種貨幣動態轉換
  • ✅ 高效能搜尋 - Elasticsearch 全文搜尋(區域層)
  • ✅ 事件驅動架構 - Webhooks + Domain Events
  • ✅ 整潔架構 - DDD + CQRS + Clean Architecture
  • ✅ 容器化部署 - Docker + GitLab CI/CD

架構理念:中央與區域​

為什麼需要雙層架構?​

中央層 (Central)
├─ 統一採購產品資源
├─ AI 資料豐富化
└─ 分發到各區域

區域層 (Regions: TW, US, JP, HK...)
├─ 本地化產品內容
├─ 區域定價與促銷
├─ 本地化客戶服務
└─ 區域法規遵循

職責劃分​

層級職責專案
中央 (Central)產品採購、資料豐富化、全球分發GlobalHub + GlobalHub API
區域 (Regions)產品管理、搜尋服務、訂單處理ProductsAPI + ProductBackend

專案架構圖​

整體系統架構​

┌─────────────────────────────────────────────────────────────────┐
│ 中央層 (Central) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────────────────────┐ │
│ │ SERP API │────────▶│ GlobalHub API │ │
│ │ (外部供應商) │ 產品資料 │ (.NET 10) │ │
│ │ │ │ - 匯入 SERP 產品 │ │
│ └──────────────┘ │ - AI 資料豐富化 │ │
│ │ - 分發到各區域 │ │
│ └──────────┬───────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────┐ │
│ │ GlobalHub │ │
│ │ (Next.js 16) │ │
│ │ - 中央 B2C 前台 │ │
│ │ - 產品展示 │ │
│ └──────────────────────────────┘ │
│ │ │
└──────────────────────────────────────┼──────────────────────────┘
│
同步產品到各區域 (Webhook/Scheduled)
│
┌──────────────────┼──────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────────┐
│ 區域層 (Regions: TW, US, JP) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ ProductsAPI (TW/US/JP) │ │
│ │ (.NET 10 + PostgreSQL + Elasticsearch + Redis) │ │
│ │ - 區域產品目錄 │ │
│ │ - Elasticsearch 搜尋 │ │
│ │ - 訂單管理 │ │
│ │ - 金流整合 │ │
│ └──────────────────────┬───────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ ProductBackend (TW/US/JP) │ │
│ │ (Next.js 16 + shadcn/ui) │ │
│ │ - 區域 CMS 管理後台 │ │
│ │ - 產品內容編輯 │ │
│ │ - 本地化設定 │ │
│ └──────────────────────┬───────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────┐ │
│ │ 區域 B2C 前台 │ │
│ │ (終端消費者網站) │ │
│ └────────────────────┘ │
│ │
└──────────────────────────────────────────────────────────────────┘

完整資料流架構​

┌─────────── 上游同步 ───────────┐
│ │
▼ │
SERP API (外部供應商) │
│ │
│ 1. 產品資料(團體旅遊、票券) │
▼ │
GlobalHub API (中央匯入服務) │
│ │
│ 2. 資料處理 │
│ - 驗證與轉換 │
│ - AI 豐富化(多語言翻譯) │
│ - 儲存到中央資料庫 │
▼ │
中央資料庫 (PostgreSQL) │
│ │
│ 3. 展示 │
▼ │
GlobalHub (中央 B2C 前台) │
│
┌─────────── 下游同步 ───────────┘
│
│ 4. 推送到各區域
│
├────────────────┬────────────────┬────────────────┐
│ │ │ │
▼ ▼ ▼ ▼
ProductsAPI TW ProductsAPI US ProductsAPI JP ...
│ │ │
│ 5. 區域處理 │ │
│ - 同步產品 │ │
│ - 索引到 ES │ │
│ - 本地化 │ │
▼ ▼ ▼
ProductBackend ProductBackend ProductBackend
│ │ │
│ 6. CMS 編輯 │ │
│ - 內容調整 │ │
│ - 定價設定 │ │
▼ ▼ ▼
區域 B2C 前台 區域 B2C 前台 區域 B2C 前台
│ │ │
│ 7. 終端使用者 │ │
▼ ▼ ▼
👥 TW 客戶 👥 US 客戶 👥 JP 客戶

核心專案詳解​

中央層專案​

1. 🌐 GlobalHub (中央 B2C 前台)​

技術: Next.js 16 + React 19 + Tailwind CSS 4

職責:

  • 中央站點的 B2C 客戶端產品展示
  • 多語言界面(中央層面向全球)
  • 多幣別價格顯示
  • 購物車與訂單流程

特色:

  • Server-Side Rendering (SSR)
  • Static Site Generation (SSG)
  • Image Optimization
  • SEO 優化

定位: 中央管理的全球產品展示平台

GitLab: liongroup/liontech/lionglobal/b2c/globalhub


2. ⚙️ GlobalHub API (中央匯入與分發服務)​

技術: .NET 10 + PostgreSQL + Hangfire

核心職責:

A. 上游同步 (SERP → GlobalHub)

  • 從 SERP API 匯入產品資料
  • 資料驗證與轉換
  • AI 資料豐富化(多語言翻譯、描述優化)
  • 儲存到中央資料庫

B. 下游同步 (GlobalHub → 各區域)

  • 推送產品到 ProductsAPI (TW/US/JP)
  • 區域化資料轉換
  • 批次同步與錯誤處理

架構:

  • Domain-Driven Design (DDD)
  • Clean Architecture
  • CQRS (部分實作)
  • Result Pattern (錯誤處理)

同步機制:

  • ✅ Webhook (即時推送)
  • ✅ 定時輪詢(全量/增量)
  • ✅ 手動觸發
  • ✅ 冪等性設計
  • ✅ 重試與斷路器(Polly)
  • ✅ 死信佇列

主要 API:

  • POST /products/import - 啟動 SERP 匯入任務
  • GET /products/import/{jobId} - 查詢匯入狀態
  • POST /webhooks/serp - 接收 SERP Webhook
  • POST /regions/{code}/sync - 同步到特定區域
  • GET /health/sync - 同步健康檢查

詳細設計: GlobalHub 同步架構

GitLab: liongroup/liontech/lionglobal/b2c/globalhubapi


區域層專案​

3. 🏢 ProductsAPI (區域產品服務核心)​

技術: .NET 10 + PostgreSQL + Elasticsearch 8.11 + Redis + Hangfire + Wolverine

定位: 區域站點 (TW/US/JP) 的產品核心服務

職責:

  • 接收來自 GlobalHub API 的產品同步
  • 區域產品目錄管理 (Vouchers + Package Tours)
  • 高效能全文搜尋(Elasticsearch)
  • 多幣別價格轉換(區域化)
  • 多語言內容管理(區域化)
  • 訂單管理 (本地 + 跨站)
  • 金流整合 (Stripe, Elavon, Moneris)
  • Webhook 事件發布

架構:

  • Clean Architecture (Domain / Application / Infrastructure / Presentation)
  • CQRS with Wolverine Messaging
  • Event-Driven Architecture
  • Multi-Site Database Design

資料庫:

  • productsdb (ApplicationDbContext) - 產品目錄,區域內共享
  • stationorderdb (StationOrderDbContext) - 訂單資料,站點本地

主要 API:

  • POST /products/sync-from-globalhub - 接收中央同步 ⭐
  • GET /products - 搜尋產品
  • GET /products/{id} - 產品詳情
  • POST /bookings - 建立訂位
  • GET /tours/{id}/departures - 可用出發日期
  • POST /webhooks/* - Webhook 端點

GitLab: liongroup/liontech/lionglobal/b2c/productsapi


4. 🎛️ ProductBackend (區域 CMS 管理後台)​

技術: Next.js 16 + React 19 + shadcn/ui + Zustand

定位: 區域站點 (TW/US/JP) 的內容管理系統

職責:

  • 區域產品內容管理
  • 區域化編輯(語言、幣別、定價)
  • 首頁內容編輯 (整合 ApostropheCMS)
  • 多語言內容編輯
  • 多幣別定價設定
  • 媒體上傳管理(AWS S3)
  • AI 聊天輔助

核心功能:

  • 產品 CRUD(基於同步自 GlobalHub 的產品)
  • 行程編輯器
  • 套餐編輯器
  • 費用項目編輯器
  • 旅客欄位設定
  • CMS Widget 編輯

與 GlobalHub 的關係:

  • ProductBackend 管理的產品來源於 GlobalHub API
  • 區域營運人員可以調整本地化內容
  • 不直接匯入外部產品(由 GlobalHub API 負責)

GitLab: liongroup/liontech/lionglobal/b2c/productbackend


技術棧總覽​

中央層技術​

專案框架資料庫背景任務備註
GlobalHubNext.js 16--中央 B2C 前台
GlobalHub API.NET 10PostgreSQLHangfire匯入與分發服務

區域層技術​

專案框架資料庫搜尋引擎背景任務
ProductsAPI.NET 10PostgreSQLElasticsearch 8.11Hangfire
ProductBackendNext.js 16---

前端技術​

專案框架UI 庫狀態管理樣式
GlobalHubNext.js 16React 19-Tailwind CSS 4
ProductBackendNext.js 16React 19 + shadcn/uiZustandTailwind CSS 4

後端技術​

專案框架架構模式訊息處理背景任務
GlobalHub API.NET 10DDD + Clean Arch-Hangfire
ProductsAPI.NET 10DDD + Clean Arch + CQRSWolverineHangfire

資料儲存​

技術用途使用專案
PostgreSQL主資料庫GlobalHub API (中央), ProductsAPI (各區域)
Elasticsearch 8.11全文搜尋ProductsAPI (各區域) ⭐
Redis快取層ProductsAPI (各區域)
AWS S3圖片儲存ProductsAPI (各區域)

DevOps​

工具用途
Docker容器化
GitLab CICI/CD 流程
Seq結構化日誌
Hangfire Dashboard背景任務監控
Prometheus + Grafana同步監控(GlobalHub API)

資料流與整合​

1. 產品完整生命週期​

┌──── 產品採購階段 (中央) ────┐
│ │
│ 1. SERP API │
│ ↓ 提供產品資料 │
│ 2. GlobalHub API │
│ ├─ 匯入任務 │
│ ├─ 資料驗證 │
│ ├─ AI 豐富化 │
│ └─ 儲存中央資料庫 │
│ ↓ │
│ 3. GlobalHub (前台) │
│ └─ 中央站點展示 │
│ │
└─────────────────────────────┘
│
│ 推送同步
▼
┌──── 產品區域化階段 (區域) ────┐
│ │
│ 4. ProductsAPI (TW/US/JP) │
│ ├─ 接收同步資料 │
│ ├─ 儲存區域資料庫 │
│ ├─ 索引到 Elasticsearch │
│ └─ 本地化處理 │
│ ↓ │
│ 5. ProductBackend (CMS) │
│ ├─ 營運人員編輯 │
│ ├─ 調整定價 │
│ ├─ 本地化內容 │
│ └─ 設定促銷 │
│ ↓ │
│ 6. 區域 B2C 前台 │
│ └─ 終端客戶瀏覽購買 │
│ │
└───────────────────────────────┘

2. 上游同步流程 (SERP → GlobalHub)​

詳見:GlobalHub 同步架構

觸發方式:

  • Webhook (即時)
  • 定時輪詢
    • 全量同步: 每天 02:00 AM
    • 增量同步: 每小時
    • 價格同步: 每 15 分鐘
  • 手動觸發

處理流程:

SERP API
↓ HTTP JSON
GlobalHub API (SerpApiClient)
↓ 驗證
SerpProductMapper
↓ 轉換
ProductEnrichmentService (AI)
↓ 豐富化
ImportProductsJob (Hangfire)
↓ 批次儲存
中央 PostgreSQL

3. 下游同步流程 (GlobalHub → 各區域)​

同步策略:

  • 全量同步: 每天凌晨 3-5 AM (各區域錯開)
  • 增量同步: 每 30 分鐘
  • 即時同步: Webhook 觸發

處理流程:

GlobalHub API (RegionSyncService)
↓ 批次處理 (50個/批)
├─ TW: POST https://tw.productsapi.liontravel.com/api/products/sync-from-globalhub
├─ US: POST https://us.productsapi.liontravel.com/api/products/sync-from-globalhub
└─ JP: POST https://jp.productsapi.liontravel.com/api/products/sync-from-globalhub
↓
ProductsAPI (SyncFromGlobalHubCommandHandler)
↓ 冪等性處理
├─ 檢查 GlobalHubProductId
├─ 更新 or 新增
├─ 儲存 PostgreSQL
└─ 同步 Elasticsearch

4. 產品搜尋流程 (區域層)​

區域 B2C 前台 (TW/US/JP)
↓ 使用者搜尋
ProductsAPI (TW/US/JP)
↓ GET /products?search=bali&currency=JPY&locale=zh-TW
├─ Elasticsearch 搜尋 ⭐
├─ PostgreSQL 取得詳細資料
├─ 多幣別價格轉換
└─ 多語言內容過濾
↓ JSON Response
區域 B2C 前台
└─ 顯示搜尋結果

5. 訂單建立流程 (區域層)​

使用者選擇產品 (區域 B2C 前台)
↓
ProductsAPI (區域)
↓ POST /bookings
├─ 檢查可用名額
├─ 鎖定座位
├─ 建立訂單 (stationorderdb)
└─ 發布 BookingCreated 事件
↓
金流處理
└─ Stripe Payment Link
↓ Webhook 回調
訂單確認

部署架構​

區域層 Docker Compose 配置 (ProductsAPI 範例)​

services:
product-api:
image: webapi
ports:
- 5050:8080
environment:
- ConnectionStrings__Database=Host=postgres;...
- Elasticsearch__Uri=http://elasticsearch:9200
depends_on:
- postgres
- redis
- elasticsearch

postgres:
image: postgres:17
ports:
- 5432:5432
volumes:
- ./.containers/db:/var/lib/postgresql/data

redis:
image: redis:7-alpine
ports:
- 6380:6379

elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
environment:
- discovery.type=single-node
- xpack.security.enabled=false
ports:
- 9201:9200
volumes:
- ./.containers/elasticsearch:/usr/share/elasticsearch/data

seq:
image: datalust/seq:2024.3
ports:
- 8081:80

環境分離​

環境層級分支域名範例
Development中央 + 區域developlocalhost:*
Staging中央 + 區域staging*.107.liondev.work
Production中央mainglobalhub.liontravel.com
Production區域 TWmaintw.liontravel.com
Production區域 USmainus.liontravel.com
Production區域 JPmainjp.liontravel.com

開發流程​

本地開發環境設定​

中央層​

1. GlobalHub (中央前台)

cd globalhub
npm ci
npm run dev
# → http://localhost:3000

2. GlobalHub API (匯入服務)

cd globalhubapi
dotnet run --project src/Presentation/Web.Api
# → http://localhost:8080
# → Swagger: http://localhost:8080/swagger
# → Hangfire: http://localhost:8080/hangfire

區域層​

3. ProductsAPI (區域產品服務)

cd productsapi
docker-compose up -d # 啟動 PostgreSQL, Redis, Elasticsearch, Seq
dotnet run --project src/Web.Api
# → http://localhost:5050
# → Swagger: http://localhost:5050/swagger
# → Hangfire: http://localhost:5050/hangfire

4. ProductBackend (區域 CMS)

cd productbackend
npm install
npm run dev
# → http://localhost:3001

測試策略​

測試類型專案工具說明
單元測試GlobalHub API, ProductsAPIxUnit領域邏輯測試
整合測試GlobalHub API, ProductsAPIxUnit + Testcontainers資料庫與外部服務
契約測試GlobalHub API → ProductsAPIxUnit同步 API 契約
架構測試ProductsAPINetArchTest架構規則檢查
E2E 測試GlobalHub, ProductBackendVitest + Testing Library前端元件測試

Git 分支策略​

main (production)
↑
└─ staging
↑
└─ develop
↑
├─ feature/xxx
├─ bugfix/xxx
└─ hotfix/xxx

團隊協作​

專案角色​

角色負責專案技能需求
前端工程師GlobalHub, ProductBackendReact, Next.js, TypeScript, Tailwind
後端工程師 (中央)GlobalHub API.NET, Clean Architecture, Hangfire, Polly
後端工程師 (區域)ProductsAPI.NET, DDD, CQRS, Elasticsearch, Wolverine
DevOps 工程師所有專案Docker, GitLab CI, Kubernetes
QA 工程師所有專案測試策略, 自動化測試

關鍵文件​

GlobalHub API​

ProductsAPI (最完整文件)​

  • 專案內 docs/ 目錄包含詳細架構與 API 文件

關鍵設計決策​

1. 為何採用中央與區域雙層架構?​

優點:

  • ✅ 統一產品資源管理(中央採購)
  • ✅ 區域化運營靈活性(本地定價、促銷)
  • ✅ 資料主權與隱私(訂單資料區域化)
  • ✅ 可擴展性(新增區域不影響中央)

2. 為何 Elasticsearch 只在區域層?​

理由:

  • 中央層:產品採購與分發,不需要複雜搜尋
  • 區域層:終端客戶搜尋,需要高效能全文搜尋
  • 避免重複建置,各區域獨立優化

3. 為何使用 Wolverine 取代 MediatR?(ProductsAPI)​

優點:

  • ✅ 更好的效能
  • ✅ 內建訊息持久化
  • ✅ 更靈活的訊息路由
  • ✅ 支援分散式追蹤

4. 為何分離產品與訂單資料庫?(ProductsAPI)​

理由:

  • 產品資料區域共享 → 集中管理
  • 訂單資料站點本地 → 資料主權與隱私
  • 支援跨站訂單轉發

同步機制關鍵指標​

監控指標 (GlobalHub API)​

指標目標值說明
SERP 同步成功率\u003e 95%上游同步健康度
區域同步成功率\u003e 98%下游同步健康度
SERP 同步延遲\u003c 30 分鐘全量同步完成時間
區域同步延遲\u003c 10 分鐘增量同步完成時間
死信佇列項目\u003c 10失敗重試項目數

監控工具​

  • Prometheus + Grafana - 同步指標視覺化
  • Seq - 結構化日誌
  • Hangfire Dashboard - 背景任務監控
  • 健康檢查端點 - GET /health/sync

效能指標​

目標指標​

指標目標值說明
API 回應時間\u003c 200msP95
搜尋查詢 (ES)\u003c 100msElasticsearch
頁面載入\u003c 1sFirst Contentful Paint
背景任務30 分鐘內產品匯入完成

安全性​

認證與授權​

  • API 金鑰 - GlobalHub API ↔ ProductsAPI 同步認證
  • Webhook 簽章 - SERP → GlobalHub API 驗證
  • JWT Token - 使用者認證
  • HTTPS - 強制加密傳輸

資料保護​

  • SQL Injection - EF Core 參數化查詢
  • XSS - React 自動跳脫
  • CSRF - SameSite Cookie

敏感資料管理​

  • 環境變數 - Docker Secrets
  • User Secrets - 本地開發
  • Key Vault - 生產環境

未來規劃​

短期 (Q1 2026)​

  • 完成 GlobalHub API 同步架構設計
  • 實作 SERP 匯入功能
  • 實作區域同步機制

中期 (Q2-Q3 2026)​

  • 全球訂單交換 (GOX) 系統
  • 多區域管理介面
  • 進階分析儀表板

長期 (Q4 2026+)​

  • AI 自動產品重新包裝
  • 動態定價引擎
  • 區塊鏈訂單追蹤

總結​

GlobeConnect Product Hub 是一個採用中央與區域雙層架構的企業級旅遊產品平台:

架構亮點​

✅ 中央集權,區域自治 - 統一採購 + 區域運營
✅ 職責清晰分離 - 中央負責採購,區域負責搜尋與訂單
✅ 可擴展性 - 新增區域站點不影響中央架構
✅ 高效能 - Elasticsearch 搜尋在區域層獨立優化
✅ 完整監控 - Prometheus + Grafana + Seq

專案連結​

專案層級GitLab URL
GlobalHub中央https://gitlab.com/liongroup/liontech/lionglobal/b2c/globalhub
GlobalHub API中央https://gitlab.com/liongroup/liontech/lionglobal/b2c/globalhubapi
ProductsAPI區域https://gitlab.com/liongroup/liontech/lionglobal/b2c/productsapi
ProductBackend區域https://gitlab.com/liongroup/liontech/lionglobal/b2c/productbackend

關鍵文件​


文件版本: 2.0 (更新:中央與區域架構)
維護者: Lion Travel Development Team
最後更新: 2026-02-07