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