Modelos y Simulación · Tema 48

Aplicaciones informáticas

Redes, sistemas, videojuegos e IA: simular con código los sistemas hechos de código.

01 · Punto de partida

Tu territorio, tu laboratorio

Ciencia (Tema 46) e industria (Tema 47) piden prestado el ciclo del curso. En informática el préstamo es directo: sos programador simulando sistemas de programas. Latencia de un servidor, pérdida de paquetes, peatones de un videojuego, un agente que aprende a esquivar: todo son estados, eventos y azar con el vocabulario de los Temas 1–31.

La ventaja es que medir es barato (logs de sobra) y la trampa es creerse que el simulador es el sistema: verificar (Tema 35) y validar contra tráfico real (Tema 36) valen doble aquí.

  • ¿Qué evento y qué estado tiene tu sistema de software?
  • ¿Contra qué tráfico o log real se valida?
  • ¿Qué escenario de carga o falla se prueba primero?
  • ¿El modelo corre más rápido que la realidad que estudia?

02 · Mapa de aplicaciones

Cuatro sistemas de software

⇄

Redes

Paquetes, retardos y pérdidas: throughput y cola del enlace antes de tender cable.

⚙

Sistemas

Servidores con workers finitos: latencia y errores bajo carga (el banco del Tema 1, en silicio).

◍

Juegos e IA

Mundos y agentes que prueban políticas: peatones, tráfico, recompensas, multitudes.

El mismo ciclo del curso, cuatro sistemas de código.
SistemaPregunta típicaModelo mínimo
Red¿Aguanta el enlace el pico?Paquetes contra capacidad con pérdida
Servidor¿Cuántos workers para p95 < 200 ms?Cola con atención finita
Videojuego¿Se atasca la multitud en la puerta?Agentes con reglas locales
IA¿Qué política aprende más rápido?Episodios simulados con recompensa

03 · Tres patrones

Lo que se repite en software

  1. 1
    Carga contra capacidad.

    Llegadas versus atención finita: latencia, cola y pérdida. El pico manda, no el promedio.

  2. 2
    Falla inyectada.

    Caídas, retardos y reintentos que en producción serían incident: aquí son escenarios.

  3. 3
    Agentes con reglas.

    Muchos actores simples que producen conducta global: tráfico, multitudes, mercados.

Probar en producción

Real y riesgoso

El pico de verdad con usuarios de verdad: mide exacto una vez y factura el incidente.

Simular la carga

Barato y repetible

Miles de picos con iguales semillas: se dimensiona antes y se valida con logs después.

Throughput
Pedidos o paquetes atendidos por segundo.
Latencia p95
Tiempo que solo el 5% peor supera: el que siente el usuario.
Pérdida
Fracción que el sistema descarta por falta de capacidad.
Episodio
Corrida de un agente con recompensa acumulada.

04 · Protocolo

El método en cinco pasos

Logs→Modelo→Carga→Fallas→Capacidad

Se miden logs reales, se modela la cola o la red, se simula la carga pico, se inyectan fallas y se dimensiona capacidad. El Tema 49 lo practicará con tráfico y servidores.

05 · En Python

Un servidor en veinte líneas

Llegadas por paso contra workers finitos: lo no atendido espera y la espera se mide.

Python en tu navegador. Colas y percentiles con stdlib puro.

def servidor(llegadas, workers):
    cola, espera, h = 0, 0, []
    for l in llegadas:
        cola += l
        atiende = min(cola, workers)
        cola -= atiende
        espera += cola
        h.append(cola)
    return h, espera

print(servidor([5, 8, 3, 9, 2], 6))

El p95, no el promedio

El percentil 95 se calcula ordenando: lo que siente el usuario impaciente.

def p95(xs):
    s = sorted(xs)
    k = min(len(s) - 1, int(0.95 * len(s)))
    return s[k]


print(p95([120, 90, 110, 2000, 100, 95, 105]))

06 · Exploración

Laboratorio: ¿cuántos workers?

Un servidor con pico de llegadas ajustable y workers a elección. La curva muestra la cola paso a paso; los números, el pico de cola y el p95 de espera. Dimensioná sin pagar el incidente.

EXPERIMENTO 48

Workers contra pico

cola = llegadas − atención

Los resultados numéricos aparecen debajo.
Pico de cola0
Espera total0
p95 espera0
LecturaAguanta

Con pico 9 y 6 workers, la cola se vacía entre oleadas.

Curva de cola en 24 pasos con dos oleadas de pico. Barras de workers: capacidad por paso.

Preguntas para explorar

  1. Con pico 9 y 6 workers, ¿la cola se vacía? ¿Y con 4 workers?
  2. Subí el pico a 14 con 6 workers. ¿El p95 se dispara aunque la media «aguante»?
  3. ¿Por qué la semilla cambia los números pero no la conclusión dimensionada?
Ver respuestas sugeridas
  1. Con 6 se vacía entre oleadas; con 4 la cola crece sin cota: el sistema no alcanza el régimen.
  2. Sí: la media esconde la oleada y el p95 la delata. Dimensionar por media es la trampa del Tema 45.
  3. Porque el azar mueve réplicas, no capacidad: bien dimensionado aguanta todas las semillas honestas.

07 · Comprensión

Confusiones frecuentes

«El simulador es el sistema»

No: es un modelo del sistema. Se valida contra logs reales o es ficción con sintaxis correcta.

«La media de latencia alcanza»

El usuario siente el p95 y la cola, no la media. Dimensionar por media colapsa en pico.

«Más workers siempre es mejor»

Hasta el cuello real (base de datos, red): después solo suman costo y contención (Tema 40).

«Probar en producción es más real»

Es más real y más caro: el incidente lo pagan usuarios. Simular primero, canary después.

08 · Práctica guiada

Ejercicios con Python

Ejercicio 1: correr el servidor

Simulá estas llegadas con 6 workers. ¿Queda cola al final?

def servidor(llegadas, workers):
    cola = 0
    for l in llegadas:
        cola = max(0, cola + l - workers)
    return cola

print(servidor([5, 8, 3, 9, 2], 6))
Ver solución razonada

Da 0: picos de 8 y 9 generan cola transitoria, pero 6 workers la drenan. Con 4 workers quedaría debiendo.

Ejercicio 2: calcular el p95

Calculá el p95 de estas latencias. ¿Qué dice que la media esconde?

xs = [120, 90, 110, 2000, 100, 95, 105]
print("media:", round(sum(xs) / len(xs)))
s = sorted(xs)
print("p95:", s[int(0.95 * len(s))])
Ver solución

Dan media: 374 y p95: 2000: un pedido en siete arruina la experiencia y la media lo diluye.

Ejercicio 3: dimensionar por pico

Buscá los workers mínimos que vacían este pico sin dejar cola.

Ver una posible respuesta
def resto(workers):
    cola = 0
    for l in [5, 8, 3, 9, 2]:
        cola = max(0, cola + l - workers)
    return cola

for w in [4, 5, 6]:
    print(w, resto(w))

Dan 7, 2 y 0: recién con 6 la cola se vacía. Dimensionar es buscar ese cruce con p95 aceptable.

09 · Síntesis

Ideas para recordar

  • Informática simula eventos, colas y agentes: tu vocabulario de todos los días.
  • Se dimensiona por pico y p95, nunca por media cómoda.
  • Fallas inyectadas en el modelo evitan incidentes en producción.
  • Logs reales validan; semillas fijas hacen repetible la carga.
  • En Python: bucles de cola y percentiles ordenados con stdlib.

En el próximo tema, el zoológico completo: ejemplos de sistemas simulables.