Multiple servers and resource pooling

On this page

Two servers sharing one waiting line can use idle capacity more effectively than two randomly assigned lines. Pooling reduces occasions when one server is idle while another has a queue. It does not turn two 10 ms servers into one 5 ms server.

State-dependent capacity in M/M/c

Assume Poisson arrivals, identical servers with independent exponential service at rate , one FCFS queue, no abandonment and unlimited waiting space. With jobs inside, the total completion rate is .

Define offered load and per-server utilization . Stationarity requires . Adjacent-state balance yields:

An arrival waits exactly when it sees at least jobs. This probability is Erlang C:

The waiting tail is . Total time also includes the arriving job's own service, so it is generally wrong to assign total time an exponential rate .

Pooling versus splitting with equal resources

For two servers at /s and total /s, , , and . Pooled mean waiting is 17.78 ms and mean system time 27.78 ms.

If each arrival independently selects a server with equal probability, Poisson splitting produces two M/M/1 queues at 80/s each. Each has mean wait 40 ms and mean system time 50 ms. Hardware is unchanged; coordinating idle capacity changes waiting.

Preparing the visual
Multiple servers and resource pooling · Experiment

Each server has exponential service at μ=100/s, total λ=cμρ. Compare one FCFS queue with independent uniform random splitting. Changing c also changes total arrival rate; each comparison holds per-server utilization and total capacity equal. No lock contention.

Start with two servers and vary , then vary server count. Changing also changes offered traffic through . This studies scale at fixed per-server utilization, not scaling under fixed external traffic. At , the curves coincide, providing a boundary check.

Pooling has implementation conditions

The shared queue must dispatch promptly, and servers must be interchangeable for the jobs. Locality, accelerator type or access restrictions can prevent arbitrary assignment. Shared-queue locks, communication and cache effects are absent from M/M/c. Random splitting is only a baseline: shortest-queue routing, least connections and work stealing differ from it.

Erlang B describes loss systems without waiting space; Erlang C holds arrivals until service becomes available. Abandonment motivates Erlang A. General service times require M/G/c approximations or simulation. These names do not label interchangeable formulas.

Check your understanding

  1. Why not replace two 100/s servers with a single M/M/1 server at 200/s?
Reasoning

A job on the two-server system still needs mean service 10 ms, and only one server works when a single job is present. A 200/s single server gives that job mean service 5 ms. Completion rates already differ in state one, changing the entire response distribution.

  1. Eight workers share a database allowing only two concurrent operations. Is M/M/8 appropriate?
Reasoning

Only if workers independently provide the actual bottleneck service. If time is mainly spent contending for two database slots, model that resource separately or build a network containing workers and database, then measure their interaction.

Further reading

NPTEL's multiple-server lecture derives Erlang C from state-dependent completion rates. Its offered-load notation differs: this series consistently uses and .