Il modo giusto di manipolare le immagini in un'applicazione senza server

0

Questa domanda non è specifica per le immagini, ma questo è il problema attuale che ho così im usando questo come esempio.

Quindi, in pratica, ho una sorta di pipeline che alcuni dati (in questo caso un'immagine) devono passare prima che possano essere utilizzati nella mia app (in questo caso, un'app Web).

Se dividessimo la pipeline in funzioni, sarebbe come questa: 1. L'immagine viene caricata su una memoria (cloud storage). 2. L'immagine viene convertita in più formati e dimensioni. 3. Tutte le diverse dimensioni e formati sono registrati nel database in relazione al file originale.

La mia domanda è, quale sarebbe il modo giusto di gestire questo processo e tenere traccia degli errori, dei tentativi, dell'aggiornamento del front-end, ecc.

Penso che sto cercando di risolvere questo compito con la mentalità sbagliata, e quindi sto ottenendo una cattiva soluzione. Ma forse le funzioni non sono la strada giusta. Forse ho bisogno di disattivare le funzioni cloud e utilizzare qualche altra soluzione serverless, come ad esempio "AppEngine di Google".

Attualmente, ho una funzione con un endpoint HTTP che: 1. Ricevi il file e trasferiscilo nella memoria Cloud (lo faccio perché cerco di evitare un front end pesante). 2. Salvare il nome del file nel DB con il nome temporaneo e lo stato (lo stato è attualmente in attesa di ottimizzazione / ritaglio). 3. Il caricamento in Cloud Storage attiva un'altra funzione che avvia l'ottimizzazione e il ritaglio dell'immagine. 4. Aggiornare il DB con lo stato e tutti i nomi dei file secondari. 5. cancella il file originale.

Il problema è che tra 2 e 3, c'è un collegamento interrotto. Non posso davvero sapere cosa sta succedendo dal lato client senza più richieste al DB per vedere lo stato dell'immagine.

Quindi è questo il modo giusto? c'è un modo migliore? Ho trovato alcuni problemi simili in tutto lo sviluppo della mia app, come ad esempio con la convalida dei dati, e questo mi ha fatto pensare che forse sto sbagliando.

    
posta Samuel E. 17.12.2018 - 12:38
fonte

1 risposta

2

Una cosa che ho imparato fin da subito a fare questo tipo di procedure complicate è quella di nominare e registrare chiaramente i passi compiuti finora. Se qualcosa va storto (e qualcosa sarà), si vuole assolutamente essere in grado di risalire all'ultima operazione effettiva eseguita. Più informazioni e dettagli puoi fornire riguardo a questo, meglio è. Se ci sono parametri come ID associati, insieme con l'ultimo passo eseguito, dovresti includere anche queste informazioni in modo da semplificare il debugging.

La prossima cosa che vorrai fare è avere un'eccezione generale che possa registrare errori imprevisti (quindi rethrow in modo che tali errori non siano nascosti). Quindi quando si avvia, ogni errore è un errore imprevisto. Quando trovi problemi e li risolvi, decidi quale di questi problemi è qualcosa che è un dealbreaker o se puoi continuare ugualmente.

Se riesci a gestirli ugualmente, prendi l'errore specifico , affrontalo e procedi con il passaggio successivo. Se non puoi, almeno conosci l'ultimo passo compiuto e tutti i dettagli passati a quel passo. Idealmente registreresti errori come questo, ma non dipende sempre da te, quindi la prossima cosa migliore è essere in grado di ricreare i singoli passaggi.

Conosci tutte le immagini che non sono state completamente elaborate perché non avranno un passaggio finito (e non avranno la data di elaborazione entro l'ultima ora circa). Se preferisci ridurre il disordine, se preferisci puoi eliminare la registrazione passo passo di tutte le operazioni eseguite dopo che il processo è terminato correttamente per una determinata immagine, anche se ti incoraggio almeno a lasciare una funzionalità che ti permetta di impedirne l'eliminazione quando richiesto (potrebbe tornare utile in produzione).

Spero di averti dato una visione.

    
risposta data 17.12.2018 - 14:43
fonte

Leggi altre domande sui tag