Hypool — Sybase 連線池與生態系

為解決 PHP 每次請求重新建立 Sybase 資料庫連線的效能瓶頸,從 PHP (RoadRunner) 演進至 Java (gRPC + HikariCP) 的高效能連線池架構,並擴充專屬 PHP Client 與 Laravel Driver 實現無縫整合。

JavagRPCPHPLaravelSybaseConnection Pool

專案背景與挑戰

在原本的系統架構中,使用 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_INTintDT_DECIMALfloat)。
  • 高效傳輸:使用扁平化陣列 (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,我們確保了新架構能夠平滑、無痛地整合到現有的龐大業務系統中,展現了從底層架構設計到上層應用串接的完整工程能力。