Hypool — Sybase 連線池與生態系
為解決 PHP 每次請求重新建立 Sybase 資料庫連線的效能瓶頸,從 PHP (RoadRunner) 演進至 Java (gRPC + HikariCP) 的高效能連線池架構,並擴充專屬 PHP Client 與 Laravel Driver 實現無縫整合。
專案背景與挑戰
在原本的系統架構中,使用 PHP 每次處理請求時都需要重新建立與 Sybase (SQL Anywhere / ASE) 資料庫的連線。這種傳統的連線方式帶來了嚴重的效能瓶頸,尤其在高併發場景下,連線建立的開銷(Handshake、認證等)佔據了大量的處理時間。
更關鍵的痛點在於「版本鎖死」與「未來發展性」: 官方提供的 Sybase PHP Driver (sasql) 最高僅支援到 PHP 8.2。為了遷就這個底層驅動,導致公司內部大部分專案的 Docker Image 與環境都被迫停留在 PHP 8.2,這不僅侷限了我們採用新版 PHP 特性(如 PHP 8.3/8.4)的發展性,長期來看更存在潛在的安全性隱憂。
為了解決效能問題,並讓應用層完全脫離對官方原生 PHP Driver 的依賴,我們決定導入 Connection Pooling (連線池) 的概念,並透過 gRPC 重新封裝資料庫操作,作為長期的架構規劃。
架構演進:從 PHP 到 Java
第一階段:PHP Worker (基於 RoadRunner)
最初,我們使用 PHP 8.2 搭配 RoadRunner 開發了 hypool-php。
- 核心設計:採用 Process-Based Connection Pooling 架構,每個 Worker Process 在啟動時建立一條專屬的資料庫連線,並在生命週期內重複使用。
- 智慧保持連線 (Smart Keep-Alive):內建閒置偵測,超過 60 秒才會執行
SELECT 1驗證,頻繁存取時完全不執行額外 Ping 檢查。 - 記憶體管理:利用 RoadRunner 的 TTL 機制強制 Worker 定期重啟,解決 PHP 長駐程式的記憶體洩漏問題。
- 成果:實測內部查詢延遲(包含 DB 執行)僅約 13ms。
第二階段:Java gRPC Server (極致效能與穩定性)
雖然 PHP 版本已經大幅改善了效能,但為了追求更極致的效能、更穩定的記憶體管理以及更完善的連線池生態,我們最終將核心服務改用 Java 重新設計 (hypool-java)。
- 技術棧:Java + gRPC + SAP jConnect + HikariCP。
- 安全性提升:加入了 HMAC 認證機制 (Interceptor),確保 gRPC 呼叫的安全性。
- 優勢:HikariCP 是業界公認最高效的連線池之一,搭配 Java 優秀的多執行緒與記憶體管理能力,徹底解決了 PHP 版本的效能與記憶體瓶頸。
生態系擴充:無縫整合現有應用
為了讓現有的 PHP 與 Laravel 專案能夠無縫接軌新的 Java gRPC 連線池,我們擴充開發了專屬的 Client 與 Driver:
1. Hypool Client (PHP gRPC 客戶端)
這是一個專為 PHP 8.0+ 設計的 gRPC 客戶端套件 (greattree/hypool-client)。
- 自動型別轉換:根據 Server 回傳的欄位定義,自動將數值字串轉換為對應的 PHP 型別(如
DT_INT轉int,DT_DECIMAL轉float)。 - 高效傳輸:使用扁平化陣列 (Flat Array) 與 Null Bitmap 技術傳輸資料,大幅降低封包大小並提升解碼效能。
2. Laravel Hypool Driver
為了讓 Laravel 開發者能保持原有的開發習慣,我們開發了 greattree/laravel-hypool-driver。
- 無縫整合:讓開發者可以直接使用 Laravel 的 Eloquent ORM 和查詢建構器 (Query Builder) 透過 gRPC 與 Hypool 互動。
- 自動備援 (Fallback Connection):內建連線失敗時的自動備援機制,提升系統的容錯能力與高可用性。
- 簡易配置:只需在
config/database.php中設定driver => 'hypool',並在 Model 中指定$connection = 'hypool'即可輕鬆切換。
總結
Hypool 專案不僅僅是一個單一的連線池服務,而是一個完整的資料庫連線生態系。透過從 PHP 到 Java 的架構演進,我們解決了最核心的效能問題;再透過開發專屬的 Client 與 Laravel Driver,我們確保了新架構能夠平滑、無痛地整合到現有的龐大業務系統中,展現了從底層架構設計到上層應用串接的完整工程能力。