Web 服務器:處理 HTTP 請求,返回靜態資源或委托動態腳本生成 HTML,面向瀏覽器。
應用服務器:暴露業務邏輯組件接口(EJB、Spring Bean、Web Service),面向客戶端應用程序(含 Web 服務器、富客戶端、其他服務)。
請求到達 → 查找映射處理器 → 執行處理器 → 返回響應。不關心業務邏輯、事務、數據庫連接池,僅提供運行時環境。
負載均衡、靜態資源緩存、集群會話複製 —— 這些常被誤以為是應用服務器專屬特性。
客戶端調用組件方法如同本地調用(RPC),傳輸的是序列化對象/數據結構,而非 HTML 片段。例如:
// 客戶端代碼(可能運行在 Web 服務器、桌面程序、手機 App)
ProductService service = lookup("ejb/ProductService");
PriceInfo price = service.getRealTimePrice(productId); // 獲取數據對象
renderPage(price); // 自行決定如何展示
| 維度 | 方案一:單 Web 服務器 | 方案二:Web + 應用服務器 |
|---|---|---|
| 架構 | Servlet 直連 DB,生成 HTML | Servlet 調用 EJB/Spring Bean,獲取數據對象 |
| 業務邏輯位置 | 耦合在 Servlet/JSP 中 | 封裝在應用服務器組件內 |
| 復用性 | 極低,HTML 中混雜查詢邏輯 | 高,POS 機、手機 App、ERP 可共享同一服務 |
| 擴展性 | Web 層水平擴展帶動 DB 壓力 | 業務層可獨立集群,支持多租戶、多版本 |
| 故障域 | 單點故障影響全部 | Web 層故障不影響業務服務可用性 |
Web 服務器通過 SOAP/REST 接口直接暴露數據服務,獲得了「應用服務器式」的業務暴露能力。
WebLogic、WebSphere、JBoss、TomEE 皆內置 Servlet 容器,「應用服務器 ⊃ Web 服務器」成為事實。
前置 Web 服務器(Nginx/Apache HTTPD/IIS)+ 後置應用服務器集群:
Web 服務器是「顯示層網關」,應用服務器是「業務層中台」。雖然技術融合使邊界模糊,但架構分層思想永不過時:將協議適配與業務邏輯分離,才能構建高內聚、低耦合、可演進的企業級系統。