Cloud Native Fineract 與可擴展性實踐

引言

Fineract 是 Apache Foundation 認證的開源金融應用平臺,專為微金融與普惠金融設計。隨著業務規模擴張,傳統架構難以支撐高吞吐量與多租戶需求,因此雲原生(Cloud Native)技術成為關鍵轉變方向。本文探討 Fineract 在雲原生架構下的可擴展性實踐,涵蓋設計原則、技術實現與實際應用案例。

技術定義與核心概念

可擴展性三維模型

可擴展性透過三維策略實現:

  1. X軸(水平擴展):透過多實例部署提升吞吐量,支援資料庫複製與多資料庫實例連接
  2. Y軸(功能拆分):將功能模組化,實現獨立運行與擴展
  3. Z軸(租戶隔離):基於租戶概念的系統實例化

雲原生架構特性

Fineract 透過 Kubernetes 容器化、微服務拆分與自動化部署,實現高可用性與彈性擴展。其核心特性包含:

  • 無狀態服務:透過 Deployment 管理,支援自動擴縮
  • 有狀態服務:使用 StatefulSet 管理批次處理器等關鍵組件
  • 服務發現與負載均衡:透過 Ingress 路由與 DNS 解析策略確保流量正確分發

實施改進與技術細節

Kubernetes 部署優化

  • 服務分離設計
    • 將讀寫 API、只讀 API 與批次管理 API 拆分為獨立實例
    • 使用 Ingress 進行 HTTP 方法與 URI 路由,例如:
      • GET/HEAD 路由至只讀實例
      • 特定 URI 路由至批次管理實例
      • 預設 API 路由至讀寫實例
  • 批次處理架構
    • 引入批次管理器(Batch Manager)與批次工作者(Batch Workers)分離
    • 透過控制器動態分配工作負載,支援高帳戶數量的業務處理

液態基礎(Liquibase)配置

  • 資料庫升級策略
    • 執行升級後立即停止實例,降低資料庫鎖競爭
    • 預升級 Hook 執行 Liquibase 腳本,確保升級過程穩定
  • HAM Chart 集成
    • 支援跨可用區部署,升級後自動啟動服務端口
    • 提供 500+ 行 Helm Chart 配置,涵蓋讀寫、批次、前端與 Liquibase 實例池

可用性增強措施

  • 資源分配策略
    • 基於 Pod 請求配置 CPU 核心數(如 100m CPUs 對應 1 個 CPU)
    • 使用 G1 GC(互動請求)與 Parallel GC(批次處理)混合策略
  • 跨可用區部署
    • 配置 Max Q 參數控制 Pod 分佈,確保不同可用區數量差異不超過 1
    • 調整 DNS 解析策略,禁用緩存並定期重新解析資料庫位址,減少故障切換中斷時間

實例模式演進與應用案例

2020 年規劃與實際實施

  • 原始設計
    • 支援讀寫 API、只讀 API、批次處理與專用前端實例
    • 資料庫需配合讀寫複製與只讀複製
    • 透過消息系統(Kafka/ActiveMQ)協調實例間通訊
  • 實際變更
    • 拆分批次管理 API 為獨立實例,提升系統模組化
    • 前端實例獨立於 API 實例,避免前端請求影響後端穩定性

管理平臺調整

  • Jenkins 集中管理
    • 支援環境配置與部署流程,確保服務連續性
    • 自動化 infra 結構變更後的服務恢復
  • 企業客戶適配
    • 部分企業使用自有 AWS 架構,需獨立管理
    • 系統測試驗證資料庫遷移的穩定性,確保故障切換無中斷

技術限制與未來方向

當前挑戰

  • Kubernetes Ingress 侷限
    • 無內建 HTTP 方法路由能力,需依賴 AWS Load Balancer Controller 實現特定路由
  • HAM Chart 配置複雜度
    • 包含 500+ 行配置,支援跨雲服務器部署(目前僅限 AWS EKS)
  • 生產環境配置不足
    • 需額外 Docker Compose 檔案與 Kubernetes 範例
    • 存在 GDB/GDBC 驅動程式參數覆寫等 Bug

未來計劃

  • Guard Rails 設計
    • 透過 Terraform 與 Jenkins 代碼提供基礎設施限制,確保部署一致性
  • 歸檔功能開發
    • 討論貸款資料處理方式(刪除、遷移、導出重載)
    • 待與客戶需求與社區協商後決定最終方案
  • 開源貢獻目標
    • 將 Helm Chart 改進提交至 Apache 儲存庫,提升非功能性特質(如可用性、可擴展性)

總結

Cloud Native Fineract 透過 Kubernetes、微服務拆分與自動化部署,實現高可擴展性與可用性。其核心價值在於:

  • 透過 X/Y/Z 軸擴展策略,支撐多租戶與高吞吐量需求
  • 利用 Helm Chart 與 Ingress 路由,實現靈活的部署與流量管理
  • 透過 Liquibase 與 DNS 策略優化,提升資料庫升級與故障切換穩定性

實際應用中需注意 Kubernetes Ingress 的限制與 Helm Chart 的配置複雜度,未來將持續優化歸檔功能與開源貢獻,以強化 Fineract 在雲原生環境下的實用性與可擴展性。