У вас есть довольно интересный проект. Я никогда не видел, чтобы кто-то пытался реализовать что-то такое большое, по крайней мере, на SQL Server. Чем больше я читаю ваш пост, тем больше вопросов я задаю ...
В худшем случае в инфраструктурном сценарии (который на самом деле является наилучшим сценарием для бизнеса), вам нужно 10 тыс. Баз данных на 2 тыс. Пользователей. Это 20 000 000 пользователей. Вы не добьетесь успеха в попытке управлять 20 М именами входа SQL Server. ИМО. Только их огромное количество, касающееся перемещения их с сервера на сервер, отслеживания коллизий идентификаторов и несовпадения идентификаторов, плюс я не уверен, как SQL Server будет вести себя с 20 миллионами строк в sys.server_principals. Кроме того, ваше веб-приложение, вероятно, захочет подключиться как один или очень небольшое количество пользователей. IIS не может объединять соединения, если их строки DSN не идентичны. Одним из атрибутов строки уведомления о доставке является имя пользователя. Разные пользователи означают отсутствие объединения.
Вам нужно будет свернуть свою собственную схему учетных данных пользователя. Он должен быть в состоянии выяснить, к какому арендатору принадлежит пользователь, и тогда ваш веб-код должен будет выбрать правильную базу данных. Эти метаданные пользователя очень важны, их нужно где-то хранить, кластеризовать или зеркально отражать, они должны быть быстрыми и должны быть хорошо защищены (с точки зрения безопасности. IOW, зашифровать его.) Предполагая, что SQL является даже хорошей идеей, я бы держал эту базу данных подальше от экземпляров, которые являются арендаторами сервера. Это помогает с точки зрения безопасности и с точки зрения загрузки, хотя я предполагаю, что как только пользователь будет проверен и веб-приложение будет направлено в правильную базу данных в другом экземпляре, больше не будет запрашиваться метаданные этого пользователя, связанные с этим. пользователь.
Быстрый вопрос: должны ли два разных пользователя, принадлежащих к двум разным арендаторам, иметь одинаковое имя пользователя?
Еще один быстрый вопрос: если я скажу вам, что работаю в FuBar, Inc., откуда вы это знаете? Собирается ли FuBar предоставить вам список пользователей, а вы возвращаете им список имен пользователей, или они собираются самостоятельно?
Вам нужно будет перейти на несколько экземпляров. Если хотя бы небольшая часть этих пользователей решит сразу же запустить приложение, один экземпляр исчезнет. У него не будет достаточно рабочих потоков для одновременного выполнения всех этих запросов. Если только 1000 пользователей одновременно ударили по вашему экземпляру, он, вероятно, исчерпает рабочие потоки, и запрос начнет складываться и ждать. Я видел, как это произошло; Непосредственный признак состоит в том, что новые соединения не смогут войти в экземпляр, потому что нет доступных рабочих потоков для их обслуживания. Если это очень недолгое поведение, ваше приложение может выжить. Если нет, или ваше приложение суетливо, пользователи получат ошибки.
Даже если у вас не будет много арендаторов для запуска, вам следует задуматься о будущем и автоматизации, потому что, когда вы видите, что ваш сервер отключен и есть 10 новых арендаторов, которые нужно подключить к сети, уже слишком поздно и ваш сервис (и ваши клиенты и ваши будущие бывшие клиенты будут страдать, пока вы не напишете выход из проблемы.
Вам понадобится способ перемещения баз данных с перегруженных серверов на слегка загруженные (или новые) серверы. То, сможете ли вы получить окно простоя, зависит от вашего SLA.
Вы предоставляете конкретное приложение, такое как SalesForce, или эти базы данных являются просто контейнерами для того, что ваши арендаторы хотят добавить?
Насколько велики базы данных? Если они не очень большие, вы можете просто восстановить из файла резервной копии, которая предоставляет шаблон. (Это не сильно отличается от того, что делает база данных модели, но я не видел, чтобы кто-то действительно хорошо использовал модель с тех пор, как я работал с SQL 6.5.) Как только шаблон был восстановлен с новым именем базы данных, вы могли бы затем настройте новую базу данных по мере необходимости для конкретного арендатора. Очевидно, вы не можете выполнить настройку до того, как получите арендатора. Если база данных большая, вы можете выполнить ту же самую базовую процедуру, за исключением того, что вы выполняете восстановление заранее, прежде чем любому новому арендатору понадобится место. Вы можете хранить несколько таких баз данных, возможно, по одной на экземпляр. Если вы держите слишком много, это может заставить вас купить больше оборудования и / или хранилища, чем вам нужно,
Если это ваше собственное приложение, как вы собираетесь обрабатывать обновления схем? Как вы собираетесь хранить версии базы данных в одном месте с версиями кода, если вы используете один URL, который попадает в ваше веб-приложение?
Как вы обнаруживаете и уничтожаете базы данных, которые больше не используются? Вы ждете, пока ваша группа A / R скажет, что кто-то не оплатил свой счет в течение трех месяцев?
Если арендаторы управляют разрешениями, это подразумевает, что они имеют некоторое представление о внутренней работе приложения или что ваше приложение имеет очень простую структуру ролей. Используя что-то вроде Blogger в качестве грубого примера, пользователи могут (читать сообщения), (читать сообщения и оставлять комментарии), (... и создавать сообщения), (... и редактировать сообщения других пользователей), (... и могут сбросить настройки пароли других пользователей) или (... и что угодно). Наличие роли для каждого из этих различных наборов прав и назначение пользователю той или иной роли не должно быть слишком сложным, но вы не хотите, чтобы ваше приложение выполняло операторы «GRANT». Следите за ролями, которые имеют иерархию и зависят от наследования, это может запутать. Если вы продвигаете или понижаете пользователя, я бы сказал, что вытащите его из всех связанных ролей, а затем добавьте обратно к той роли, которая ему нужна. Ой,
Я думаю, что я только поцарапал поверхность здесь, и этот пост уже слишком длинный. Что вам действительно нужно, так это книга или, по крайней мере, документ от того, кто это сделал. Большинство из этих парней не будут говорить, если они рассматривают это как конкурентное преимущество.