11
votes

Toute réflexion sur les applications multi-locataires versus multi-bases de données dans les rails

Notre application Spwns est actuellement une nouvelle base de données pour chaque client. Nous commençons à nous demander si nous devrions envisager de refléter cela à un système multi-locataires.

Quels avantages / échanges devrions-nous envisager? Quelles sont les meilleures pratiques pour la mise en œuvre d'une application multi-locataires dans les rails?


0 commentaires

5 Réponses :


6
votes

Les systèmes multi-locataires introduiront toute une gamme de problèmes pour vous. Mes pensées rapides sont inférieures à

  • tout SQL doit être examiné et refactored pour inclure une cliente valeur.

  • Tous les index doivent être examinés à déterminer si le clientIide doit être inclus

  • une erreur dans une déclaration SQL par un Développeur / Sysadmin dans la production affecter tous vos clients.

  • une corruption de base de données / problème sera affecter tous vos clients

  • Vous avez des problèmes de confidentialité de données Pendant que la pauvre code / mise en œuvre pourrait Autoriser Customera de voir les données appartenant à à la clientèle

  • Un client utilisant votre système dans un La manière lourde / agressive peut affecter Autres clients Perception des performances

  • adapter les données statiques à une préférence des clients individuels devient plus complexe.

    Je suis sûr qu'il y a un certain nombre d'autres problèmes, mais ils étaient mes pensées initiales.


2 commentaires

Merci Steve .. Vous ne sonnez pas trop émis .. aucun avantage de le faire à votre avis?


Hmm. Il y a aussi beaucoup d'inconvénients à l'approche multi-bases de données. Si je concevez un système, il aurait tendance à être multi-fonctions avec des clients importants particuliers peut-être diviser sur un système distinct. Il existe en effet des avantages pour un système multi-locataires. Le nombre de bases de données devient un mal de tête administratif. Il s'agit également de mises à jour de script Painfulto à plusieurs bases de données, etc.



0
votes

Je n'ai aucune expérience avec cela personnellement, mais pendant la foudre parle au ruby ​​Hoedown 2009, Andrew Coleman a présenté un plugin qu'il conçu et utilise pour des bases de données multi-locataires dans des rails avec des sous-domaines. Vous pouvez Découvrez les diapositives de conversation Lightning et voici le Repository ACTS_AS_RESTRICTED_SUBDOMAIN .


0 commentaires

0
votes

Pourquoi voudriez-vous? Avez-vous une grosse agrégation entre les utilisateurs ou vous frayez-vous trop de DBS? Avez-vous envisagé d'utiliser des fichiers SQLITE par locataire au lieu de serveurs de DB partagés (puisque les applications multi -antes sont souvent faibles et n'ont pas besoin de beaucoup de concurrence)?


1 commentaires

Nous avons considéré cela, cependant, dans une configuration de serveur Web équilibré de la charge, nous aurions rencontré des problèmes à l'aide de SQLLITE sur différents serveurs Web, vous avez donc opté pour une approche de 2 niveaux.



2
votes

Cela dépend vraiment de ce que vous faites.

Nous faisons un programme MIS pour l'industrie d'impression qui suit des stocks, des employés, des clients, des équipements et des calculs graves pour estimer les coûts d'effectuer des travaux basés sur de nombreuses variables d'entrée.

Nous prévoyons de très grandes bases de données pour chaque client et nous avons actuellement 170 tables. Ajout d'une autre colonne à presque toutes les table pour stocker le client_id blesse mon cerveau.

Nous sommes actuellement dans la phase bêta de notre programme et voici quelques éléments que nous avons rencontrés:

  • migrations: Une hypothèse de rails est que vous n'aurez qu'une base de données. Vous pouvez l'adapter pour plusieurs bases de données et les migrations en font partie. Vous avez besoin d'une tâche de râteau personnalisée pour appliquer des migrations vers toutes les bases de données existantes. Préparez-vous à faire beaucoup de difficulté à prendre des difficultés car une migration peut réussir sur un dB, mais échouer sur un autre.
  • Bases de données de frai: Comment créez-vous une nouvelle DB? Dans un fichier SQL, copier une DB existante ou exécuter toutes les migrations? Comment vous gardez votre schéma cohérent entre votre système de création de table et vos bases de données en direct?
  • Connexion à la base de données appropriée: Nous utilisons un cookie pour stocker une valeur unique qui correspond à la bonne dB. Nous utilisons un filtre avant un contrôleur agréé qui inhésirs de ActionController qui obtient la DB de cette valeur unique et utilise la méthode établie_connection sur une sous-classe d'ActionCord :: Base. Cela nous permet de faire passer des modèles d'un dB commun et d'autres de la DB spécifique du client.

    Si vous avez des questions spécifiques sur l'une d'entre elles, je peux vous aider.


1 commentaires

Notre application fonctionne beaucoup comme indiqué ci-dessus. Nous avons toujours eu des problèmes de migration de bases de données et avons constaté que notre développement peut dériver dans différents schémas incompatibles, ce qui entraîne de nombreux efforts pour tenter de fusionner lorsque nous voulons déployer. Les principales attractions visant à refactoriser notre application en tant que système multi-tennant sont que nous n'avons pas à vous soucier de beaucoup de logiques de migration moindre de la base de données, nous pouvons mettre en place notre application basée sur une base de données unique, et nous pouvons construire un ensemble de nettoyage de Outils d'administration ..



8
votes

Je suis en train de rechercher la même chose et je viens de trouver cette présentation pour offrir une solution intéressante: à l'aide de schémas de Postgre (un peu comme des espaces de noms) pour séparer les données au niveau de DB tout en gardant tous les locataires dans la même dB et à rester (surtout ) transparent aux rails.

Écrire des applications multi-locataires dans les rails - Guy Naor


0 commentaires