Microservice - sincronizzare l'accesso ai dati [chiuso]

1

Se hai uno scenario con account in qualsiasi valuta. L'account ha ottenuto più righe / elementi per ogni transazione che aggiunge o rimuove un importo dell'account. Sostanzialmente simile a un conto bancario. Il requisito è che un utente sia in grado di vedere l'importo totale dell'account.

Il mio scenario include più client (eventualmente hundrets) che stanno aggiornando l'account. Tutto ciò dovrebbe essere scalabile tramite microservizi.

Il punto cruciale con cui sto lottando è che più client aggiornano sempre lo stesso account.

Come posso sincronizzare l'aggiornamento dell'importo totale dell'account.

Devo sommare tutti gli elementi dell'account su richiesta?

Devo memorizzare l'importo totale, ma come posso aggiornare un singolo record da più client e accertarmi che sia ancora sincronizzato?

Che cosa è la migliore pratica?

Sto utilizzando C # in un'infrastruttura di microsoft azure. Quali componenti, database e così via vengono utilizzati è ancora aperto.

    
posta Florian 16.08.2017 - 17:39
fonte

1 risposta

1

Should I store the total amount, but how can I update one single record from multiple clients and make sure that it is still in sync?

Questa è caching strategia , perché rappresenta mantenere una copia di un valore che è derivabile dagli altri la persistenza.

In generale, la memorizzazione nella cache è un'ottimizzazione che aumenta le prestazioni al costo di una maggiore complessità. Il caching è noto come incline agli errori, il che è indicativo della complessità introdotta. Non dovremmo impegnarci nell'ottimizzazione a meno che non abbiamo il modo di verificare che l'ottimizzazione offra valore di business (come prestazioni osservabili dall'utente finale, costi operativi inferiori, ecc ...), poiché l'ottimizzazione incorrerà in costi di complessità di implementazione riducendo la manutenibilità e l'agilità. Inoltre, le informazioni memorizzate nella cache devono essere mantenute durante la modifica: ciò riduce le prestazioni in alcuni percorsi di codice; quindi, è saggio essere sicuri che si tratti di un vantaggio generale attraverso il test delle prestazioni. (Il caching può anche aumentare i requisiti di spazio, che possono anche influire negativamente sulle prestazioni.)

Considerando che non hai ancora scelto componenti come db per la persistenza; Direi che tale ottimizzazione è prematura.

Quindi, progetta il modello più semplice che possa funzionare, cioè utilizzare la semplice somma della query per trovare le risposte alla somma. Miglioralo dove, quando e solo se c'è un problema.

Quando si avvia un progetto, la correttezza dovrebbe essere una considerazione importante. Dato che più utenti accedono e aggiornano contemporaneamente lo stesso record, la tua preoccupazione per l'integrità della transazione del tuo sistema è ben posizionata.

Riguardo all'ottimizzazione ci sono molte possibilità, quindi quando arrivi così lontano, prendi in considerazione alcune alternative. Per un solo esempio, se gli elementi pubblicitari che cambiano il saldo dell'account sono immutabili come in un log di sola iscrizione, è possibile pubblicare un'istantanea dei totali dell'account su intervalli regolari o come necessari, in modo che una query somma richieda solo la somma ( i pochi) elementi pubblicitari pubblicati dopo l'ultima istantanea totale. Dal momento che un'istantanea su dati di registro non va mai fuori data, non hai un problema di sincronizzazione.

    
risposta data 16.08.2017 - 22:15
fonte

Leggi altre domande sui tag