不行,M/M/1 佇列計算機無法模擬多台伺服器,因為 Kendall 記號 M/M/1 中結尾的「1」,依定義就是明確指定只有一台伺服器。佇列理論用 Kendall 記號作為簡寫來描述一個系統:第一個 M 代表馬可夫(Poisson)到達,第二個 M 代表馬可夫(指數)服務時間,而那個數字則說明有多少台相同的伺服器並行工作。當一個計算機頁面標榜自己是 M/M/1 模型時,它就把結果限定在單一一台 FIFO 伺服器、無限等候空間,以及固定到達率的情境下。若要一次評估多台伺服器,你必須改用另一種模型,最常見的就是 M/M/c,其中 c 代表伺服器的數量。Queueing Theory Calculator 專注於單一伺服器的穩態情況,會根據你輸入的到達率與服務率,計算使用率 ρ、平均佇列長度 Lq、平均系統人數 L、平均排隊等候時間 Wq,以及平均總時間 W,並且會拒絕任何 λ 接近或超過 μ 的不穩定佇列。在信任它的輸出結果之前,請先確認你要評估的系統確實就是單一伺服器,因為如果把一個有四位櫃員的銀行佇列硬套進 M/M/1,會在不知不覺中低估顧客實際會經歷的等候時間。

M/M/1 中的「1」代表什麼
Kendall 記號是一種用來精簡寫下佇列模型背後假設的方式。M/M/1 這三個字元並不是裝飾性的標籤;它們是這套數學所依賴的限制條件。從左到右閱讀,第一個 M 說明到達過程遵循 Poisson 過程,也就是說,相鄰到達間隔時間彼此獨立,且服從一個平均值固定的指數分布。第二個 M 說明服務時間遵循同樣的指數型態,彼此之間、以及與到達流之間都互相獨立。這個 1 說明恰好只有一台伺服器在處理這條佇列,以 FIFO 方式運作,擁有無限的等候空間,以及實質上無限的顧客母體。這三個字元合在一起,定義出佇列現實中一個單一、狹窄的切片,而後續的公式,也只適用於這個切片之內。
還有兩個假設默默地隨附在後:這個系統必須已經達到穩態,也就是它的長期平均值不再持續飄移;而且到達率 λ 必須嚴格小於服務率 μ。少了這些條件,用來產生 L、Lq、W 與 Wq 的那些公式,就不會有一個有意義的有限答案。任何標榜自己是 M/M/1 計算機的工具,不論介面長什麼樣子,都帶著這些限制條件,這也是為什麼你即將使用的這個頁面,刻意適合用來回答單一伺服器的問題,也刻意不適合用在多台伺服器的情境上。
為什麼 M/M/1 無法模擬多台伺服器
單一伺服器的假設,不只出現在標籤上,也直接體現在公式本身裡。使用率寫成 ρ = λ/μ,代表一台伺服器忙碌的時間占比,因此結果必然介於零到一之間。平均總時間 W = 1/(μ − λ),是一位顧客在由一台伺服器提供服務的系統中所花費的平均時間。一旦你有兩台伺服器共用一條佇列,每台伺服器忙碌的比例就會變成 λ/(cμ),而系統停留時間的公式也會因為工作可以分散到 c 台平行處理器上而改變形式。把多台伺服器硬塞進一個公式假設只有一台伺服器的工具裡,會在不知不覺中產生一些看起來合理、但實際上大幅低估等候時間的數字。
這是一個結構性的問題,而不是缺少某個功能。多伺服器系統本質上是一條不同的馬可夫鏈:一次到達可以由任何一台閒置的伺服器提供服務,正在接受服務的顧客人數,在佇列甚至還沒開始增長之前,就可以爬升到 c,而穩態機率式子裡也帶有一些只有在 c = 1 時才會塌縮消失的組合項。把一個多伺服器系統重新命名成「μ 更大的 M/M/1」,並不能還原出正確的答案,因為 M/M/1 中的 μ 是單一伺服器的速率,而不是合併後的吞吐量。正確的做法,是改用一個知道伺服器數量、並使用 Erlang-C 等候機率的模型。
該改用的多伺服器模型
| 特性 | M/M/1 | M/M/c |
|---|---|---|
| 伺服器數量 | 1 | c ≥ 2 |
| 穩態條件 | λ < μ | λ < cμ |
| 每台伺服器的使用率 | λ/μ | λ/(cμ) |
| 工作量分配方式 | 單一指數服務 | 同樣的指數服務,任何閒置伺服器都能接下下一個到達 |
| 適用時機 | 一個自助櫃台、一個 CPU 核心、一條結帳通道 | 銀行櫃員小組、客服中心團隊、多條隊伍匯入同一條 FIFO 隊列 |
對於 c 台相同伺服器加上 Poisson 到達的常見情況,M/M/c 模型會產生以 Erlang-C 機率為核心建構出來的封閉式運算式,用來表示一位到達的顧客必須等到所有伺服器都忙碌之後才能被服務的機率。如果服務時間不是指數分布,這個家族還會進一步擴展:M/D/c 處理確定性服務,M/G/c 處理已知平均值與變異數的一般服務,而有限容量的變體則會為等候空間設一個上限。在任何產能規劃工作中,選對模型都是最關鍵的一步,因為後續的每一項指標都取決於它。
如何逐步計算 M/M/1 指標
Queueing Theory Calculator 會把計算保留在本機端進行,一旦你輸入兩個速率,就會回報全部五項穩態指標。三個簡短步驟,就能涵蓋整個流程。
- 用同一個時間單位輸入一個正的到達率 λ 與服務率 μ,例如兩者都用每小時顧客數,這樣最後算出來的 W 與 Wq 才會以小時為單位。
- 確認 μ 大於 λ,並確認 Poisson 到達、指數服務、單一 FIFO 伺服器,以及穩態,對於你要評估的系統來說,都是合理的假設。
- 計算並檢視使用率、Lq、L、Wq 與 W,然後把這些指標連同它們的單位意義,複製到你的工作表或產能討論中。
輸出結果背後的 M/M/1 公式
| 指標 | 公式 | 白話意義 |
|---|---|---|
| 使用率 (ρ) | λ/μ | 單一伺服器忙碌的時間占比 |
| 閒置機率 | 1 − ρ | 伺服器空閒的時間占比 |
| 系統內平均人數 (L) | λ/(μ − λ) | 正在被服務的顧客,加上正在等候的顧客 |
| 平均等候人數 (Lq) | λ²/[μ(μ − λ)] | 在佇列中、尚未接受服務的顧客 |
| 平均總時間 (W) | 1/(μ − λ) | 從到達到離開所經過的時間 |
| 平均排隊等候時間 (Wq) | λ/[μ(μ − λ)] | 在服務開始前所花費的等候時間 |
在實作上,這個計算機會驗證這兩個速率是否使用同一個單位、數值介於 1e-12 到 1e12 之間,並套用嚴格的 0 < λ < μ 條件,逐一計算上述每個公式,拒絕任何不穩定或非有限的結果,並用 Little's law 交叉核對,確認 L 等於 λW、Lq 等於 λWq,誤差落在浮點數容許範圍之內。輸入值也會被限制在遠離數值下溢的範圍內,並設有上限,確保每一個顯示出來的數字都是有限且容易閱讀的。
解讀輸出結果:一個實際範例
在 λ = 9、μ = 10(兩者皆為每小時到達數)的情況下,每一項指標都可以用手動方式驗證,確認這個工具在接近飽和時的行為。下面把代入的步驟與結果都寫出來,讓從公式到數字的路徑清楚可見。
- 使用率:ρ = λ/μ = 9/10 = 0.9,也就是說,這台單一伺服器有 90% 的時間都在忙碌。
- 系統內平均人數:L = λ/(μ − λ) = 9/(10 − 9) = 9。
- 平均等候人數:Lq = λ²/[μ(μ − λ)] = 81/(10 × 1) = 8.1。
- 平均總時間:W = 1/(μ − λ) = 1/1 = 每位顧客 1 小時。
- 平均排隊等候時間:Wq = λ/[μ(μ − λ)] = 9/(10 × 1) = 0.9 小時。
Little's law 對兩個等式都做了交叉核對:λW = 9 × 1 = 9 = L,λWq = 9 × 0.9 = 8.1 = Lq。這個工具內部計算的正是同樣的等式,並且不帶任何四捨五入產生的偏差就直接回報出來。留意看看,90% 的使用率是如何產生出一條深達九位顧客的隊伍,以及整整一小時的總時間;這種模型的非線性,是 M/M/1 的一項真實特性,而不是一個小瑕疵。當 λ 從下方越來越接近 μ 時,分母會縮小,而預期的等候時間則會無限制地增長,這正是為什麼這個計算機會拒絕任何 λ ≥ μ 的輸入。
M/M/1 假設何時會失效
真實系統違反 M/M/1 假設的頻率,往往比符合假設的頻率還高。到達過程可能是排程好的,或是陣發性的,而不是 Poisson 過程;服務時間可能幾乎是固定的(例如一次條碼掃描)、可能是長尾分布的(例如一個偶爾會卡住的請求),也可能依請求類型而拆分。系統也可能有多台伺服器、有限的等候空間、優先等級、顧客中途放棄、伺服器暫停服務、批次處理,或是隨小時變動的速率。只要其中任何一項成立,單一伺服器指數模型就會開始偏離觀察到的現實。快速察覺這種偏離的一個方法,是把這個計算機所預測的尾端行為(它隱含地假設了一條指數尾端)跟你實際量測到的第 95 百分位數做比較。如果兩者出現落差,就代表這個模型不適合用在這項工作上。
有兩份教育性參考資料,更詳細地說明了背後的數學:Princeton introductory algorithms notes以程式範例逐步講解 M/M/1,而University of Florida elementary queuing theory notes則逐步推導這些公式。請把這個計算機當成一份教育性參考資料、一個粗略的單一伺服器產能基準,或是拿來對照教科書習題的檢查工具。在承諾人力配置或產能決策之前,請用實際觀察到的資料驗證到達與服務的分布、選擇合適的佇列模型、檢視變異性與百分位數,並審視犯錯所帶來的後果。