多租戶是指單一應用實例服務多個租戶,透過資料與配置的虛擬分區,使每個租戶彷彿擁有專屬、可客製化的實例。其核心在於在共享資源(降低成本)與隔離安全性之間取得平衡。設計層面涵蓋資料層與應用/平台層,本文聚焦後者。
Java EE 7 初期規範(JSR 342 等)嘗試定義 PaaS 多租戶支援,要求每個租戶擁有唯一 tenantId,Servlet 容器依此映射請求並隔離資源。但因雲端應用模式不成熟,Oracle 於 2012 年決定將 PaaS/多租戶部分延至 Java EE 8。Java 8 預期提供 JVM 級多租戶(單一 JVM 安全運行多應用)與模組化(Jigsaw/OSGi),為大規模雲端部署鋪路。儘管標準延遲,Oracle、Red Hat、IBM、CloudBees 等廠商已自行提供雲端 Java EE 執行能力。
傳統 J2EE 容器啟動單一 JVM 部署多 Web App,缺乏運行時記憶體隔離、類別隔離、資源計量與彈性擴展能力。Waratek 以元循環解釋器商業化,構建 Java Virtual Container (JVC),在單一 JVM 內實現高密度宿主:
| PaaS | 特色 | 多租戶實現層級 |
|---|---|---|
| Jelastic | 容器級虛擬化,自動垂直擴展(基於 G1 GC) | App Server 級隔離:每租戶獨立 JVM/容器/資料庫 |
| OpenShift | RHEL 核心,兩層多租戶:物理機→虛機→多應用 | OS 級虛擬化(cgroups + SELinux),JBoss 中間件支援 |
| CloudBees / Cloud Foundry / Heroku | 純 Java 支援佳,無廠商綁定,易遷移 | 共享容器或專用容器,視方案而定 |
部署模型分兩類:
多租戶能顯著降低成本,大型企業內部資料中心資源利用率可達 70%-80%。傳統方案依賴 OS 或容器層虛擬化,常建構於 IaaS 之上。Waratek 等 JVM 級虛擬化嘗試提升資源利用效率,為未來 Java EE 8 標準化多租戶支援提供參考。