Sto provando a costruire una soluzione SaaS basata sul web e ho imboccato una strada in cui non sono sicuro di usare multi tenancy o multi instance. Cercherò di descrivere quello che sto cercando di ottenere, e ogni approccio vantaggi e svantaggi (secondo me, secondo ciò che ho letto). Per favore includi i tuoi suggerimenti nel caso in cui mi sia sfuggito qualcosa in un approccio rispetto all'altro.
L'applicazione che sto cercando di costruire è, come ho detto, una soluzione SaaS in cui le aziende possono creare i loro account e ogni account / azienda ha i propri utenti, clienti, prodotti, servizi ... ecc. Ogni utente; chi è un dipendente della società; relativo a un account / azienda avrà accesso solo ai suoi clienti, prodotti e servizi. Le aziende potrebbero avere un numero illimitato di clienti, prodotti e servizi, quindi ogni azienda dovrebbe avere il proprio data center.
Per questo motivo ho deciso di creare un database condiviso (salvando tutte le credenziali degli utenti a scopo di accesso) e uno schema condiviso di più database (database per account / azienda). Fondamentalmente, Multi Tenancy .
Poi qualcuno ha suggerito di utilizzare Istanza multipla , invece, dove ogni azienda avrà la propria istanza dell'applicazione (es. codice, librerie, database, framework ... ecc.) completamente separata dalle altre società . Questo suona meglio in quanto non devo occuparmi di un ulteriore livello in cui ho bisogno di assicurarmi che gli utenti di ciascun inquilino abbiano accesso solo ai dati della loro azienda. Penso che sia opportuno menzionare che sto seguendo Docker per raggiungere questo approccio (non ho mai usato prima), ma penso che manchi di funzionalità (più su quelle successive) di cui avrò bisogno in futuro (almeno non le ho trovate con un po 'di ricerca).
Tuttavia, ogni approccio ha pro e contro, quindi non ho potuto decidere con quale approccio andare. Ecco una lista, ma nuda con me perché mi manca 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 un confronto uno per uno]
Multi Tenancy :
- Host condiviso / hardware, 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 titolare su un altro sistema senza apportare modifiche al codice.
- Ancora più importante, come ho detto prima, ho bisogno di 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 dove è 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 dato che ogni istanza avrà il proprio database.
Tutti i vantaggi e gli svantaggi sono ridondanti nel caso in cui voglio fare qualcosa manualmente (come creare un'istanza per ogni inquilino manualmente), ed è per questo che dubito della soluzione Docker, a meno che non ci sia un modo per risolverlo, che è forse la ragione principale della domanda. Gradirei se rispondessi alla domanda con riferimenti alle soluzioni e perché pensi che questo approccio sia migliore dell'altro.
Nel caso in cui ciò sarebbe di aiuto (forse?), stiamo utilizzando Laravel come framework principale per il back-end (tutto RESTfully) .