Procesos Estocásticos y Cadenas de Markov · Tema 46

Sistemas informáticos

Colas, servidores y protocolos: carga vs capacidad, latencia, throughput y pérdidas.

01 · Punto de partida

Pedidos que llegan, workers que atienden

Cada slot llega un pedido con a y se sirve uno con s (si hay). Con buffer K = 4, la cola Xₙ es Markov: si a > s crece y pierde; si a < s se vacía y sobra capacidad.

Los indicadores son latencia (cola media), throughput (servidos/slot) y pérdida (P(llena) con arribo).

  • ¿Qué carga a y qué capacidad s por slot?
  • ¿Qué cola media (latencia) resulta?
  • ¿Cuánto throughput real sale?
  • ¿Qué fracción se pierde por buffer lleno?

02 · Definición

Carga, capacidad y sus tres números

Todo sistema de cola-slots se resume en:

ρ

Carga ρ = a/s

ρ < 1 estable; ρ > 1 saturada. El semáforo del sistema.

≡

Cola media

E[X]: proxy de latencia. Crece explosiva cerca de ρ = 1.

✕

Pérdida

Arribo con cola llena: se pierde (o reintenta). P(X = K)·a.

Con K = 4, a = 0,4 y s = 0,5: ρ = 0,8, cola media ≈ 1,6 y pérdida ≈ 5 % (laboratorio).

Carga manda el régimen (K = 4).
CasoρRégimen
a = 0,3, s = 0,60,5Vacía seguido, latencia baja.
a = 0,4, s = 0,50,8Cola media, pérdidas chicas.
a = 0,7, s = 0,51,4Llena siempre, pierde ~30 %.

03 · Anatomía

Throughput, latencia y buffer

Cuatro lecturas del mismo π:

Throughput
Servidos por slot: mín(a, s·(1−π₀)). Con ρ < 1 es a (todo lo que llega sale).
Latencia
Cola media E[X]: a más cola, más espera (Little en espíritu).
Pérdida
Con buffer lleno y arribo: π_K·a. Más K, menos pérdida pero más latencia.
Buffer K
Amortigua ráfagas pero no crea capacidad: con ρ > 1 solo retrasa la pérdida.

ρ < 1

Estable

Throughput = a, cola acotada. Dimensionar por latencia.

ρ > 1

Saturada

Throughput = s, cola llena. Solo agregan capacidad o pierden.

04 · Ejemplos

Sistemas que son colas con otro nombre

Todo «llegan y se atienden» cabe en (a, s, K):

(a, s, K)→cola media→workers/buffer
  1. 1
    API con workers.

    a = 0,8/slot, s = 1: ρ = 0,8 con latencia media.

  2. 2
    Cola de impresión.

    K grande: casi no pierde, pero espera.

  3. 3
    Reintentos.

    Lo perdido vuelve: carga efectiva mayor que a.

  4. 4
    Cache.

    Hit = servicio instantáneo: s alta con K chico.

  5. 5
    Videojuego.

    Tick 60 Hz: a y s por frame, K = backlog tolerado.

05 · Representación en Python

Cola (a, s, K) en diez líneas

En Python, el paso es arribo menos servicio con topes: A ~ Bernoulli(a), S ~ Bernoulli(s) si hay. Con eso se simula y se mide.

Python en tu navegador. Estos bloques se ejecutan localmente con Pyodide, sin instalar nada. Subí a sobre s y mirá la saturación.

import random

def paso(x, a=0.4, s=0.5, K=4):
    A = 1 if random.random() < a else 0
    S = 1 if (x + A > 0 and random.random() < s) else 0
    return min(K, max(0, x + A - S))

random.seed(7)
x = 0
for _ in range(10):
    x = paso(x)
    print(x, end=" ")

Con a < s la cola vuelve a 0 seguido; con a > s se pega al 4.

Throughput y pérdida simulados

Contando servidos y perdidos en N slots:

import random

