Arquitectura & Backend

Por qué migré de WordPress a Go para mis APIs críticas

15 de Febrero, 2024 8 min de lectura

Tras años gestionando ecosistemas en WordPress, me encontré con un cuello de botella: la concurrencia. Aquí explico cómo el paso a Golang cambió mi forma de desplegar microservicios.

Desde 2016, WordPress fue mi herramienta principal. Es fantástico para el 80% de la web, pero cuando tus aplicaciones empiezan a manejar miles de peticiones simultáneas de datos estructurados, el peso del núcleo de WP empieza a notarse.

El problema de la concurrencia

PHP, en su modelo tradicional, crea un proceso por petición. Go, por otro lado, utiliza Goroutines. Esta fue la razón principal de mi cambio en 2020. Poder manejar miles de conexiones con un consumo de memoria mínimo transformó mis costos en OVH.

"No se trata solo de velocidad, se trata de control sobre los recursos y la seguridad del tipado fuerte."

Implementación en Go + MongoDB

Una de las primeras cosas que implementé fue un driver robusto para MongoDB Atlas. El tipado de Go me permitió definir modelos de datos que evitan errores en producción antes de que ocurran.

// Ejemplo de un modelo simple en mi API
type Project struct {
    ID        primitive.ObjectID `bson:"_id,omitempty" json:"id"`
    Title     string             `bson:"title" json:"title"`
    Status    string             `bson:"status" json:"status"`
    UpdatedAt time.Time          `bson:"updated_at" json:"updated_at"`
}

func GetProject(id string) (*Project, error) {
    // Lógica de conexión a Mongo Atlas...
    return project, nil
}

Despliegue con Docker y Traefik

Al usar contenedores, el despliegue de estas APIs en mi VPS de OVH se volvió trivial. Traefik se encarga de detectar el nuevo contenedor y asignar el certificado SSL automáticamente. Esto es lo que yo llamo infraestructura invisible.

Si estás considerando dar el salto de un entorno monolítico a uno basado en microservicios con Go, mi recomendación es clara: empieza por las piezas pequeñas que requieren más rendimiento.

Artículo Anterior

Clean Architecture en Go

Siguiente Artículo

Optimizando Dockerfiles

J

Escrito por Fabio Cardona

Backend Engineer | Go & Systems

Ver más artículos