nei sistemi multi-tenant qual è la pratica corretta per separare i dati dei tenant l'uno dall'altro?

2

Sono uno sviluppatore azzimato per la prima volta e sto acquisendo un sistema cloud single-tenant e ho il compito di convertire il sistema in multi-tenant. Qual è la pratica corretta per separare i dati del server sql di ciascun titolare?

È una raccolta di dati e amp; sistema di segnalazione. Ogni inquilino vorrà costruire ed eseguire i propri report personalizzati sui dati. Quindi, in multi-tenant, in che modo gli utenti non possono vedere i reciproci dati?

    
posta GBH 04.03.2014 - 11:11
fonte

2 risposte

3

Non esiste un modo "corretto" di fare qualsiasi cosa nella programmazione, anche con un'architettura specifica di cloud computing come Windows Azure.

Una ricerca rapida della documentazione MSDN rivela che Azure ha in effetti alcune funzionalità utili per aiutarti a separare i dati del tuo cliente. Sembra che si possa decidere di assegnare a ciascun client la propria istanza del server SQL, oppure si potrebbe invece utilizzare un'istanza comune da partizionare direttamente o sfruttare alcune funzionalità integrate per partizionare per te.

Ciascuna di queste soluzioni ha i suoi pro e contro, che dovrai valutare autonomamente. Alcune indicazioni concettuali sulla selezione:

  • Se si utilizza un'istanza separata per ciascun client, si avrà una separazione integrata per i dati dei propri clienti, ma una ridotta capacità di esaminare i dati da più client. Microsoft potrebbe inoltre addebitare ulteriori costi aggiuntivi.
  • Se si utilizza la stessa istanza ma si partizionano manualmente i dati in un singolo database, sarà necessario gestire e regolare autonomamente le varie chiavi e indici. Ovviamente non vuoi che i 50.000.000 di record di un cliente di grandi dimensioni rallentino la query dei 500 record di un cliente più piccolo.
  • Se si assegna a ciascun client uno schema o un database distinti nell'istanza del server singolo, la gestione delle query diventa più semplice, ma potrebbe essere necessario preoccuparsi dei blocchi del server. (Sul lato positivo, un separatore-db-per-cliente potrebbe consentire di semplificare la transizione.)
  • Se usi gli strumenti di partizione Bulit-in di Microsoft, è probabile che finiscano per fare esattamente ciò che vuoi che facciano. Oppure puoi ottenere il 70% del modo di implementare e scoprire un bisogno che i loro strumenti non coprono, richiedendo di abbandonare gran parte del tuo lavoro. (La ricerca e modelli appropriati sono importanti quando si utilizza la toolchain di chiunque altro.)

Per quanto riguarda la domanda "come si spostano i dati da una singola istanza a una multiistanza", immagino che sarebbe in gran parte questione di costruire la nuova architettura e quindi di importare i vecchi dati. Avrai comunque bisogno di sapere come farlo per i futuri clienti.

    
risposta data 04.03.2014 - 18:26
fonte
2

Molte persone salteranno immediatamente all'idea di avere un database per cliente. Nella maggior parte dei casi questo non è necessario e crea ulteriori problemi nel mantenere sincronizzate le strutture del database. Ovviamente, se si desidera che abbiano strutture di database diverse (diverse definizioni di tabelle e tabelle) o si desideri concedere loro l'accesso diretto al database, questo è ciò che si desidera fare.

Il metodo più tipico per i sistemi multi-tenant è separare logicamente i dati nel database tramite un'organizzazione o un ID cliente. Se i tuoi dati sono più o meno normalizzati, le tue query sul database non dovrebbero diventare molto più complesse, se devi addirittura modificarle.

    
risposta data 04.03.2014 - 18:35
fonte