Мы разработали мультитенантное приложение ASP.NET. Когда клиент регистрируется, он получает собственный субдомен для использования на своем сайте (например, tenant1.ourapp.com).
Процесс настройки сайта клиента не требует настройки.
В настоящее время у нас это настроено так:
Все остальное обрабатывается нашим приложением (проверка URL-адреса, загрузка конфигурации конкретного клиента и т. Д.).
Большой вопрос, как это масштабировать? Допустим, я хотел разместить в IIS только 50 экземпляров клиентов на физическом веб-сайте. Теперь у меня проблема с тем, что исходный сайт обрабатывает все запросы для ourapp.com (благодаря записи DNS с подстановочными знаками).
Мы также смотрим на Azure, поэтому решение, которое работает как для автономного сервера, так и для Azure, будет золотым!
Я бы немного переделал вашу архитектуру:
Windows Azure поставляется со встроенным балансировщиком нагрузки. Установите все свои веб-сайты в одну веб-роль, которую можно распределить по нескольким экземплярам. Настройте мультитенантное приложение для внутренней маршрутизации запросов на основе источника / клиента / URL.
Если вы действительно мультитенант, у вас будет единая кодовая база. Контент, который видит пользователь, зависит от его контекста / идентификатора пользователя / и т. Д. Таким образом, у вас есть одно приложение, все разделяют ресурсы ваших экземпляров циклически, и ни один сервер не может устоять перед отказом.
Размещение 50 сайтов на одном сервере, других 50 сайтов на другом сервере и т. Д. - это «старый» не облачный способ решения проблем. Ваш сервер выходит из строя, и 50 клиентов не работают. И не иметь гибкости / масштабируемости, когда один из клиентов становится «слишком горячим» для одного сервера.
В общем, примерно так, если я правильно понимаю ваш вопрос, вы хотели бы изучить балансировщик нагрузки для распределения нагрузки на несколько веб-серверов. Вы отправляете все запросы на балансировщик нагрузки, а он затем пересылает запросы на ваши веб-серверы.
Вы можете сделать это разными способами, вы всегда можете отправить tenant1.ourapp.com на один и тот же сервер или распределить это между всеми или несколькими серверами.
Я лично являюсь поклонником использования HAProxy в Linux в качестве балансировщика нагрузки, есть также другие программные балансировщики нагрузки и варианты оборудования.