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 è:
- L'utente aggiunge origini normalizzate (da
core app
) - L'utente accede al feed multimediale e vede i media correlati a tali fonti (anche
core app
, tutto normalizzato) - L'utente può commentare, piacere o valutare il media (questi eventi sono correlati alla tabella media normalizzata in
core app
) - Su una certa frequenza, il servizio raschietto raccoglierà i dati aggiornati o nuovi
- Su una certa frequenza, l'app principale riceverà i dati normalizzati dal servizio di raschiatura, sia vecchi che nuovi verranno visualizzati
- 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:
- Inseriscilo nell'app principale e ho perso la relazione tra origini e contenuti multimediali
- 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.