Dovrei usare NoSQL o RDBMS per la visualizzazione materializzata in questa implementazione CQRS / ES?

1

Ho intenzione di provare a realizzare un'implementazione di CQRS e ES per l'API di autenticazione per applicazioni su larga scala (utenti 1M). Di seguito è riportato il mio progetto iniziale di architettura (roba relativa a Ignore Azure). Ho intenzione di fare questo approccio perché vedo i seguenti vantaggi:

  1. Anche se l'archivio eventi è inattivo, il sistema di accesso può ancora funzionare (vice versa).
  2. Dal momento che useremo le viste materializzate:
    • La contesa del blocco è più bassa
    • Le operazioni di lettura / scrittura hanno un throughput più elevato

Tuttavia, sono ancora indeciso se si utilizza un database SQL o NoSQL per le visualizzazioni materializzate. Per favore fatemi sapere cosa ne pensate e lo apprezzerei molto bene.

    
posta Allan Chua 07.01.2018 - 01:55
fonte

1 risposta

2

Questa è una domanda difficile perché entrambi i tipi di persistenza presentano vantaggi e svantaggi. Ma, dato che stiamo prendendo in considerazione un modello di lettura CQRS (userò questo termine per la vista materializzata) (supponendo che l'operazione di autenticazione sia fatta in sola lettura, cioè tramite una query) potremmo pensare alle seguenti considerazioni:

  • per ogni tipo di schema di autenticazione supportato potresti avere un'implementazione diversa; ovvero nome utente / password che utilizza NoSQL e accesso one-time-by-email-link utilizzando SQL

  • alcuni schemi di autenticazione come username / password sono facili da implementare; potresti implementarlo per entrambi i tipi persistenti e utilizzare benchmark o test A / B per decidere quale utilizzare; questo è semplice da fare grazie a CQRS e al sourcing di eventi mediante la sottoscrizione di entrambe le modalità di lettura agli eventi di dominio pertinenti

  • entrambi hanno soluzioni per la disponibilità: SQL e NoSQL hanno una sorta di soluzioni di replica (master / slave o set di repliche) ma grazie a CQRS non si è costretti a utilizzare la replica integrata; si potevano semplicemente avere più istanze dello stesso modello di lettura in esecuzione su nodi diversi; qui dipende più dai costi operativi

  • entrambi hanno soluzioni per la scalabilità orizzontale, come il sharding; ma ancora una volta, grazie a CQRS è possibile implementare il sharding creando una tabella / collezione per ogni regione o paese o qualsiasi dimensione abbia più senso; oppure potresti combinare lo sharding integrato con questa tecnica

  • NoSQL semplifica l'archiviazione / recupero delle entità ma se il modello di lettura è semplice (ovvero ID utente, nome utente e password con hash) anche SQL funziona

Quindi, dipende da ogni schema di autenticazione che sosterrai, dalla quantità di codice che scrivi, dai costi operativi di replica / sharding ecc.

    
risposta data 07.01.2018 - 04:05
fonte

Leggi altre domande sui tag