Utilizzo di API esterne nell'architettura microservice

0

Sto scrivendo una piccola applicazione basata su microservizi. A uno dei servizi viene assegnata l'attività di interrogare un'API esterna ed elaborare la risposta JSON (elenco filtrato di case). Dato che sto utilizzando i protocol buffer per serializzare il messaggio che verrà inviato al broker dei messaggi, devo convertire l'output JSON nel formato del protocollo di protocollo appropriato.

Questo è un diagramma che illustra l'architettura generale:

Il problema è che, dal momento che la risposta JSON è lunga, impaginata e ha molti campi nidificati, non esiste un modo semplice per creare manualmente una struttura di messaggio ProtoBuff corrispondente.

Potrei potenzialmente inviare la risposta JSON come stringa di testo e gestirla sul lato del servizio del database, ma questo presenta il problema di come memorizzare ogni oggetto house nel database in modo che possa essere interrogato in seguito.

Unmarshalling dell'intera risposta in una struttura di Go pone gli stessi problemi che si provano nel creare una struttura di messaggi ProtoBuff in primo luogo. Archiviarlo in un database come campo JSON non è un'opzione, poiché è necessario poter interrogare alcuni campi ed estrarre effettivamente ogni descrizione della casa dal corpo della risposta.

Inoltre, la creazione di uno schema di database che corrisponda a centinaia di campi e oggetti nidificati diversi sembra un modo molto noioso per affrontarlo.

Quali sono le migliori pratiche quando si tratta di elaborare un notevole output JSON su molti servizi Web?

    
posta Rtsne42 05.09.2017 - 01:32
fonte

2 risposte

2
  1. Non c'è una chiara motivazione sul perché convertire il formato JSON nel broker dei messaggi. Probabilmente, lasciare un oggetto JSON attraverso il broker dei messaggi è la strada da percorrere.

  2. In termini di quanto profondo dovresti modellarlo, dipende da diversi fattori. Ecco alcuni suggerimenti:

    • Se si tratta di un insieme di informazioni che il microservizio dovrebbe fornire in diversi casi d'uso e informazioni diverse dalle sole API esterne dovrebbero essere archiviate insieme, è un segno che probabilmente dovresti creare il tuo dominio o modello canonico . Fai attenzione non far crescere troppo questo modello - dovrebbe ancora essere un microservizio.
    • D'altra parte, se si tratta fondamentalmente di una "cache" per l'API esterna, l'archiviazione senza alcuna conversione dovrebbe funzionare abbastanza bene.
    • E c'è sempre il percorso intermedio . In questo caso strutturare parte di quei dati e lasciare parte dei dati non strutturati.
  3. La decisione di archiviazione dipende anche da più fattori (controlla i seguenti articoli e domande su Relazionale vs. non relazionale 1 , 2 e 3 - e c'è molto di più disponibile). Dovresti avere in mente che i database delle relazioni (come MySQL) sono usati per memorizzare le relazioni.

    • Sono le relazioni che stai cercando di memorizzare (relazioni multiple o complesse tra entità / classi)? Se questo è il caso: tabelle, relazioni e join dovrebbero essere progettati. Tieni presente che le prestazioni potrebbero essere un problema se sono necessarie troppe relazioni e join.
    • Oppure, se ogni oggetto è autonomo (fondamentalmente composto da aggregazioni), esiste la possibilità di archiviarlo come oggetto. MySQL ha alcune funzionalità JSON che ti consentono comunque non solo per interrogare ma per farlo velocemente con gli indici .
    • Ancora una volta, dovresti considerare se la strutturazione solo di parte dei dati sarebbe interessante.
risposta data 05.09.2017 - 07:04
fonte
4

Penso che la tua domanda non sia particolare nei micro-servizi. Si tratta di come consumare il modello esterno. Generalmente, non è una buona idea consumare e mantenere il modello esterno direttamente. Dalla visualizzazione punti di progettazione basata su domini, i modelli esterni appartengono a un altro contesto di dominio . Di solito, è utile disporre di un Anti-Corruption Layer per mappare il modello esterno sul tuo modello. Con questo, puoi disaccoppiare il tuo modello da quello esterno.

Questo livello anti-corruzione ha il nome del modello " Porte e adattatori ".

Quando hai il tuo modello, dovresti allineare questo modello con il resto del tuo sistema.

    
risposta data 05.09.2017 - 06:32
fonte

Leggi altre domande sui tag