Question

J'ai vu les applications SaaS hébergées de différentes manières. Est-ce une bonne idée de scinder des fonctionnalités et des modules dans plusieurs bases de données? Par exemple, placer des éléments tels que la table utilisateur sur une base de données et des tables spécifiques à une autre base de données et éventuellement d’autres tables communément partagées dans une autre base de données?

Était-ce utile?

La solution

Commencez avec une base de données. Fractionner les données / fonctionnalités lorsque le projet le nécessite.

Voici ce que nous pouvons apprendre de LinkedIn:

  • Une seule base de données ne fonctionne pas
  • L'intégrité référentielle ne sera pas possible
  • Toute perte de données est un problème
  • La mise en cache est efficace même s’il est modérément efficace
  • Ne sous-estimez jamais la trajectoire de croissance

Source:

Architecture de LinkedIn

Architecture de communication LinkedIn

Autres conseils

Haute évolutivité est un bon blog pour la mise à l'échelle d'applications SaaS. Comme mentionné précédemment, diviser les tables en bases de données comme vous l'avez suggéré est généralement une mauvaise idée. Mais un concept similaire est le partage, dans lequel vous conservez le même schéma (ou un schéma similaire), mais divisez les données sur plusieurs serveurs. Par exemple, les utilisateurs 1-5000 sont sur le serveur1 et les utilisateurs 5000-10000 sur le serveur2. En fonction des requêtes utilisées par votre application, cela peut constituer un moyen efficace de faire évoluer votre système.

Pour les applications SaaS, vous utilisez plusieurs bases de données pour plusieurs clients hébergés, mais ne divisez généralement pas la base de données par module.

Il s’agit du modèle le plus courant que j’ai vu dans la conception d’applications SaaS. Votre schéma de base est répliqué pour chaque client hébergé que vous ajoutez à votre application.

Avoir une seule base de données est préférable pour l’intégrité des données car vous pouvez utiliser des clés étrangères. Vous ne pouvez pas avoir cette intégrité de données intégrée si vous divisez les données en plusieurs bases de données. Ce n'est pas un problème si vos données ne sont pas liées, mais si elles le sont, votre base de données unique pourrait contenir des données incohérentes avec une autre base de données. Dans ce cas, vous devez écrire du code qui analyse régulièrement vos bases de données pour rechercher des données incohérentes, afin que vous puissiez le gérer correctement.

Toutefois, plusieurs bases de données peuvent s'avérer nécessaires si vous souhaitez que votre site / votre application soit hautement évolutif (échelle Internet, par exemple). Par exemple, vous pouvez héberger chaque base de données sur un serveur physique différent.

La scission de la base de données par fonctionnalités peut ne pas être une bonne idée à moins que vous ne voyiez des preuves solides suggérant la nécessité. Souvent, vous devrez peut-être mettre à jour deux bases de données dans le cadre d'une transaction unique. Les transactions distribuées sont beaucoup plus difficiles à gérer. De plus, si la base de données doit être fractionnée, vous pourrez peut-être utiliser le sharding.

Il existe différentes manières de le réaliser, mais les problèmes de multi-locataires vont au-delà du modèle de données. Je n'aime pas avoir à brancher un produit, mais consultez SaaSGrid de la société dans laquelle je travaille, Apprenda . Nous sommes un système d’exploitation en nuage qui vous permet d’écrire des applications SOA à locataire unique (n'hésitez pas à utiliser NHibernate pour l’accès aux données) qui injecte automatiquement la multi-location dans votre application. Lorsque vous publiez votre application, vous pouvez choisir un modèle de données (base de données isolée ou partagée). SaaSGrid se déploie en conséquence et votre application s'exécute sans modification du code. Écrivez simplement le code comme s'il s'agissait d'un seul locataire!

Pourquoi utiliser la base de données?

Je pense que c'est une bonne idée d'utiliser des systèmes de stockage distribués comme Hadoop, Voldemort (project-voldemort.com développé et utilisé par LinkedIn).

Je pense que db est bon pour les données sensibles telles que les opérations monétaires, mais pour tout le reste, vous pouvez utiliser des stockages distribués.

Demandez-vous: que gagnez-vous en déplaçant le tout dans des bases de données distinctes?

Je pense que la gestion serait très pénible. Personnellement, je serais plus enclin à tout avoir dans une seule base de données. Si vous rencontrez des problèmes qui ne peuvent pas être résolus par une base de données plus tard, migrez les données dans plusieurs bases de données.

Conservez-le dans un design naturel (dénormalisez autant que nécessaire, normalisez autant que nécessaire). Divisez le modèle de base de données en modules et gardez à l’esprit les principes orientés service en regroupant les données avec un service (propriétaire des données).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top