首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Nginx + Tomcat 集群架構實戰:負載均衡、Session 共享與靜態資源分離

     編輯:Java 綜合教學

架構核心優勢

Nginx 作為高性能反向代理/負載均衡器(支撐 5 萬+ 並發),前置於 Tomcat 集群(單節點約 150-250 並發),實現流量分發、故障剔除、靜態資源分離,大幅提升系統吞吐與可用性。

核心配置解析

Upstream 負載均衡策略

upstream tomcat_cluster {
    # 輪詢(默認)
    server 192.168.1.10:8080 weight=3;
    server 192.168.1.11:8080 weight=2;
    server 192.168.1.12:8080;
    
    # IP Hash 解決 Session 粘性
    # ip_hash;
    
    # 最少連接
    # least_conn;
    
    # 故障自動剔除
    # max_fails=3 fail_timeout=30s;
}

AJP 協議優化通信

Tomcat 配置 AJP 連接器(port=8009),Nginx 使用 proxy_pass ajp://,相比 HTTP 協議減少解析開銷,提升 20-30% 吞吐。

靜態資源分離

location ~ .*\.(html|htm|gif|jpg|jpeg|png|css|js|ico)$ {
    root /data/static;
    expires 30d;
    access_log off;
}

圖片、CSS、JS 直接由 Nginx 服務,毫秒級響應,釋放 Tomcat 處理動態請求。

Session 共享方案對比

方案原理優點缺點
Sticky Session (ip_hash)同一客戶端固定路由到同一 Tomcat簡單、無需代碼改造、性能好節點掛掉 Session 丟失、擴容不均
Session 複製 (DeltaManager)Tomcat 間廣播同步 Session高可用、無單點集群大時網絡風暴、內存壓力大
Memcached/Redis 集中存儲 (MSM)Session 外置到分佈式緩存水平擴展、持久化、跨語言增加網絡跳轉、需維護緩存集群

MSM 非粘性 Session 配置示例

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:host1:11211,n2:host2:11211"
    sticky="false"
    sessionBackupAsync="false"
    lockingMode="uriPattern:/app/*"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>

生產環境建議

  • Nginx 啟用 gzip、快取、連接池複用
  • Tomcat 調優:線程池、JVM 參數、連接數限制
  • 健康檢查:Nginx upstream_check 模塊或 Lua 腳本
  • 監控告警:Prometheus + Grafana 監控 QPS、延遲、錯誤率
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved