WordPress è un potente sistema di gestione dei contenuti (CMS) che può gettare le basi per diversi tipi di siti e applicazioni. Utilizza una tipica “architettura monolitica”, ma con la crescita del sito questa potrebbe non essere la soluzione migliore. È qui che un’architettura a microservizi potrebbe rivelarsi più utile.
In questo articolo analizzeremo come costruire applicazioni web per WordPress utilizzando un’architettura a microservizi. Inoltre, parleremo del plugin Create Block Theme e discuteremo di come questa interessante soluzione può adattarsi a un workflow di sviluppo.
Cosa sono i microservizi
Prima di costruire qualsiasi applicazione web, dobbiamo capire cosa sono i microservizi e come si differenziano dalle architetture monolitiche.
Con l’architettura monolitica, c’è uno stretto legame tra tutti i componenti di un’applicazione. In sostanza, viene eseguita come un unico servizio. È un modo semplice di sviluppare un’applicazione, anche se la manutenzione e la scalabilità possono diventare una sfida man mano che la complessità aumenta.
Al contrario, i microservizi aiutano a suddividere l’applicazione in un insieme di servizi più piccoli. Ogni servizio è indipendente dall’altro per quanto riguarda lo sviluppo, la distribuzione e la scalabilità.
Ogni servizio gestisce un compito specifico e comunica con gli altri servizi attraverso un’interfaccia di programmazione dell’applicazione (API). Ad esempio, consideriamo un tipico sito di e-commerce con carrello, cassa, elaborazione dell’ordine, pagina del prodotto e altro ancora.
In un’architettura monolitica, tutte queste funzionalità farebbero parte di un’unica grande applicazione. WordPress è monolitico e l’utilizzo di Woo come piattaforma ecommerce ne è un ottimo esempio.
Tuttavia, l’implementazione di un’architettura a microservizi permette di utilizzare la tecnologia giusta per ogni compito. Ad esempio, potremmo utilizzare il CMS di WordPress, il migliore della categoria, per il content marketing. Adobe Commerce potrebbe essere il nostro sistema di gestione dei prodotti, mentre una soluzione di checkout come Bolt potrebbe essere più adatta alle nostre esigenze.
Mettere insieme questi elementi è possibile con i microservizi. Vediamo quindi più dettagliatamente perché dovreste prendere in considerazione i microservizi per il vostro prossimo progetto.
Cosa distingue i microservizi dalle architetture monolitiche
L’idea di base dei microservizi è quella di combinare tecnologie e strumenti diversi per creare uno unico. Tuttavia, ci sono altre caratteristiche più significative che vale la pena sottolineare:
- Separazione: ogni servizio mantiene la propria indipendenza. Questo significa che è possibile utilizzare la tecnologia migliore per ogni lavoro, piuttosto che dover gestire strutture inadatte.
- Autonomia: per estensione, i servizi che vengono integrati non devono dipendere l’uno dall’altro per funzionare in modo performante.
- Specializzazione: naturalmente, ogni servizio si concentrerà sul proprio lavoro, il che influisce nuovamente sulle prestazioni.
- Resilienza: una parte di questa risorsa intrinseca e performante è che un guasto a un servizio non farà crollare l’intero sito.
Oltre a questi aspetti, l’uso dei microservizi offre altri vantaggi:
- Scalabilità: è possibile scalare i singoli servizi in base alle singole esigenze senza impattare sul resto dell’applicazione.
- Flessibilità: abbiamo già illustrato brevemente come i servizi possano utilizzare la tecnologia migliore per il loro lavoro. Questo si estende anche ai linguaggi di programmazione che utilizziamo per crearli.
- Sviluppo più veloce: possiamo sviluppare più rapidamente servizi piccoli e mirati, comprendere meglio le funzionalità del nostro servizio e mantenere il sistema con maggiore facilità.
- Migliore isolamento dei guasti: grazie alla configurazione “modulare”, si può isolare un servizio in caso di guasto senza influenzare gli altri servizi.
D’altro canto, i microservizi possono introdurre complessità nella comunicazione, nella coerenza dei dati e nella gestione dei sistemi distribuiti. Per questo motivo, è necessario valutare attentamente i requisiti dell’applicazione. In breve, è bene considerare sia i benefici che i compromessi prima di decidere di utilizzare i microservizi.
I componenti di un’architettura a microservizi
Come è facile intuire, un’architettura a microservizi può essere costituita da diversi componenti. Questi “ingranaggi” lavorano insieme nell’intera “ruota” per fornire un’applicazione scalabile e manutenibile.
Per questo motivo, ci sono alcuni componenti che sono fondamentali per un’implementazione senza problemi:
- Gateway API: è il punto di ingresso per le richieste dei client. Sposta le richieste ai microservizi appropriati. Può anche gestire attività come la limitazione della velocità e l’autenticazione.
- Individuazione dei servizi: sarà necessario impiegare un metodo dinamico per permettere ai microservizi di eseguire la discovery e comunicare tra loro. Strumenti come Consul o Eureka possono aiutare in questo senso.
- Containerizzazione: è comune impacchettare e distribuire i microservizi come contenitori utilizzando strumenti come Docker. In questo modo si garantisce l’isolamento di ogni servizio.
- Orchestrazione: man mano che si aggiungono microservizi all’applicazione, la loro gestione diventa più complessa. Uno strumento come Kubernetes può aiutare ad automatizzare la gestione dei servizi.
- Caching: i meccanismi di caching come Redis o Memcached spesso migliorano le prestazioni. Questo può rivelarsi fondamentale, visto che i servizi di backend e i database sono più sollecitati.
- Messaggistica: ovviamente i servizi devono anche parlare tra loro. Questo è il compito delle soluzioni di messaggistica “asincrona” come RabbitMQ o Apache Kafka. Questi “message broker” consentono un accoppiamento lasco tra i microservizi.
Gli strumenti, però, sono solo un aspetto della configurazione. Ci sono altre considerazioni da fare, come ad esempio il modo in cui ogni microservizio sarà progettato all’interno dell’architettura completa.
Modelli di progettazione per i microservizi
I modelli di progettazione per i microservizi sono importanti sia in questo caso che in altre fasi del flusso di sviluppo. Data la potenziale complessità dell’applicazione, è importante considerare quali modelli avranno il maggiore impatto. Ne possiamo indicare tre:
- Database per servizio: ogni microservizio utilizza il proprio database dedicato, il che contribuisce all’isolamento e all’autonomia dei dati.
- Composizione di API: si possono comporre i microservizi per creare servizi o API di livello superiore. Questa flessibilità e riutilizzabilità è uno dei principali vantaggi.
- Architettura guidata dagli eventi: in questo caso, i servizi comunicano attraverso gli eventi. Questo facilita un accoppiamento meno rigido e un’elaborazione asincrona.
È inoltre fondamentale tenere conto di modelli di progettazione specifici per gli strumenti che utilizzeremo per costruire la nostra architettura. Ad esempio, Docker e Kubernetes hanno entrambi dei modelli tipici da tenere in considerazione insieme al design globale dell’architettura.
Tuttavia, non è necessario che ogni componente sia un microservizio. L’idea giusta è quella di iniziare con i servizi chiave e far evolvere l’architettura nel tempo. Più avanti ne parleremo in modo più dettagliato. Per prima cosa, dobbiamo vedere come sviluppare il frontend.
Introduzione del plugin Create Block Theme
Probabilmente WordPress sarà presente da qualche parte nell’architettura, dato che è eccellente sotto molti punti di vista. Uno di questi è la sua facilità d’uso nel frontend. I temi sono una parte fondamentale della piattaforma e crearne di propri è molto più semplice grazie a plugin come Create Block Theme.
Questo plugin è il successore spirituale del tema starter Underscores, ma è completamente compatibile con il full site editing (FSE). Possiamo creare velocemente un tema iniziale, sfruttare tutta la potenza dell’editor e sfruttare tutte le opzioni di personalizzazione. Funziona come un tipico plugin di WordPress, con la possibilità di esportarlo come tema indipendente in un secondo momento.
L’uso del plugin Create Block Theme insieme a un’architettura a microservizi può “incollare” tutto insieme. Ad esempio, possiamo utilizzare i Block Pattern e i blocchi riutilizzabili in diversi siti WordPress. In questo modo si favorisce il riutilizzo del codice e la coerenza, ma si può anche dare un aspetto unificato a tutti i singoli servizi che si utilizzano.
Esploreremo i dettagli dell’uso di Create Block Theme più avanti in questo post. Per ora, parliamo di WordPress headless e di come i microservizi possono influenzarlo.
L’intersezione tra WordPress headless e un’architettura a microservizi
Se vogliamo separare il front-end e il back-end di WordPress, i microservizi possono rappresentare un passo avanti “naturale”. Nel caso del tipico WordPress headless, la piattaforma serve solo per la gestione dei contenuti. Potrebbe essere utilizzata come API.
Combinando WordPress headless con un’architettura a microservizi, potremo:
- Sfruttare l’API REST di WordPress. WordPress fornisce un’API REST integrata che permette di recuperare e manipolare i contenuti in modo programmatico. Possiamo utilizzare questa API per integrare i nostri microservizi con WordPress.
- Avere una scalabilità indipendente del frontend e del backend. Con due parti indipendenti del sito, potremo scalare entrambe e ottenere prestazioni migliori. Nonostante la complessità, si ottiene una grande flessibilità.
Successivamente, vogliamo concentrarci un po’ di più sull’API REST. È il modo in cui useremo i microservizi, quindi è una parte fondamentale dell’intera catena.
Microservizi e API REST di WordPress
L’API REST di WordPress svolge un ruolo fondamentale nel consentire l’integrazione tra il nostro sito e i microservizi. I suoi endpoint permettono di recuperare e manipolare i post, le pagine, gli utenti, le tassonomie e altro ancora di WordPress utilizzando l’output in 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"
},
…
In quanto tale, l’API REST è il fulcro di tutti gli altri servizi dell’architettura. Questo significa che dovremo scegliere quali servizi del sito attuale estrarre come microservizi. Vedremo questo aspetto in modo più dettagliato più avanti nel post.
In poche parole, la chiave è identificare le diverse funzionalità e responsabilità all’interno dell’applicazione web. Da lì, potremo dividerle in microservizi indipendenti, mirati e distribuibili.
Costruire un’applicazione web con Create Block Theme e i microservizi
Il resto di questo articolo tratterà le basi dei microservizi e di WordPress headless. Ne parleremo in termini olistici, poiché il processo effettivo sarà specifico per le proprie esigenze.
Ad ogni modo, addentriamoci nel processo di costruzione di un’applicazione web utilizzando i microservizi e il plugin Create Block Theme. Il primo passo è quello di configurare l’ambiente di sviluppo.
1. Creare un ambiente di sviluppo
Ogni app inizia con uno spazio per crearla. Per questo motivo, avremo bisogno di un ambiente di sviluppo. Ci sono due luoghi per lo spazio di sviluppo: il nostro computer locale e il nostro server.
Ci sono molti modi per configurare un ambiente di sviluppo locale, anche se noi (naturalmente) consigliamo DevKinsta:
Raccomandiamo anche un ambiente di staging, in quanto è necessario un modo per testare le modifiche prima di distribuirle. Se sceglierete DevKinsta e siete clienti Kinsta, otterrete una maggiore connettività al server:
DevKinsta installerà Docker per noi, eliminando un elemento dalla nostra lista di cose da fare. Nel caso avessimo deciso di utilizzare Kubernetes per l’orchestrazione, dovremo installarlo adesso. Kinsta lo utilizza per le applicazioni di hosting di database e per altre attività; si può scaricare da Docker Desktop:
Da qui, dovremo anche configurare tutti gli altri framework di cui abbiamo bisogno per sviluppare il nostro tema. Tuttavia, non saremo in grado di fare nulla senza il plugin Create Block Theme, quindi vediamo subito come funziona.
2. Configurare il plugin Create Block Theme
Una volta configurato l’ambiente di sviluppo, possiamo iniziare a lavorare con il plugin Create Block Theme per creare il nostro tema personalizzato a blocchi. Avremo bisogno anche di quanto segue:
- Un sito web WordPress con cui lavorare.
- L’editor di codice che preferiamo.
- Il plugin Create Block Theme.
Possiamo installare il plugin nel modo tipico di WordPress. Da lì, andiamo al link Aspetto > Create Block Theme di WordPress:
A parte questo, se controlliamo la scheda Aspetto, potremo notare l’opzione Gestisci i font del tema. Creare un tema a blocchi dà accesso anche a questa opzione, che è essenzialmente la funzione della libreria di font di WordPress 6.5.
Nella schermata di Create Block Theme dovremmo vedere un elenco di opzioni per generare un nuovo tema. Non le esamineremo tutte, ma sceglieremo di clonare Twenty Twenty-Four. In ogni caso, verranno visualizzati una serie di opzioni e campi:
Questi campi diventeranno i campi di identità del tema all’interno del nostro file style.css
. Sono semplici e consistono nella scelta di un nome, di uno screenshot, di un URL e di alcuni tag per la directory del tema di WordPress.
Dopo aver cliccato per confermare, andiamo di nuovo alla schermata Aspetto > Temi e vedremo il nuovo tema pronto e in attesa:
In alcuni casi, dovremo scaricare un file ZIP del tema che dovremo caricare su WordPress. È possibile anche esportare il tema, ma per il nostro caso d’uso non lo faremo in questo momento.
Suggerimenti per la configurazione e l’utilizzo di Create Block Theme
Non ci addentreremo troppo nella personalizzazione del nuovo tema a blocchi, perché questo esula dallo scopo dell’articolo. Tuttavia, ecco alcuni suggerimenti per l’utilizzo di Create Block Theme:
- Le modifiche possono essere effettuate in due modi. Si può utilizzare l’opzione Stili globali nell’Editor del sito oppure personalizzare il file theme.json.
- È una buona idea creare un blocco per il microservizio scelto. Ne parleremo più avanti.
- Create Block Theme permette di generare un tema child basato sul tema attivo corrente. Tuttavia, la scelta dipenderà dai propri obiettivi.
Parliamo un po’ di più dell’ultimo punto. Se si tratta di un tema da creare e distribuire, vorremo lavorare all’interno del tema genitore. Per uso personale, potrebbe essere utile personalizzare solo il tema child. Come regola generale, meno un tema è “popolato” all’inizio, più dovremmo lavorare all’interno del tema principale.
3. Estrarre i microservizi scelti
Quando il tema a blocchi è pronto, è il momento di esaminare più da vicino i microservizi. Una decisione chiave che dovremo prendere è quali servizi diventeranno “micro”.
Questa può essere una domanda complessa e soggettiva a cui bisognerà rispondere secondo le esigenze di ogni caso specifico. Ci sono però alcuni fattori da tenere in considerazione:
- Le funzionalità del sito: esaminiamo tutte le funzionalità distinte che il sito offre e consideriamo la possibilità di suddividerle in un microservizio separato, come ad esempio le funzionalità di pagamento.
- Scalabilità indipendente: un servizio esistente che si basa sulla scalabilità indipendente sarà un buon candidato per i microservizi. Il caching potrebbe esserne un esempio.
- Diversità tecnologica: se abbiamo bisogno di allontanarci dall’architettura PHP di WordPress, questo è un altro candidato per i microservizi. Potrebbe essere il caso di specifiche piattaforme di ecommerce o di componenti backend.
- Isolamento dei dati: i servizi con requisiti di archiviazione dei dati personalizzati potrebbero essere dei microservizi. Questo vale anche se questi servizi non hanno bisogno di condividere i dati con altri.
A nostro avviso, è una buona idea creare microservizi che forniscano funzionalità API specifiche. Potrebbe trattarsi di ricerca, elaborazione dei pagamenti o autenticazione. Se questi servizi sono in grado di reagire con altre API di primo livello e di terze parti, diventano più flessibili e preziosi.
Sviluppare e distribuire i microservizi
Per lavorare e infine distribuire i nostri microservizi, dovremo affidarci ad altri strumenti. Ecco alcune considerazioni e strumenti chiave da utilizzare:
- Docker sarà spesso il modo per containerizzare i microservizi. Il microservizio e le sue dipendenze vengono impacchettati insieme, rendendo più facile la distribuzione e la scalabilità.
- Ogni microservizio avrà bisogno di un Dockerfile. Deve specificare le dipendenze, le configurazioni e l’ambiente di runtime necessari.
- L’uso di Kubernetes per l’orchestrazione e la gestione dei container. Kinsta offre una potente piattaforma con supporto integrato per Kubernetes.
- Le pipeline di integrazione e distribuzione continua (CI/CD) possono essere il modo per automatizzare creazione, test e distribuzione. Strumenti come GitLab e Travis CI possono aiutarci a ottimizzare i processi CI/CD.
- Le funzioni serverless non necessitano di un server completo, quindi sono ideali per i microservizi. Piattaforme come AWS Lambda, Google Cloud Functions o Azure Functions permettono di eseguire il codice senza dover fornire o gestire i server.
- I gateway API forniscono un unico punto di ingresso per i microservizi. Strumenti come Kong o Amazon API Gateway possono aiutare a gestire e proteggere le nostre API. Inoltre, possono gestire attività come l’autenticazione, il rate limiting e il routing delle richieste.
A questo punto, avremo un sito web WordPress e un microservizio indipendenti l’uno dall’altro. Il passo finale è quello di integrarli.
4. Integrare i microservizi con WordPress
Una volta sviluppati e distribuiti i microservizi, dovremo integrarli con WordPress. Per farlo, dovremo effettuare delle chiamate API da WordPress agli endpoint che il microservizio espone. Per questo motivo, è necessario conoscere a fondo le API REST.
Il modo tipico per farlo in WordPress è con wp_remote_get()
o wp_remote_post()
. Questo permetterà di inviare richieste HTTP e di gestire le risposte. Ecco un esempio di codice che illustra come tutto questo possa essere integrato:
// 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
// ...
}
I microservizi spesso traggono vantaggio dal recupero asincrono dei dati per evitare di bloccare il thread principale. WordPress può combinare due elementi per ottenere questo risultato. Possiamo utilizzare il pacchetto API Fetch, insieme al supporto per async
e defer
introdotto in WordPress 6.3. Il codice potrebbe assomigliare a questo:
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
// ...
})
...
Potremmo anche prendere in considerazione AJAX per effettuare aggiornamenti dinamici dell’interfaccia utente (UI).
Naturalmente, anche l’autenticazione e le misure di sicurezza sono fondamentali. L’API REST di WordPress prevede alcuni modi per autenticare le sessioni, come l’utilizzo di cookie, JSON Web Tokens (JWT) o Application Passwords. Dato che ci si affida a soluzioni esterne, è fondamentale mantenere sicuri i microservizi e il sito.
Dato che stiamo usando un tema personalizzato a blocchi, ha senso sfruttare questa funzionalità. Aggiungere il microservizio a un blocco significa poterlo includere praticamente ovunque nel sito. Per fare un ulteriore passo avanti, potremmo anche includere questa funzionalità in un plugin.
Il processo prevede tre componenti: la registrazione del blocco, il rendering del contenuto e l’elaborazione dei dati. Il linguaggio scelto è JavaScript e la funzione registerBlockType
si occuperà della registrazione e del rendering:
// 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.
);
},
…
Questo è un esempio molto elementare di registrazione di un blocco e qualsiasi cosa in più va oltre lo scopo del post. Tuttavia, possiamo vedere che è semplice combinare il plugin Create Block Theme, i microservizi e WordPress. Se utilizziamo il giusto provider di hosting, avremo un altro modo per aggiungere valore alla nostra architettura di microservizi.
Utilizzare Kinsta per gestire e scalare sito WordPress e microservizi
L’intero ecosistema di Kinsta è adatto alla gestione di siti WordPress con un’architettura a microservizi. L’elemento centrale è l’Hosting di Applicazioni. Questo può rendere semplice l’implementazione di microservizi containerizzati e l’utilizzo delle altre offerte di Kinsta per la loro manutenzione.
Ad esempio, lo scaling automatico tiene sotto controllo le risorse per gestire i picchi di traffico. In questo modo i microservizi possono aumentare o diminuire in base alla domanda, e otterremo vantaggi in termini di prestazioni, mantenendo bassi i costi.
Kinsta offre hosting gestito per una serie di tipi di database:
Quest’ultimo ha diversi utilizzi, come ad esempio una cache in-memory, un broker di messaggi, un database di vettori e documenti e molto altro ancora, il tutto senza la necessità di utilizzare SQL.
Grazie a questa varietà, Kinsta è in grado di gestire sia i database di WordPress che quelli dei microservizi, senza sforzo. Oltre al caching di prim’ordine, al supporto di Docker e Kubernetes, all’elegante dashboard MyKinsta e ad altro ancora, avrete il pacchetto completo per ospitare i vostri microservizi insieme a WordPress.
Riepilogo
WordPress è monolitico, ma ciò non gli impedisce di incorporare microservizi. Questo può avere molti vantaggi, come una migliore scalabilità, flessibilità e uno sviluppo più rapido.
Il plugin Create Block Theme permette di creare una base di codice pulita e sicura per il resto del proprio progetto. I microservizi possono introdurre complessità nel vostro sito. L’utilizzo di un tema a blocchi personalizzato permette di implementare questi servizi nel modo migliore per le vostre esigenze. Se combinate questo con strumenti di sviluppo come DevKinsta e l’Hosting di Applicazioni di Kinsta, avrete la base ideale per creare applicazioni web potenti e moderne.
L’architettura a microservizi vi sembra perfetta per il plugin Create Block Theme? Condividete con noi le vostre opinioni ed esperienze nella sezione commenti qui sotto!
Lascia un commento