Dispatcher 與 CMAN(Connection Manager)都與「連線管理」和「資源優化」有關,但它們運作的位置與目的完全不同。
簡單來說:Dispatcher 是「內勤」,負責資料庫內部的效率;CMAN 是「外勤」,負責進出大門的交通引導與安全檢查。
1. 核心區別與關係
| 特性 | Dispatcher (分發器) | CMAN (連線管理器) |
|---|---|---|
| 運作模式 | Shared Server (共享伺服器模式) 的核心元件。 | 獨立的 Proxy (代理伺服器) 軟體。 |
| 運作位置 | 在 資料庫執行個體 (Instance) 內部。 | 在 獨立伺服器 或中間層機器上。 |
| 主要功能 | 將大量 Client 連線分配給少數的 Shared Server Process,節省資料庫記憶體。 | 網路過濾 (Firewall)、連線匯集 (Multiplexing)、協議轉換。 |
| 與 Client 關係 | Client 直接連到資料庫時,Dispatcher 負責接待。 | Client 連到 CMAN,CMAN 再幫 Client 連到資料庫。 |
2. 它們如何協作? (Session Multiplexing)
這是兩者產生關係的最常見場景:連線匯集(Session Multiplexing)。
當你有數千個用戶端要連線,但又不希望資料庫建立數千個網路連線時:
-
用戶端通通連向 CMAN。
-
CMAN 將這些成千上萬的連線「打包(Multiplexing)」,壓縮成少數幾個實體網路連線,發往資料庫。
-
資料庫端必須配置 Dispatcher。Dispatcher 會接收 CMAN 打包過來的連線,並在資料庫內部將其分發給後端的 Shared Servers 處理。
公式:
大量 Client→CMAN (漏斗)→少量網路連線→Dispatcher (分發)→Shared Servers
3. 什麼時候該用誰?
-
只用 Dispatcher:
-
你的伺服器記憶體 (RAM) 不夠,無法為每個連線都開一個專屬進程 (Dedicated Process)。
-
連線大多是「閒置多、做事少」的類型(如一般 OLTP 系統)。
-
-
只用 CMAN:
-
你需要網路防火牆功能(限制特定 IP 才能連資料庫)。
-
你的 Client 與 Database 處於不同網段,需要一個跳板(Proxy)。
-
你需要將資料庫隱藏在內網(Security)。
-
-
兩者並用:
-
極高併發環境(例如 5,000+ 個連線)。
-
既要節省網路頻寬(CMAN 匯集),又要節省資料庫主機記憶體(Dispatcher)。
-
總結
Dispatcher 解決的是「資料庫進程太多導致記憶體爆炸」的問題;而 CMAN 解決的是「網路連線太多、不夠安全或路徑不通」的問題。