Sto cercando di creare una soluzione SaaS basata sul Web e ho intrapreso una strada in cui non sono sicuro di utilizzare la multi-tenancy o la multiistanza. Proverò a descrivere ciò che sto cercando di ottenere e ogni approccio presenta vantaggi e svantaggi (la mia opinione, secondo quanto ho letto). Ti preghiamo di includere i tuoi suggerimenti nel caso in cui avessi perso qualcosa in un approccio rispetto all'altro.
L'applicazione che sto cercando di creare è, come ho già detto, una soluzione SaaS in cui le aziende possono creare i propri account e ogni account / azienda ha i propri utenti, clienti, prodotti, servizi ... ecc. Ogni utente; chi è un dipendente dell'azienda; relativi a un account / azienda avranno accesso solo ai clienti, ai prodotti e ai servizi dell'azienda. Le aziende potrebbero avere un numero illimitato di clienti, prodotti e servizi, quindi ogni azienda dovrebbe avere il proprio data center.
Per questo ho deciso di creare un database condiviso (salvando tutte le credenziali degli utenti ai fini del login) e lo schema condiviso di più database (database per account / azienda). Fondamentalmente, multi-locazione .
Quindi qualcuno ha suggerito di usare invece Multi Instance , dove ogni azienda avrà la propria istanza dell'applicazione (cioè codice, librerie, database, framework ... ecc.) Totalmente separata dalle altre società. Suona meglio perché non devo occuparmi di un livello aggiuntivo in cui devo assicurarmi che gli utenti di ciascun inquilino abbiano accesso solo ai dati della loro azienda. Penso che sia bello ricordare che dipendo da Docker per raggiungere questo approccio (non l'ho mai usato prima), ma penso che manchi di funzionalità (più su quelle successive) di cui avrò bisogno in futuro (almeno non l'ho fatto li trovi con un po 'di ricerca).
Tuttavia, ogni approccio presenta vantaggi e svantaggi, quindi non ho potuto decidere quale approccio seguire. Ecco un elenco, ma nudo con me poiché non ho la conoscenza di entrambi, quindi potrebbe esserci qualcosa di cui non sono a conoscenza, o una soluzione per un problema che non ho trovato sul web: [Ogni approccio ha un elenco ordinato di cui ho seguito uno a uno di confronto]
Locazione multipla :
- Host / hardware condiviso, codice condiviso e multi database.
- È più semplice estendere la funzionalità del codice e correggere i bug (codice condiviso).
- È più difficile estendere l'hardware (potrebbe utilizzare un servizio cloud) o spostare il database del singolo tenant su un altro sistema senza apportare modifiche al codice.
- Ancora più importante, come ho detto prima, devo aggiungere un ulteriore livello al sistema per assicurarmi che l'utente appartenga effettivamente alla sua azienda e non acceda alle informazioni di altre società.
Istanza multipla :
- Host / hardware condiviso o non condiviso, codice per istanza e database per istanza.
- È più difficile estendere la funzionalità o correggere i bug (non sono sicuro che ci sia un modo per farlo in Docker in cui è possibile aggiungere funzionalità / funzionalità a un'istanza o contenitore Docker e distribuirlo agli altri).
- È più semplice spostare l'intera istanza su un host / hardware diverso.
- Come istanza, non ho bisogno di occuparmi di quel livello poiché ogni istanza avrà il suo database.
Tutti i vantaggi e gli svantaggi sono ridondanti nel caso in cui io voglia fare qualcosa manualmente (come la creazione manuale di un'istanza per ciascun inquilino), ed è per questo che dubito della soluzione Docker, a meno che non ci sia un modo per risolverlo, che è forse il principale ragione della domanda. Ti sarei grato se rispondessi alla domanda con riferimenti alle soluzioni e perché pensi che questo approccio sia migliore dell'altro.
Nel caso ciò possa aiutare (forse?), Stiamo usando Laravel come framework principale per il back-end (tutto RESTfully).