Come mantenere la relazione della tabella tra i servizi con un'architettura di micro-servizi

1

Ho un servizio di raschietto che cerca i media online. Per ogni tipo di fonte,  ci sono due tabelle. Una tabella source comune e una tabella source_type_media correlate da source.id a source_type_media.source_id , questo servizio memorizzerà le informazioni non elaborate.

Il servizio di raschiamento verrà raschiato ad una certa frequenza tramite un cron job, che cercherà la tabella sources , e quindi gratterà i media in base alle informazioni da quella fonte. Ciò otterrà nuovi dati e aggiornerà i vecchi dati, ad esempio aggiornando il numero di voti positivi di qualsiasi media.

Si noti che tutti i dati si trovano in tabelle multimediali diverse perché i media di ogni sorgente possono avere strutture di dati diverse e sono memorizzati in formato raw, chiamiamolo source_a_media , source_b_media , source_c_media .

L'altro servizio che ho è il mio servizio principale dell'app, a cui parlerà l'interfaccia utente. Questo servizio di base richiederà una richiesta al servizio di raschiatura, che normalizzerà e aggregherà i dati multimediali dalle diverse fonti. Questi dati normalizzati vengono quindi passati all'app principale, che verrà archiviata nel DB dell'app principale.

A questo punto perdiamo la relazione tra la tabella di origine poiché è correlata solo ai dati non elaborati.

Desidero mantenere questa relazione perché il flusso dell'interfaccia utente consente agli utenti di aggiungere prima le fonti a cui sono interessati e solo i relativi media verranno visualizzati nei loro feed.

Credo che sarebbe più corretto se lasciamo i dati normalizzati nel servizio di raschiamento e l'app principale può proxy la richiesta ogni volta che è necessario, al servizio di raschietto, tuttavia ho un avvertimento. L'utente dovrebbe essere in grado di creare commenti sul supporto normalizzato, pertanto ciò significa che i dati normalizzati devono trovarsi in una posizione in cui si trovano questi commenti.

Quindi il flusso totale è:

  1. L'utente aggiunge origini normalizzate (da core app )
  2. L'utente accede al feed multimediale e vede i media correlati a tali fonti (anche core app , tutto normalizzato)
  3. L'utente può commentare, piacere o valutare il media (questi eventi sono correlati alla tabella media normalizzata in core app )
  4. Su una certa frequenza, il servizio raschietto raccoglierà i dati aggiornati o nuovi
  5. Su una certa frequenza, l'app principale riceverà i dati normalizzati dal servizio di raschiatura, sia vecchi che nuovi verranno visualizzati
  6. Se l'utente torna al suo feed multimediale, l'utente dovrebbe essere in grado di vedere le informazioni aggiornate su quel supporto

A seconda di dove ho inserito il supporto normalizzato, ho un problema diverso:

  1. Inseriscilo nell'app principale e ho perso la relazione tra origini e contenuti multimediali
  2. Inseriscilo nel servizio di raschietto e non sarà in grado di correlare i commenti degli utenti / Mi piace / ecc con il supporto normalizzato

Penso che forse dovrei mettere un UUID su ciascuna fonte e ogni media che sarà uguale su tutti i miei servizi, ma questa non sembra più un'architettura di micro-servizi.

    
posta PGT 09.08.2018 - 08:16
fonte

0 risposte