Sono in procinto di progettare un server responsabile della pubblicazione di file con dimensioni comprese tra 10 MB e 50 MB.
Inizialmente eseguiremo due istanze del server (chiamiamole fs1
e fs2
), con i piani futuri di passare a un'architettura di micro-servizi, in cui le istanze del server aumenteranno o diminuiranno a seconda del carico.
Queste due istanze devono interagire con un terzo server che esegue un programma di pianificazione e un'applicazione di gestione file, nonché un database (su un altro server) in cui verranno salvati alcuni metadati da utilizzare per i client.
Le mie riflessioni iniziali su dove usare un rabbitmq per consentire a fs1 e fs2 di comunicare tra loro e l'app di gestione. il processo avrebbe funzionato come segue:
- L'app di gestione viene caricata sul server fs1 (potrebbe essere fs1 o fs2)
- fs1 notifica fs2 e l'app di gestione al termine del caricamento
- fs2 contatta fs1 e memorizza una copia del file
- fs2 notifica l'app di gestione al termine del caricamento
- L'app di gestione salva i metadati nel database esterno
- sia fs1 che fs2 ora possono eseguire il server dei file quando richiesto
Questo sembra OK, se ci sono solo due istanze, ma una volta che inizi ad aggiungerne altre non funziona.
Il nostro reparto operativo è molto contrario all'idea di utilizzare il database per archiviare i file. Sono preoccupati che rallenterà troppo il sistema. Sono d'accordo che potrebbe, ed è per questo che voglio un database separato per lo scopo specifico di archiviare i file e i metadati.
Voglio costruire qualcosa di simile al seguente:
Penso che il servizio di upload possa gestire il caricamento di file e il salvataggio dei metadati nel database.
Quando lo schedulatore pianifica un nuovo lavoro, il servizio di upload (mal chiamato, lo so, ma non lo faccio di nuovo :-)) può notificare le istanze del file server di cui hanno bisogno per memorizzare nella cache i file richiesti dal database, a cui possono accedere direttamente.
I file server non dovranno memorizzare più di 5 o 6 file alla volta.
Inoltre, nello schema mi sono perso il fatto che il servizio di gestione dei file riceverà i messaggi di avanzamento download da entrambi i file server.
Quindi alle mie domande:
- È un modo ragionevole per archiviare file di queste dimensioni per essere pubblicati?
- È questo il modo giusto di pensare quando si considera il passaggio ai microservizi in futuro?
- Ci sono dei vantaggi nell'archiviazione dei file sul file system di ogni istanza di fs invece che nella cache?
- Come posso convincere il nostro team operativo che la memorizzazione di 50 MB di file in un database è la strada da percorrere? quali sono i pro e i contro?
- Ogni altro pensiero o commento è apprezzato.