Che cos'è uno schema canonico in un contesto di architettura dei microservizi?

6

Una domanda recente ha menzionato il termine schema canonico in un contesto di architettura dei microservizi . Dopo aver letto l'articolo di Wikipedia , così come una delle risposte alla domanda, Ancora non capisco cosa schema canonico riguardi . Ho capito che è un modo per disaccoppiare i microservizi facendo un po 'di magia con il modello di dati, ma io sono perso quando si tratta dell'applicazione concreta del modello. Altre risorse stanno parlando di set di informazioni standardizzati, che rendono le cose solo più criptiche.

Immagina che il microservizio A stia consumando messaggi dal microservizio B attraverso un servizio di messaggi in coda. Diciamo che quei messaggi JSON contengono informazioni sulla disponibilità dei prodotti in un magazzino. Mentre A non deve sapere nulla sull'esistenza o sulla posizione di B, immagino che debba ancora sapere:

  • Che i messaggi sono formattati usando JSON. Se B improvvisamente inizia a formattare messaggi in XML, Riesco a malapena a vedere come A si adatterebbe magicamente da solo , a meno che non sia stato specificamente programmato per gestire i messaggi XML e JSON.

  • Il modello dati attuale, limitato alla parte utilizzata da A. Se A richiede semplicemente l'ID prodotto e la disponibilità, A potrebbe non preoccuparsi di sapere che il messaggio JSON contiene anche il nome completo del prodotto o la posizione all'interno del magazzino. Ma deve sapere che l'ID prodotto è memorizzato nel campo /product/id e formattato come GUID e che la quantità è memorizzata in /quantity e formattata come un numero. Di nuovo, se B passa agli ID basati su long per i prodotti, A non sarà in grado di gestirli, a meno che il programmatore abbia in mente questo potenziale cambio di formato.

Quindi, di cosa tratta questo modello di progettazione e come viene utilizzato nella pratica? Dato il mio esempio con i servizi A e B, che cosa succederebbe se venisse applicato un modello di schema canonico?

Forse è tutto su A leggere lo schema di B e adattarsi dinamicamente ad esso? Quindi è esattamente come Swagger, e piace anche leggere WSDL su runtime e determinare come deve essere chiamato un servizio SOAP, vero?

    
posta Arseni Mourzenko 16.11.2016 - 04:27
fonte

1 risposta

6

Nessuna delle precedenti. L'articolo (e il post che si collega a) specifica in modo specifico che MicroServices tende a non a utilizzare uno schema canonico.

Con uno schema canonico, non c'è magia; l'intero punto è che all'interno del tuo ecosistema SOA hai un modello e un formato comuni per una determinata "cosa". È come un contratto. "Ogni volta che rappresentiamo un oggetto Utente, avrà lo schema seguente:".

I microservizi, al contrario, tendono a far valere le proprie esigenze di dati e ad eseguire qualsiasi trasformazione di cui hanno bisogno internamente o quando comunicano con un servizio diverso. Ancora nessun munging dello schema dinamico.

    
risposta data 16.11.2016 - 04:49
fonte

Leggi altre domande sui tag