Supponendo il seguente scenario:
Un'applicazione web che riceve input dall'utente e processa gli input attraverso un algoritmo che richiede da 5 a 25 minuti (a seconda degli input) e fornisce un risultato diverso. Con i risultati diversi intendo, l'utente non aspetterà il risultato dietro l'interfaccia utente e riceverà una notifica via email quando il calcolo sarà completato.
- La parte dell'algoritmo che elabora gli input dovrebbe essere scalabile.
- L'applicazione deve essere ospitata nei locali.
- Le richieste provengono da utenti a pagamento dovrebbero essere in prima fila.
Sto cercando di progettare un'architettura di alto livello e sono nuovo nel mondo del software, dei contenitori e dei microservizi scalabili.
Questo è un progetto di base approssimativo con cui sono arrivato finora:
Insopra:
- L'appfront-endèresponsabiledellaricezionedegliinputdell'utente.(nonnecessitadiesserescalabileperilmomento)epubblicalerichiestenelserverdimessaggistica.
- IlserverdimessaggisticaèunservercheospitaunsoftwarecomeRabbitMQ.
- Il"gestore code" è un software che deve essere sviluppato che è sottoscritto ai messaggi e assegna le richieste quando è disponibile un'istanza non allocata dell'algoritmo runner. Inoltre, è responsabile dell'ordine della coda, a seconda del piano a cui è abbonato anche l'utente, quindi la richiesta dell'utente a pagamento avrà la priorità.
- L'istanza del corridore di algoritmo si trova all'interno di un container (ad esempio la finestra mobile) che è possibile ridimensionare aumentando il numero delle istanze.
Ecco le mie domande.
-
Questa architettura / design ha senso? Non è eccessivo o viceversa, potrebbe essere troppo semplice?
-
Il mio più grande dubbio è che è necessaria l'app del gestore code o che i contenitori debbano essere sottoscritti direttamente ai messaggi. In questo caso, come funzionerebbe la definizione delle priorità?