08. VII. Asignación de puertos

Por: Artiko
12factorport-bindinghttpautocontencion

08. VII. Asignación de puertos

Exporta servicios vía asignación de puertos (port binding).

Autocontención frente al modelo tradicional

Muchas aplicaciones tradicionales dependen de un servidor web externo (Apache, Tomcat) instalado y configurado en el host, dentro del cual la app corre como un módulo. Una aplicación twelve-factor no depende de eso: es completamente autocontenida.

La app incorpora, como dependencia declarada (Factor II), la librería que le permite hablar HTTP directamente:

Cómo funciona en la práctica

La aplicación exporta HTTP como un servicio asignado a un puerto, y escucha las peticiones que llegan a ese puerto:

# Desarrollo
http://localhost:5000/

# Producción: una capa de enrutamiento (reverse proxy, load balancer)
# recibe el tráfico público y lo redirige al puerto interno del proceso

No hay “instalar la app dentro de Apache”. El binario/proceso de la app es el servidor.

Una app puede ser el backing service de otra

El port binding no está limitado a HTTP. Otros protocolos también se exponen así: ejabberd (XMPP), Redis (su propio protocolo binario). Esto tiene una consecuencia directa: una aplicación que expone un puerto puede convertirse en el backing service (Factor IV) de otra aplicación, simplemente publicando su URL como una variable de configuración que la app consumidora usa para conectarse.

flowchart LR
    AppA["App A<br/>(expone :8080)"] -->|URL en config| AppB["App B<br/>(consume App A como backing service)"]

Checklist del factor VII

Ya la app puede exponerse hacia afuera. Ahora toca ver cómo escala hacia adentro: el factor de concurrencia.