2 visitas

Por qué los microlitos que se comunican por HTTP no escalan como imaginás

Aislar infraestructura no elimina el efecto dominó: cuando un servicio depende de otro por HTTP, el acoplamiento sigue vivo.

En la primera evolución de los microlitos, se suele separar la infraestructura: cada servicio con su propia base de datos, su propio runtime y su propio ciclo de deploy. Esto trae mejoras claras: los equipos se independizan, los esquemas dejan de pisarse y los picos de tráfico se vuelven más manejables.

Pero apenas un endpoint necesita información “externa”, aparece el viejo monstruo del acoplamiento. Ejemplo clásico: GET /users/{id} necesita devolver también cuántos vídeos subió ese usuario. Ahora el servicio de usuarios debe consultar al servicio de vídeos. Y esa dependencia redefine el sistema entero.

Un ejemplo típico en Laravel usando Guzzle como cliente HTTP:

public function getUserVideosCount(int $userId): int
{
    $client = new \GuzzleHttp\Client();

    $response = $client->get("https://servicio-videos/api/videos/contador", [
        'query' => [
            'usuario' => $userId,
        ],
        'timeout' => 2,
    ]);

    $data = json_decode((string) $response->getBody(), true);

    return (int) $data['cantidad'];
}

En un proyecto real esto vive dentro de un service layer y se cachea para evitar golpear al servicio remoto en cada request.

Pero incluso con buenas prácticas, los problemas son inevitables:

  • Latencia: un endpoint interno agrega milisegundos a cada HTTP hop.
  • Fragilidad: si el servicio de vídeos cae, /users/{id} deja de poder armar la respuesta completa.
  • Acoplamiento: el contrato del servicio de vídeos define cómo responde el de usuarios.
  • Costo conceptual: lo que antes era una simple query SQL ahora es exponer un endpoint, validarlo, documentarlo y consumirlo.

El resultado final es paradójico: se gana escalabilidad infra, pero se pierde escalabilidad de implementación. El cuello de botella ya no está en la base de datos, sino en la dependencia entre servicios.

Por eso los microlitos HTTP no son todavía microservicios, sino un paso intermedio útil, pero limitado. La separación física no reemplaza la separación lógica. La arquitectura mejora, pero todavía no “despega” hacia el desac acoplamiento real.

Me dedico a crear soluciones web eficientes y a compartir mi conocimiento con la comunidad de desarrolladores.

Alejandro Leone
Backend Developer