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