J'essaie de construire un Web SaaS Solution, et j'ai frappé une route où je ne suis pas sûr d'utiliser plusieurs locaux ou multi-instances. Je vais essayer de décrire ce que je suis Essayer de réaliser, et chaque approche des avantages et des inconvénients (mon avis, selon ce que j'ai lu). Veuillez inclure vos suggestions au cas où j'ai manqué quelque chose d'une approche sur l'autre.
L'application que j'essaie de construire est, comme je l'ai mentionnée, a SaaS solution où les entreprises peuvent créer leurs comptes et que chaque compte/entreprise a ses propres utilisateurs, clients, produits, services. ..etc. Chaque utilisateur; qui est un employé de la société; liée à un compte/société n'aura accès qu'à ses clients, produits et services de sa société. Les entreprises pourraient avoir un nombre illimité de clients, produits et services, ainsi que chaque entreprise devrait avoir son propre centre de données.
Pour cela, j'ai décidé de créer une base de données partagée (sauvegarder toutes les informations d'identification des utilisateurs à des fins de connexion) et plusieurs bases de données Schéma partagée (base de données par compte/entreprise). Fondamentalement, multi-location .
Ensuite, quelqu'un a suggéré d'utiliser multi-instance à la place, où chaque entreprise aura sa propre instance de l'application (code, bibliothèques, base de données, cadres ... etc) totalement séparé des autres entreprises. Cela semble mieux car je n'ai pas à prendre soin d'une couche supplémentaire où j'ai besoin de vous assurer que les utilisateurs de chaque locataire ont accès uniquement aux données de leur entreprise. Je pense qu'il est bon de mentionner que je dépend du docker Pour atteindre cette approche (je ne l'ai jamais utilisée auparavant), mais je pense que cela manque de fonctionnalités ( Plus sur ceux plus tard), j'aurai besoin à l'avenir (au moins je ne les ai pas trouvés avec un peu de recherche).
Cependant, chaque approche vient avec les avantages et les inconvénients, donc je ne pouvais donc pas prendre une décision avec laquelle une approche à suivre. Voici une liste, mais nue avec moi alors que je manque les connaissances en eux, donc il pourrait y avoir quelque chose dont je ne suis pas au courant, ni une solution à un problème que je n'ai pas trouvé sur le Web: [Chaque approche a une liste ordonnée dont j'ai suivi une comparaison une par une]
Multi-location :
Multi Instance :
Tous les avantages et les inconvénients sont redondants au cas où je veux faire n'importe quoi manuellement (comme créant une instance pour chaque locataire manuellement), et c'est pourquoi je doute de la solution Docker, à moins que le moyen de résoudre ce problème, ce qui est peut-être le principal raison de la question. J'apprécierais que si vous répondiez à la question avec des références aux solutions et pourquoi pensez-vous que cette approche est meilleure que l'autre.
En cas d'aide (peut-être?), Nous utilisons Laravel comme le cadre principal de l'arrière-plan (tout de repos).
Je me demande exactement la même question pour le moment.
Je me penche vers la solution de location unique à plusieurs instances, mais je n'ai pas encore pris de décision définitive. Permettez-moi de partager certaines de mes pensées:
L'avantage historique principal de l'architecture multi-locataires est une meilleure utilisation des ressources d'infrastructure, par Mutualisation (OS unique, base de données unique, couche d'application unique) et mieux occupant ladite Ressources (quand un utilisateur est absent, un autre peut utiliser la même ressource).
C'est aussi grandement simplifie le cycle de vie du logiciel: Vous déployez de nouvelles versions à votre instance, tous les clients sont mis à jour en même temps.
Il semble toutefois que les progrès récents de la technologie des clouds rendent la première classe d'avantages largement disponibles dans une architecture multi-instance (instance par client) (je pense spécifiquement d'une plate-forme comme Jelastic ici, mais je suis sûr qu'il y en a d'autres fournir les mêmes fonctionnalités):
Donc, la gestion du matériel et de la plate-forme n'est plus la préoccupation du fournisseur de logiciels. Les ressources sont mutualisées beaucoup plus efficacement qu'auparavant à l'infrastructure et aux niveaux de plaform.
Il y aura encore une surcharge pour plusieurs instances (certaines applications et middleware seront courantes au lieu d'une seule fois), mais beaucoup plus bas que lors de l'utilisation d'une machine séparée (virtuelle) par instance. La base de données pourrait être partagée de toute façon (un schéma par exemple, plusieurs schémas par serveur DB)
Aussi :
Bien sûr, nous aurions besoin d'une sorte de service central qui gère tout cela automatiquement (par exemple la création d'instance lorsqu'un nouvel utilisateur crée un compte). Cela gérerait également les problèmes de paiement et de licence, interaction entre les instances, etc. Ce service central pourrait être assez complexe et difficile à développer, mais la bonne chose est que nous n'avons pas à la mettre en œuvre (maintenant que nous n'avons pas beaucoup Ressource) alors que le multi-locataire devra être cuit à l'application depuis le début.
Ce qui m'amène aux derniers avantages du développement d'un locataire unique pour un projet de démarrage très précoce (pré-invention):
NB: Je pense évidemment ici d'une application commerciale où les clients seraient des entreprises (chacune avec plusieurs utilisateurs individuels) et non des individus. Il n'aurait aucun sens d'exécuter une instance séparée d'une application pour chaque utilisateur individuel (ou le ferait-il?)
Soutenir les deux options est également possible (un pool de locataires sur plusieurs instances).
Je privilégie la cause multi-instance de l'isolement naturel. L'instance de chaque client s'exécute dans ses propres processus et ses données sont isolées dans sa propre base de données. Vous pouvez mettre à niveau des instances à de nouvelles versions par client/par exemple lorsque vous le souhaitez.
Les systèmes basés sur les locataires sont dotés d'un risque de sécurité des informations. Considérons juste à quel point il est facile d'oublier une clause "où télentide = x". La principale raison d'utiliser un système capable de locataire serait une performance, les processus sont lourds, en partageant un processus, vous pouvez potentiellement obtenir plus d'une machine. Cela était plus vrai que je pense dans un monde 32 bits, alors il est aujourd'hui sur 64 machines de bits qui ont beaucoup plus de RAM.
Un système multi-instance aurait peut-être peut-être un peu plus d'outillage pour créer et configurer l'environnement, telles que des bases de données et des instances d'application Web. On peut affirmer que vous devez avoir ce scripté de toute façon également pour vos déploiements d'instance. Faire cela a d'autres avantages aussi comme la capacité de mettre en place des environnements de développement et de test
Je quitterais les capacités du locataire jusqu'à ce que vous puissiez en faire un cas (Coût de l'ingénierie vs de l'argent enregistré sur une infrastructure (matérielle) via le partage de processus).