def simular(a=0.4, s=0.5, K=4, N=5000, semilla=3):
    random.seed(semilla)
    x, serv, perd = 0, 0, 0
    for _ in range(N):
        A = 1 if random.random() < a else 0
        if x == K and A:
            perd += 1
            A = 0  # no entra
        S = 1 if (x + A > 0 and random.random() < s) else 0
        x = min(K, max(0, x + A - S))
        serv += S
    return serv / N, perd / N

print([round(v, 3) for v in simular()])

06 · Exploración

Laboratorio: carga vs capacidad

Cola 0…4 con llegadas a y servicio s (6 réplicas de 40 slots). La línea gris es ρ = 1 (a = s). Pasala: la cola se pega arriba y la pérdida se dispara. Métricas: cola media, pérdida y ρ.

EXPERIMENTO 46

Del estable al saturado

ρ = a/s · X ∈ {0…4}

Los resultados numéricos aparecen debajo.
Cola media0,00
Pérdida0 %
Carga ρ0,00
LecturaEstable

Con a 0,40 y s 0,50 (ρ 0,80): cola ≈ 1,6 y pérdida ≈ 5 %.

Cada línea es una cola; la blanca, el promedio. En saturación todas viven en 4: el buffer deja de amortiguar.

Preguntas para explorar

  1. Con a = 0,4 y s = 0,8 (ρ = 0,5), ¿la cola toca el 4? ¿La pérdida?
  2. Con a = 0,7 y s = 0,5 (ρ = 1,4), ¿dónde viven las líneas? ¿Throughput ≈ s?
  3. ¿Subir K a 8 salvaría con ρ = 1,4? ¿Latencia o pérdida?
Ver respuestas sugeridas
  1. Casi nunca: cola baja y pérdida ≈ 0 %. Sobrecapacidad.
  2. En 4: throughput ≈ s = 0,5 y el resto se pierde. Saturación.
  3. Baja pérdida pero dispara latencia: cola de 8 esperando. Capacidad, no buffer.

07 · Comprensión

Confusiones frecuentes

«ρ < 1 = sin cola»

No: con ρ = 0,8 hay cola media 1,6 por ráfagas. Estable ≠ vacía.

«Throughput siempre es a»

Solo con ρ < 1 y sin pérdidas. Saturada, es s (capacidad).

«Más buffer = más capacidad»

No: amortigua, no sirve más rápido. Con ρ > 1 solo alarga la espera.

«Pérdida 0 = sistema sano»

Puede esconder latencia brutal (K gigante). Mirar las tres métricas.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: leer ρ

Con a = 0,6 y s = 0,5, calculá ρ y anticipá el régimen.

a, s = 0.6, 0.5
print("rho:", a / s, "| régimen:", "saturada" if a > s else "estable")
Ver solución razonada

ρ = 1,2: saturada. La cola vivirá llena y el throughput será s.

Ejercicio 2: throughput en saturación

Sin ejecutar primero: con ρ > 1 y s = 0,5, ¿throughput cerca de qué? Comprobalo simulando.

import random

def thr(a=0.7, s=0.5, K=4, N=4000):
    random.seed(2)
    x, serv = 0, 0
    for _ in range(N):
        A = 1 if random.random() < a else 0
        if x == K and A:
            A = 0
        S = 1 if (x + A > 0 and random.random() < s) else 0
        x = min(K, max(0, x + A - S))
        serv += S
    return round(serv / N, 3)

print(thr())
Ver solución

≈ 0,5 = s: la capacidad manda, el resto se pierde.

Ejercicio 3: dimensionar workers

Si a = 0,8 y cada worker aporta s = 0,3, ¿cuántos workers para ρ ≤ 0,8?

Ver una posible respuesta
import math
print(math.ceil(0.8 / (0.8 * 0.3)))

4 workers (s total 1,2; ρ = 0,67). Con 3, ρ = 0,89: al límite.

09 · Síntesis

Ideas para recordar

  • Xₙ₊₁ = mín(K, máx(0, Xₙ+A−S)) con ρ = a/s.
  • ρ < 1 estable (throughput a); ρ > 1 saturada (throughput s).
  • Medir cola media + throughput + pérdida siempre.
  • K amortigua, s resuelve.
  • En Python: Bernoulli por slot con topes.

Cerramos aplicaciones. En el final integrarás todo: proyecto de simulación.