WordPress es un potente Sistema de Gestión de Contenidos (CMS, Content Management System) que puede sentar las bases para distintos tipos de sitios y aplicaciones. Utiliza la típica «arquitectura monolítica», pero a medida que tu sitio crece, puede que no sea lo más adecuado. Aquí es donde una «arquitectura de microservicios» puede ser beneficiosa.
En este post vamos a explorar cómo puedes crear aplicaciones web para WordPress utilizando una arquitectura de microservicios. También te presentaremos el plugin Create Block Theme y discutiremos cómo esta interesante solución también se adapta a tu desarrollo.
Qué son los microservicios
Antes de construir cualquier aplicación web, deberías entender qué son los microservicios y en qué se diferencian de las arquitecturas monolíticas.
Con la arquitectura monolítica, existe una estrecha conexión entre todos los componentes de una aplicación. Esencialmente se ejecuta como un único servicio. Es una forma sencilla de desarrollar una aplicación, aunque el mantenimiento y la escalabilidad pueden convertirse en un reto a medida que gana complejidad.
En cambio, los microservicios te ayudan a dividir la aplicación en una colección de servicios más pequeños. Cada servicio es independiente de los demás en cuanto a desarrollo, despliegue y escalado.
Cada servicio se encarga de una tarea específica y se comunicará con los demás servicios a través de una interfaz de programación de aplicaciones (API). Por ejemplo, considera un típico sitio de comercio electrónico con carrito, proceso de pago, tramitación de pedidos, página de productos y mucho más.
En una arquitectura monolítica, todas estas funciones formarían parte de una única gran aplicación. WordPress es monolítico, y utilizar Woocommerce como plataforma de comercio electrónico es un excelente ejemplo.
Sin embargo, implementar una arquitectura de microservicios puede permitirte utilizar la tecnología adecuada para cada tarea. Por ejemplo, podrías utilizar el mejor CMS de WordPress para tu marketing de contenidos. Adobe Commerce podría ser tu sistema de gestión de productos. Una solución de pago como Bolt podría ajustarse a tus necesidades.
Unir todo esto es posible con los microservicios. A continuación, vamos a hablar con más detalle de por qué los microservicios deberían tenerse muy en cuenta en tu próximo proyecto.
Qué diferencia a los microservicios de las arquitecturas monolíticas
El «discurso de ascensor» de alto nivel de los microservicios es cómo puedes combinar diferentes tecnologías y herramientas para crear un todo. Sin embargo, hay otras características más profundas que merece la pena destacar:
- Desacoplamiento. Cada servicio mantiene su independencia. Esto significa que puedes utilizar la mejor tecnología para cada trabajo en lugar de tener que lidiar con frameworks inadecuados.
- Autonomía. Por extensión, los servicios que integras no necesitan depender unos de otros para funcionar correctamente.
- Especialización. Por supuesto, cada servicio se centrará en su propio trabajo, lo que de nuevo repercute en el rendimiento.
- Resiliencia. Una parte fundamental y eficiente de este recurso es que el fallo de un servicio no provocará la caída de todo tu sitio.
Aún hay más ventajas cuando se utilizan microservicios, además de estos aspectos:
- Escalabilidad. Puedes escalar los servicios individuales en función de las necesidades individuales sin afectar al resto de tu aplicación.
- Flexibilidad. Ya hemos explicado brevemente cómo tus servicios pueden utilizar la mejor tecnología para su trabajo. Esto se extiende incluso a los lenguajes de programación que utilizas para crearlos.
- Desarrollo más rápido. Puedes desarrollar servicios pequeños y centrados más rápidamente, comprender mejor la funcionalidad de tu servicio y mantener el sistema con mayor facilidad.
- Aislamiento de fallos mejorado. Con la configuración «modular», si falla un servicio puedes aislarlo sin que afecte a los demás.
Por otro lado, los microservicios pueden introducir complejidad en la comunicación, la coherencia de los datos y la gestión de sistemas distribuidos. Por ello, debes sopesar cuidadosamente los requisitos de tu aplicación. En resumen, considera tanto las ventajas como las desventajas antes de decidirte a utilizar microservicios.
Los componentes de una arquitectura de microservicios
Como cabría esperar, una arquitectura de microservicios puede constar de varios componentes. Estos «engranajes» funcionan juntos en toda la «rueda» para proporcionar una aplicación escalable y mantenible.
Como tales, hay algunos componentes que son clave para una implementación sin problemas:
- Pasarela API: Es el punto de entrada de las solicitudes de los clientes. Mueve esas peticiones a los microservicios apropiados. También puede gestionar tareas como la limitación de velocidad y la autenticación.
- Descubrimiento de servicios: Necesitarás emplear una forma dinámica de permitir que los microservicios se descubran y se comuniquen entre sí. Herramientas como Consul o Eureka pueden ayudar aquí.
- Contenedorización: Es habitual empaquetar y desplegar microservicios como contenedores utilizando herramientas como Docker. Así se proporciona aislamiento a cada servicio.
- Orquestación: A medida que añades microservicios a tu aplicación, su gestión se vuelve más compleja. Una herramienta como Kubernetes puede ayudarte a automatizar esta gestión de servicios.
- Almacenamiento en caché: Los mecanismos de almacenamiento en caché, como Redis o Memcached, suelen mejorar el rendimiento. Esto puede ser crucial, dada la mayor presión sobre tus servicios backend y bases de datos.
- Mensajería: Por supuesto, tus servicios también necesitan hablar entre sí. Este es el trabajo de las soluciones de mensajería «asíncrona» como RabbitMQ o Apache Kafka. Estos «intermediarios de mensajes» permiten un acoplamiento flexible entre tus microservicios.
Sin embargo, las herramientas son sólo un aspecto de tu configuración. Hay otras consideraciones, como la forma en que vas a diseñar cada microservicio dentro de la arquitectura completa.
Patrones de diseño para microservicios
Tus patrones de diseño para microservicios son tan importantes aquí como en cualquier otra parte de tu flujo de trabajo de desarrollo. Dada la complejidad potencial de tu aplicación, es importante considerar qué patrones tendrán el mayor impacto. Podemos señalar tres:
- Base de datos por servicio: Cada microservicio utiliza su propia base de datos dedicada, lo que ayuda al aislamiento y la autonomía de los datos.
- Composición de API: Puedes componer microservicios para crear servicios o APIs de nivel superior. Esta flexibilidad y reutilización es una gran ventaja.
- Arquitectura basada en eventos: Aquí, los servicios se comunicarán a través de eventos. Esto facilita un acoplamiento más laxo y el procesamiento asíncrono.
También es vital tener en cuenta los patrones de diseño específicos de las herramientas que utilizarás para construir tu arquitectura. Por ejemplo, tanto Docker como Kubernetes tienen patrones típicos que deberás tener en cuenta junto con el diseño global que adopte tu arquitectura.
Sin embargo, comprende que no todos los componentes tienen que ser microservicios. La idea correcta es empezar con servicios clave e ir evolucionando la arquitectura con el tiempo. Más adelante hablaremos de esto con más detalle. En primer lugar, debemos ver cómo desarrollar el frontend.
Presentación del plugin Create Block Theme
Es probable que WordPress aparezca por algún lugar de tu arquitectura, dado que es excelente en muchos aspectos. Uno de ellos es su facilidad de uso en el frontend. Los temas son una parte esencial de la plataforma, y crear los tuyos propios es mucho más fácil ahora que existen plugins como Create Block Theme.
Este plugin es el sucesor espiritual del tema de inicio Underscores, pero es totalmente compatible con la edición completa del sitio (FSE, full site editing). Puedes crear un tema de inicio rápidamente, aprovechar toda la potencia del editor y aprovechar todas las opciones de personalización. Funciona como un plugin típico de WordPress, con la opción de exportarlo como tema independiente más adelante.
Utilizar el plugin Create Block Theme con una arquitectura de microservicios puede «pegarlo» todo. Por ejemplo, podrías utilizar Patrones de Bloques y Bloques reutilizables en diferentes sitios de WordPress. Esto fomenta la reutilización del código y la coherencia, pero también puede aportar un frente unificado a todos los servicios individuales que utilices.
Exploraremos los detalles específicos del uso de Create Block Theme más adelante en este post. Por ahora, hablemos de WordPress headless y de cómo pueden afectarle los microservicios.
La intersección entre WordPress headless y una arquitectura de microservicios
Si quieres desacoplar el frontend y el backend de WordPress, los microservicios pueden ser una forma natural de avanzar. En el típico WordPress headless, la plataforma sólo sirve para gestionar contenidos. También se puede utilizar como API.
Combinando WordPress headless con una arquitectura de microservicios, puedes:
- Aprovechar la API REST de WordPress. WordPress proporciona una API REST integrada que te permite recuperar y manipular contenido mediante programación. Puedes utilizar esta API para integrar tus microservicios con WordPress.
- Tener escalabilidad independiente de tus frontends y backends. Con dos partes independientes de tu sitio, puedes escalar ambas y conseguir un mejor rendimiento. A pesar de las complejidades, en realidad obtienes flexibilidad.
A continuación, queremos centrarnos un poco más en la API REST. Así es como consumirás los microservicios, por lo que es una parte vital de toda la cadena.
Microservicios y la API REST de WordPress
La API REST de WordPress desempeña un papel crucial a la hora de permitir la integración entre tu sitio y los microservicios. Sus endpoints te permiten recuperar y manipular entradas, páginas, usuarios, taxonomías y mucho más de WordPress mediante una salida en JSON.
[
{
"id": 1,
"date": "2020-04-01T10:30:00",
"date_gmt": "2020-04-01T14:30:00",
"guid": {
"rendered": "https://example.com/?p=1"
},
"modified": "2020-04-01T10:30:00",
"modified_gmt": "2020-04-01T14:30:00",
"slug": "hello-world",
"status": "publish",
"type": "post",
"link": "https://example.com/hello-world/",
"title": {
"rendered": "Hello World"
},
…
Como tal, la API REST es el centro de todos los demás servicios de la arquitectura. Esto significa que tienes que elegir qué servicios actuales del sitio extraer como microservicios. Veremos esto con más detalle más adelante en el post.
En pocas palabras, la clave está en identificar las distintas funcionalidades y responsabilidades dentro de tu aplicación web. A partir de ahí, puedes dividirlas en microservicios independientes, centrados y desplegables.
Construir una aplicación web con Create Block Theme y microservicios
El resto de este post cubrirá los aspectos básicos de los microservicios y WordPress headless. Va a abordar mucho en términos globales, ya que el proceso real será específico para tus necesidades.
Aun así, vamos a sumergirnos en el proceso de creación de una aplicación web utilizando microservicios y el plugin Create Block Theme. El primer paso es configurar tu entorno de desarrollo.
1. Configurar un entorno de desarrollo
Toda app comienza con un espacio para crearla. Como tal, necesitas un entorno de desarrollo. Hay dos ubicaciones para tu espacio de desarrollo: tu ordenador local y tu servidor.
Hay muchas formas de configurar un entorno de desarrollo local, aunque nosotros (naturalmente) recomendamos DevKinsta:
También recomendamos un entorno staging, ya que necesitas una forma de probar los cambios antes de desplegarlos. Si eliges DevKinsta y eres cliente de Kinsta, obtendrás una mayor conectividad con tu servidor:
DevKinsta instalará Docker por ti, lo que ayuda a tachar otra tarea de tu lista. Puede que quieras utilizar Kubernetes para la orquestación, así que éste es el momento de instalarlo. Kinsta lo utiliza para alojar aplicaciones de bases de datos y otras tareas, y puedes descargarlo en Docker Desktop:
A partir de aquí, también querrás configurar cualquier otro framework que necesites para desarrollar tu tema. Sin embargo, no podrás hacer nada sin el plugin Create Block Theme, así que veámoslo ahora.
2. Configurar el plugin Create Block Theme
Una vez que tengas configurado tu entorno de desarrollo, puedes empezar a trabajar con el plugin Create Block Theme para crear tu tema personalizado basado en bloques. También necesitarás lo siguiente:
- Un sitio web de WordPress con el que trabajar.
- Cualquier editor de código que te guste utilizar.
- El plugin Create Block Theme.
Puedes instalar el plugin de la forma habitual de WordPress. Desde ahí, dirígete al enlace Apariencia > Create Block Theme dentro de WordPress:
Por otro lado, si echas un vistazo a la pestaña Apariencia, podrás ver la opción Administrar Fuentes del Tema. Create Block Theme también da acceso a esta opción, que es esencialmente la función Biblioteca de Fuentes de WordPress 6.5.
En cualquier caso, en la pantalla Create Block Theme deberías ver una lista de opciones para generar un nuevo tema. No vamos a repasarlas todas aquí, pero vamos a elegir clonar Twenty Twenty-Four. En cualquier caso, esto mostrará un conjunto de opciones y campos:
Si te fijas, éstos se convertirán en los campos de identidad del tema dentro de tu archivo style.css
. Son sencillos, y consisten en elegir un nombre, una captura de pantalla, una URL y algunas etiquetas para el Directorio de Temas de WordPress.
Una vez que hagas clic para confirmar, dirígete de nuevo a la pantalla Apariencia > Temas y verás tu nuevo tema listo y esperando:
En algunos casos, descargarás un archivo ZIP de tu tema, que deberás volver a subir a WordPress. Ten en cuenta que también puedes exportar el tema, pero para nuestro caso de uso, no lo haremos ahora.
Consejos para configurar y utilizar Create Block Theme
Tampoco vamos a profundizar demasiado en la personalización de tu nuevo tema de Bloques, ya que eso va más allá del alcance de este post. Sin embargo, aquí tienes algunos consejos para utilizar Create Block Theme:
- Tus modificaciones pueden realizarse en dos lugares. Puedes utilizar la opción Estilos Globales dentro del Editor del Sitio Completo o personalizando el archivo theme.json.
- Es una buena idea crear un Bloque para el microservicio que hayas elegido. Hablaremos más sobre esto más adelante.
- Create Block Theme te permite generar un tema hijo basado en el tema activo actual. Sin embargo, tu elección dependerá de tus objetivos.
Hablemos un poco más del último punto. Si se trata de un tema para crear y distribuir, deberás trabajar dentro del tema padre. Para tu propio uso, podría funcionar personalizar sólo el tema hijo. Como regla general, cuanto menos «poblado» esté inicialmente un tema, más deberás trabajar dentro del tema padre.
3. Extraer los microservicios elegidos
Una vez que tu tema de Bloque esté listo para funcionar, es hora de examinar tus microservicios más detenidamente. Una decisión clave que tendrás que tomar es qué servicios se convertirán en «micro».
Ésta puede ser una pregunta compleja y subjetiva que responderán tus propias necesidades. Sin embargo, hay algunos factores a tener en cuenta:
- Las capacidades de tu sitio: Fíjate en cualquier funcionalidad distinta que ofrezca tu sitio y considera la posibilidad de dividirla en un microservicio independiente, como la funcionalidad de pago.
- Escalabilidad independiente: Un servicio existente que dependa de la escalabilidad independiente será un buen candidato para los microservicios. El almacenamiento en caché podría ser un ejemplo.
- Diversidad tecnológica: Si necesitas alejarte de la arquitectura PHP de WordPress, éste es de nuevo otro candidato a microservicio. Podría ser el caso de plataformas específicas de comercio electrónico o componentes de backend.
- Aislamiento de datos: Los servicios con requisitos personalizados de almacenamiento de datos podrían ser microservicios. También es el caso si esos servicios no necesitan compartir datos con otros.
En nuestra opinión, es una buena idea crear microservicios que proporcionen una funcionalidad específica de la API. Podría ser la búsqueda, el procesamiento de pagos o la autenticación. Si esos servicios pueden reaccionar con otras APIs propias y de terceros, los hace más flexibles y valiosos.
Desarrollar y desplegar tus microservicios
Para trabajar en tus microservicios y, finalmente, desplegarlos, necesitarás recurrir a otras herramientas. Aquí tienes algunas consideraciones clave y herramientas que puedes utilizar:
- Docker será a menudo la forma de contenerizar tus microservicios. Empaqueta juntos el microservicio y sus dependencias, facilitando su despliegue y escalabilidad.
- Cada microservicio necesitará también un Dockerfile. Debe especificar las dependencias necesarias, las configuraciones y el entorno de ejecución que necesitas.
- Utiliza Kubernetes para la orquestación y gestión de contenedores. Kinsta proporciona una potente plataforma con soporte incorporado para Kubernetes.
- Los pipelines de integración continua y despliegue continuo (CI/CD) pueden ser la manera en que automatizas la construcción, prueba y despliegue. Herramientas como GitLab y Travis CI pueden ayudar a optimizar tus procesos de CI/CD
- Las funciones sin servidor no necesitan un servidor completo, por lo que son estupendas para los microservicios. Plataformas como AWS Lambda, Google Cloud Functions o Azure Functions te permiten ejecutar código sin aprovisionar ni gestionar servidores.
- Las pasarelas API proporcionan un único punto de entrada para tus microservicios. Herramientas como Kong o Amazon API Gateway pueden ayudarte a gestionar y proteger tus APIs. Además, pueden gestionar tareas como la autenticación, la limitación de velocidad y el enrutamiento de solicitudes.
Llegados a este punto, tendrás un sitio web de WordPress y un microservicio independientes entre sí. El último paso es integrarlos.
4. Integrar microservicios con WordPress
Una vez que desarrolles y despliegues tus microservicios, tienes que integrarlos con WordPress. Para ello, realizarás llamadas a la API desde WordPress a los endpoints que expone tu microservicio. Para ello, deberás conocer a fondo la API REST.
La forma habitual de hacerlo en WordPress es con wp_remote_get()
o wp_remote_post()
. Esto te permitirá enviar peticiones HTTP y gestionar las respuestas. Aquí tienes un código de ejemplo de cómo encajaría todo:
// API endpoint URL
$api_url = 'https://api.example.com/endpoint';
// API request parameters
$params = array(
'param1' => 'value1',
'param2' => 'value2',
);
// Make the API request using wp_remote_get
$response = wp_remote_get(add_query_arg($params, $api_url));
// Check if the request was successful
if (is_wp_error($response)) {
// Handle the error
$error_message = $response->get_error_message();
// Log or display the error message
} else {
// Process the API response
$response_body = wp_remote_retrieve_body($response);
$data = json_decode($response_body, true);
// Use the retrieved data as needed
// ...
}
Los microservicios a menudo se benefician de la obtención asíncrona de datos para evitar el bloqueo del hilo principal. WordPress puede combinar dos elementos para ello. Puedes utilizar el paquete API Fetch, junto con la compatibilidad con async
y defer
introducida en WordPress 6.3. Tu código podría tener un aspecto similar al siguiente:
import apiFetch from '@wordpress/api-fetch';
// Microservice API endpoint URL
const microserviceUrl = 'https://api.example.com/microservice';
...
// Make the API request to the microservice
apiFetch({
path: microserviceUrl,
method: 'GET',
data: params,
})
.then((response) => {
// Process the response
console.log(response);
// Use the retrieved data from the microservice
// ...
})
...
También podrías considerar AJAX para llevar a cabo actualizaciones dinámicas de la interfaz de usuario (UI).
Por supuesto, unas medidas adecuadas de autenticación y seguridad también son cruciales. La API REST de WordPress incluye algunas formas de autenticar sesiones, como el uso de cookies, tokens web JSON (JWT) o contraseñas de aplicación. Dada la dependencia de soluciones externas, mantener seguros tus microservicios y tu sitio es crucial.
Como estamos utilizando un tema de Bloque personalizado, tiene sentido aprovechar esa funcionalidad. Añadir tu microservicio a un Bloque significa que puedes incluirlo en casi cualquier parte de tu sitio. Para ir un paso más allá, puede que incluso quieras incluir esa funcionalidad en un plugin.
El proceso tiene tres componentes: registrar el Bloque, renderizar el contenido y procesar los datos. JavaScript será tu lenguaje preferido en este caso, y la función registerBlockType
se encargará del registro y la renderización:
// JavaScript function that builds the Block to enable access within the Block Editor.
( function( blocks, element ) {
var el = element.createElement;
blocks.registerBlockType( 'my-micro/stripe-api', {
title: 'Stripe Payment Gateway',
icon: 'dashicons-cart',
category: 'embed',
edit: function() {
return el(
'div',
{},
'' // Create the visual elements of the microservice to display within the Block Editor.
);
},
…
Este es un ejemplo muy básico de registro de un Bloque, y cualquier otra cosa queda fuera del alcance de este post. Sin embargo, puedes ver que es sencillo combinar el plugin Create Block Theme, los microservicios y WordPress. Si utilizas el proveedor de alojamiento adecuado, tienes otra forma de añadir valor a tu arquitectura de microservicios.
Utilizar Kinsta para gestionar y escalar tu sitio de WordPress y tus microservicios
Todo el ecosistema de Kinsta es muy adecuado para gestionar sitios de WordPress utilizando una arquitectura de microservicios. Su core es el alojamiento de aplicaciones. Esto puede facilitar el despliegue de microservicios en contenedores y luego utilizar otras ofertas de Kinsta para mantenerlos.
Por ejemplo, el escalado automático vigilará tus recursos para ayudarte a gestionar los picos de tráfico. Esto significa que tus microservicios pueden ampliarse o reducirse en función de la demanda. Obtendrás las ventajas del rendimiento manteniendo los costes bajos.
Kinsta ofrece alojamiento administrado para diversos tipos de bases de datos:
Este último tiene varios casos de uso diferentes, como caché en memoria, gestor de mensajes, base de datos de vectores y documentos, etc., todo ello sin necesidad de SQL.
Esta variedad significa que Kinsta puede gestionar tanto tu WordPress como tus bases de datos de microservicios sin sudar la gota gorda. Además de su excelente almacenamiento en caché, su compatibilidad con Docker y Kubernetes, su práctico panel de control MyKinsta y mucho más, tienes el pack completo para alojar tus microservicios junto a WordPress.
Resumen
WordPress es monolítico, pero eso no le impide incorporar microservicios. Esto puede tener muchas ventajas, como una mayor escalabilidad, flexibilidad y un desarrollo más rápido.
El plugin Create Block Theme te permite crear una base de código limpia y segura para el resto de tu proyecto. Los microservicios pueden introducir complejidad en tu sitio. Utilizar un Bloque de Temas personalizado significa que puedes implementar esos servicios de la mejor manera para tus necesidades. Si combinas esto con herramientas de desarrollo como DevKinsta y el alojamiento de aplicaciones de Kinsta, tendrás la base ideal para crear aplicaciones web potentes y modernas.
¿Te parece que una arquitectura de microservicios encaja perfectamente con el plugin Create Block Theme? Cuéntanos tus opiniones y experiencias en la sección de comentarios más abajo
Deja una respuesta