Tienes un proyecto bastante interesante. Nunca he visto a nadie tratar de implementar algo tan grande, al menos en SQL Server. Cuanto más leo tu publicación, más preguntas se me ocurren ...
En el peor de los casos, en cuanto a la infraestructura (que en realidad es el mejor de los casos, desde el punto de vista comercial), necesita 10K bases de datos por 2k usuarios. Eso es 20,000,000 de usuarios. No tendrá éxito al tratar de administrar 20 M inicios de sesión de SQL Server. OMI Solo la gran cantidad de ellos, tratando de moverlos de un servidor a otro, vigilando las colisiones de ID y las ID no coincidentes, además no estoy seguro de cómo se comportaría SQL Server con 20 M filas en sys.server_principals. Además, su aplicación web probablemente querrá conectarse como un solo número de usuarios, o muy bajo. IIS no puede agrupar conexiones a menos que sus cadenas DSN sean idénticas. Uno de los atributos de una cadena DSN es el nombre de usuario. Diferentes usuarios significa que no hay agrupación.
Necesitará rodar su propio esquema de credenciales de usuario. Tendrá que poder determinar a qué inquilino pertenece un usuario y luego su código web deberá seleccionar la base de datos adecuada. Los metadatos de los usuarios son críticos, deberán almacenarse en algún lugar, deberán agruparse o duplicarse, deberán ser rápidos y deberán estar bien protegidos (desde una perspectiva de seguridad. IOW, encriptarlo). Suponiendo que SQL es incluso una buena idea aquí, mantendría esta base de datos lejos de las instancias que los inquilinos del servidor. Esto ayuda desde el punto de vista de la seguridad y desde el punto de vista de la carga, aunque supongo que una vez que se valida a los usuarios y la aplicación web se dirige a la base de datos correcta en otra instancia, no habrá más consultas sobre los metadatos de este usuario relacionados con eso. usuario.
Pregunta rápida: ¿se debe permitir que dos usuarios diferentes, que pertenecen a dos inquilinos diferentes, tengan el mismo nombre de usuario?
Otra pregunta rápida: si te digo que trabajo para FuBar, Inc., ¿cómo lo sabes? ¿FuBar le dará una lista de usuarios y usted les devolverá una lista de nombres de usuario, o se aprovisionarán ellos mismos?
Tendrás que ir a varias instancias. Si incluso una fracción de esos usuarios decide acceder a la aplicación a la vez, una sola instancia se derretirá. No tendrá suficientes subprocesos de trabajo para ejecutar todas esas solicitudes a la vez. Si solo 1000 usuarios llegan a su instancia al mismo tiempo, probablemente se quedará sin hilos de trabajo y la solicitud comenzará a acumularse y esperar. He visto que esto suceda; El síntoma próximo es que las nuevas conexiones no podrán iniciar sesión en la instancia porque no hay hilos de trabajo disponibles para darles servicio. Si este es un comportamiento de muy corta duración, su aplicación podría sobrevivir. Si no, o su aplicación es exigente, los usuarios obtendrán errores.
Incluso si no tendrá muchos inquilinos para comenzar, debe comenzar a pensar en el futuro y la automatización porque cuando ve que su servidor está bloqueado y hay 10 nuevos inquilinos para poner en línea, es demasiado tarde y su servicio (y sus clientes y los que pronto serán ex clientes) sufrirán hasta que salga del problema.
Necesitará una forma de mover las bases de datos, desde servidores sobrecargados hasta servidores con poca carga (o nuevos). Si puede obtener o no una ventana de tiempo de inactividad dependerá de su SLA.
¿Está proporcionando una aplicación específica, como SalesForce, o estas bases de datos son solo contenedores para lo que quieran poner sus inquilinos?
¿Qué tan grandes son las bases de datos? Si no son muy grandes, simplemente puede restaurar desde un archivo de respaldo que proporciona una plantilla. (Esto no es muy diferente de lo que hace la base de datos del modelo, pero no he visto a nadie realmente usar el modelo de una buena manera desde mis días con SQL 6.5.) Una vez que la plantilla ha sido restaurada al nuevo nombre de la base de datos, podría luego personalice la nueva base de datos según sea necesario para un inquilino en particular. No puede hacer la personalización antes de tener el inquilino, obviamente. Si la base de datos es grande, puede seguir el mismo procedimiento básico, excepto que realice la restauración con anticipación, antes de que cualquier nuevo inquilino necesite el espacio. Puede mantener un par de estas bases de datos, tal vez una por instancia. Si mantiene demasiados, esto lo obligará a comprar más hardware y / o almacenamiento del que necesita,
Si esta es su propia aplicación, ¿cómo manejará las actualizaciones de los esquemas? ¿Cómo va a mantener las versiones de la base de datos correctas con las versiones del código, si está utilizando una única URL que llega a su aplicación web?
¿Cómo detecta y destruye las bases de datos que ya no están en uso? ¿Espera hasta que su grupo A / R diga que alguien no ha pagado su factura en tres meses?
Si los inquilinos están administrando los permisos, eso significa que tienen cierta comprensión del funcionamiento interno de la aplicación o que su aplicación tiene una estructura de roles muy simple. Usando algo como Blogger como un ejemplo aproximado, los usuarios pueden (leer publicaciones), (leer publicaciones y hacer comentarios), (... y crear publicaciones), (... y editar las publicaciones de otros), (... y pueden restablecer contraseñas de otros usuarios), o (... y lo que sea). Tener un rol para cada uno de esos diferentes conjuntos de derechos y asignar un usuario a un rol u otro no debería ser demasiado difícil, pero no desea que su aplicación ejecute declaraciones 'GRANT'. Tenga cuidado con los roles que tienen una jerarquía y dependen de la herencia, puede ser confuso. Si está promocionando o degradando a un usuario, yo diría que los elimine de todos los roles asociados y luego los agregue nuevamente al rol que necesitan. Oh,
Creo que solo he arañado la superficie aquí, y esta publicación ya es demasiado larga. Lo que realmente necesita es un libro, o al menos un documento técnico de alguien que haya hecho esto. La mayoría de esos tipos no hablarán si lo ven como una ventaja competitiva.