Tenemos varios clientes, cuyos sistemas comparten algunas funcionalidades, pero también tienen un alto grado de diversidad. El número de clientes está creciendo, ¡siempre es algo saludable! - y la diversidad entre sus negocios también está aumentando.
En la actualidad, hay un único sitio web ASP.Net (formularios web) (en oposición al proyecto web), que tiene subcarpetas para cada inquilino, con las páginas no estándar de ese inquilino. Hay un proyecto modelo separado, que se ocupa del acceso a la base de datos y la lógica empresarial.
Lo cual es preferible, y lo más importante, por qué, entre tener (a) 1 base de datos por cliente, con solo las características asociadas con ese cliente; o (b) una única base de datos compartida por todos los clientes, donde solo un subconjunto de tablas es utilizado por un solo cliente.
Las principales preocupaciones dentro del negocio han terminado:
- mantenimiento de múltiples activos: copias de seguridad, control de versiones y similares
- promoviendo la reutilización tanto como sea posible
¿Cómo se aseguraría de abordar estas preocupaciones, qué solución es preferible y por qué? (También he estado compilando respuestas a preguntas similares)
fuente
Respuestas:
Aquí están los aspectos más destacados de la investigación de otras fuentes (originalmente de la revisión 2 de la pregunta ):
¿Debo usar una base de datos por aplicación o compartir una sola base de datos entre múltiples aplicaciones?
Apoyando multitenancy
Arquitectura de datos de múltiples inquilinos de MSDN
SO ¿Cómo crear una base de datos multiinquilino con estructuras de tabla compartidas?
CloudExpo SaaS: opciones de diseño de bases de datos de múltiples inquilinos
Blogs de MSDN Cambiar a un modelo de base de datos de múltiples inquilinos más fácil con las federaciones SQL Azure
Pregunta SQL Server Central ¿ Una base de datos o múltiples?
SQL Server Central Mezclando tablas de diferentes bases de datos / aplicaciones en una base de datos
Ayende @ Rahien blog Multi Tenancy - El modelo de datos físicos
Proyecto de código de arquitectura de base de datos de múltiples inquilinos
Joel en el diseño de bases de datos multiusuario de software
SO Aplicación múltiple que usa una base de datos?
SO Bases de datos únicas o múltiples
Code Rant - Multi-inquilino Parte 1, Estrategia y Parte 2, Componentes y contexto
fuente
Si está utilizando SQL Server, use una base de datos pero use esquemas. Use dbo para cosas que son generales para todos los clientes y cree un esquema para cada cliente y haga que sea el esquema predeterminado para los usuarios de ese cliente. Ahora puede tener un objeto general (digamos un proceso getBudget) en el esquema dbo y uno personalizado para el cliente en su esquema con el mismo nombre.
fuente
Dado que las bases de datos y la funcionalidad de los clientes son divergentes, significa que en un momento terminarán siendo sistemas diferentes, por lo que en este caso recomendaría sistemas separados, ya que los costos de mantener las personalizaciones para cada cliente superarán los beneficios de un solo sistema de bases de datos.
Los sistemas de bases de datos individuales son mejores para cuando los cambios entre diferentes clientes son meras configuraciones pero no características adicionales para cada cliente.
fuente
Te estás perdiendo algunas preocupaciones. Los problemas vendrán con el crecimiento. Si puede suponer que algún día crecerá más que un servidor de base de datos; una base de datos compleja definitivamente le causará dolor de cabeza. A menos que invierta en arquitectura por adelantado. Pero también es un paso costoso)
Por lo tanto, no olvide que es mucho más barato y muchas veces más fácil escalar pocas bases de datos diferentes que grandes)
fuente
Un área que no he visto abordada en las respuestas son los problemas para asegurar correctamente una aplicación de base de datos multiinquilino. Las aplicaciones de múltiples inquilinos deben diseñarse con mucho cuidado para evitar problemas de seguridad. La mayoría de las bases de datos y las aplicaciones proporcionan un aislamiento, pero no completo, por lo general, hay formas de inferir directa o indirectamente datos a través de los esquemas de base de datos. Y bastantes recursos compartidos (registros y otros archivos, tablas DBA, cursores ...) que pueden, al menos, conducir a ataques fáciles de denegación de servicio a otros inquilinos, y generalmente mucho más.
fuente