Sobes.tech
Middle

¿Qué tipos de servicios existen y cómo funcionan a nivel básico?

sobes.tech AI

Respuesta de la IA

Existen varios tipos principales de servicios en el contexto de la arquitectura de microservicios y sistemas distribuidos:

  • Aplicaciones monolíticas: Una única base de código indivisible que contiene toda la funcionalidad de la aplicación.
  • Microservicios: Un conjunto de servicios pequeños e independientes, cada uno implementando una lógica de negocio específica. Interactúan entre sí a través de API.
  • Serverless (sin servidor): Modelo de computación donde el proveedor de la nube gestiona dinámicamente la asignación y escalado de recursos. El desarrollador se enfoca solo en el código de las funciones.

A nivel bajo, el funcionamiento es el siguiente:

Monolítico:

Se ejecuta como un proceso único. Todos los componentes se cargan en memoria al mismo tiempo. La interacción entre componentes ocurre mediante llamadas a funciones o métodos dentro de un mismo espacio de direcciones. La tolerancia a fallos se logra mediante la reserva de todo el monolito. La escalabilidad es difícil, requiere escalar toda la instancia de la aplicación. El uso de recursos suele ser redundante.

Microservicios:

Cada microservicio es un proceso separado o un conjunto de procesos. Funciona en un entorno aislado (contenedor, máquina virtual). La interacción ocurre a través de la red, generalmente mediante HTTP/gRPC sobre protocolos síncronos o asíncronos (por ejemplo, RabbitMQ, Kafka para asincronía). Cada servicio puede tener su propia pila tecnológica y base de datos. La escalabilidad es independiente para cada servicio. Se garantiza alta resistencia a fallos (la falla de un servicio no afecta a otros) y mejor utilización de recursos. La gestión se complica (se requieren Service Discovery, API Gateway, registro y monitoreo distribuidos).

Ejemplo de interacción en red entre microservicios:

// Solicitud al Servicio A
GET /users/123 HTTP/1.1
Host: service-a.example.com
// Respuesta del Servicio A
HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 123,
  "username": "testuser"
}

Serverless:

El código de la función se implementa en un entorno en la nube. El proveedor de la nube ejecuta el código en respuesta a eventos específicos (solicitudes HTTP, mensajes en colas, cambios en bases de datos). La infraestructura (servidores, SO) la gestiona el proveedor. Las funciones suelen ser de corta duración y sin estado (sin guardar estado entre llamadas). El escalado es automático, basado en la cantidad de eventos. El pago se realiza según el consumo de recursos (cantidad de ejecuciones, tiempo de ejecución). A nivel bajo, el proveedor usa contenedores o máquinas virtuales para aislar y ejecutar funciones, pero este nivel está abstraído del usuario.

Ejemplo de función Serverless (AWS Lambda):

# Función Lambda simple
import json

def lambda_handler(event, context):
    # Procesamiento del evento entrante
    # Ejecución de lógica
    response_body = {
        "message": "¡Hola desde Lambda!",
        "input": event
    }

    return {
        "statusCode": 200,
        "body": json.dumps(response_body)
    }

Tabla comparativa:

Característica Monolítico Microservicios Serverless
Arquitectura Una sola base de código Servicios independientes Funciones gestionadas por eventos
Despliegue Proceso único Independiente para cada servicio Gestionado por el proveedor
Escalabilidad Horizontal (copiar) Independiente para cada servicio Automático, por eventos
Tolerancia a fallos Baja Alta (aislados) Alta (integrada)
Utilización de recursos Parcialmente redundante Más eficiente Pago por consumo
Complejidad de gestión Baja Alta Baja (para infraestructura)
Comunicación Dentro del proceso Por red (API, mensajes) A través de eventos del proveedor