前言
J2EE 規範龐雜,技術選型多樣 (JDBC、EJB、JDO、Hibernate...)。架構設計階段的決策深遠影響系統效能與擴展性。本文提煉五大核心架構策略,助你構建高效能、可擴展的企業級應用。
1. 緩存
原理:將高頻訪問、低變更數據保存在記憶體 (JVM 堆或分散式快取),避免重複查詢資料庫或遠端服務。
- 分散式系統中,每個 JVM 可持有本地快取實例,或共享分散式快取 (如 Redis, Memcached)。
- 適用場景:配置資料、字典表、用戶 Session、熱門商品資訊。
- 關鍵:快取失效策略 (TTL、主動刷新、事件驅動失效)。
2. 複製
原理:在多台物理機器部署相同服務的多份副本,透過負載均衡分散請求,理論上線性提升吞吐量。
- 無狀態服務 (Servlet、EJB Stateless Bean、Web Service) 最易複製。
- 有狀態服務需 Session 複製或外部化 Session 儲存 (資料庫、快取)。
- 叢集環境下,JBoss/WebLogic 等容器內建複製與故障轉移機制。
3. 並行處理
原理:將大任務拆解為獨立子任務,在多執行緒/多 CPU 核心上同時執行。
- 利用 Java EE 容器管理的執行緒池 (WorkManager、ManagedExecutorService)。
- 適用:批次報表生成、多源資料聚合、影像/影片轉碼。
- 注意:共享資料同步、任務拆分粒度、結果合併邏輯。
4. 異步處理
原理:請求到達後,僅處理關鍵路徑 (如驗證、入隊列),立即回應用戶;耗時操作 (郵件、報表、第三方呼叫) 放入訊息佇列由背景工作者處理。
- 技術:JMS (Queue/Topic)、@Asynchronous (EJB 3.1+)、CompletableFuture、Reactors。
- 優勢:用戶感知回應極快,系統削峰填谷,提升穩定性。
- 挑戰:最終一致性、補償機制、監控追蹤。
5. 資源池
原理:預先建立昂貴資源 (資料庫連線、執行緒、Socket 連線、大物件) 池,請求借用、歸還,避免頻繁建立/銷毀開銷。
- 條件:池維護成本 < 每次請求建立資源成本 才有效。
- 常見池:DataSource 連線池 (HikariCP, DBCP)、執行緒池、HTTP Client 連線池、物件池 (Apache Commons Pool)。
- 調優參數:最小/最大池大小、獲取超時、閒置回收、驗證查詢。
策略組合與權衡
實際架構常組合使用:資源池支撐並行/異步,快取減輕資料庫壓力,複製提供高可用。選型需依業務特性 (讀多寫少、計算密集、IO 密集) 與非功能需求 (SLA、預算、團隊能力) 決定。
掌握五大策略本質,比記憶具體框架 API 更有價值。