專案背景與挑戰
隨著「萌萌公益計畫」影響力擴大,一對一諮詢服務與工作坊報名人數激增。原有系統面臨高併發時容易超賣、時段重疊以及公網暴露安全隱患等問題。SGOplus 協助其建構了基於雲端無伺服器關聯式架構的雙軌預約中心。
技術與架構實現
1. 雲端無伺服器關聯式架構 (SQL Connect)
為了打破传统 NoSQL 無法提供嚴格關聯性與事務控制的局限,本專案採用 Firebase Data Connect (SQL Connect) 橋接 Cloud SQL PostgreSQL v18.3。這使得系統既擁有 Serverless 的免運維彈性,又具備強大可靠的 ACID 交易支持。
2. 連線池優化與大流量併發處理
為避免無伺服器函數 (Cloud Functions) 在高併發呼叫時频繁與資料庫進行 TCP 握手,我們在 Cloud SQL 端配置了內置連線池 (Connection Pooling),將資料庫初始化連線延遲降低至毫秒等級,可輕鬆承載突發流量。
3. 雙軌預約防衝突核心數學驗證
- 時段預約 (Slot-Based 一對一諮詢): 後端採用 PostgreSQL
$EXCLUDE USING gist範圍約束硬性隔離,從資料庫底層阻止同一個醫師/諮詢師在相同時間段內被重複預約,杜絕重疊。 - 活動預約 (Event-Based 一對多工作坊): 在可序列化交易 (Serializable Transaction) 中執行精確的票券剩餘判斷: $$\text{確保當前報名總數 } B \le \text{ 容量上限 } C$$ 徹底在資料庫交易層級防範超賣發生。
4. 頂級網絡邊界安全 (RFC 1918 隔離)
配置 Serverless VPC Access 連接器,將函數的出站網路流量設定為 private-ranges-only。前往 PostgreSQL 的敏感資料庫流量會安全地經由內部 VPC 專屬通道傳輸,而一般公網流量(如 LINE 預約通知 API)則直接走外部網關,既保障資安又大幅節省了公網頻寬成本。
5. 細粒度權限與大眾註冊
系統整合 Firebase Authentication 模組,允許社會大眾以 Email 或 Google OAuth 2.0 自由註冊。然而,所有的預約單皆需要管理員後台進行二次手動核准,確保了公益組織的營運合規性。
6. 樂觀更新 (Optimistic Updates) 極致體驗
前端基於 Next.js 16 與 Tailwind CSS v4,實作樂觀更新。當使用者送出預約,前端按鈕立即呈現代表暖陽的黃色(#e6d264)脈衝動畫,配合定制骨架螢幕 (Skeleton Screen),在後端尚未確認回傳前就給予使用者流暢回饋,將非同步感降為零。