Масштабируемое решение для мультитенантных 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 в качестве балансировщика нагрузки, есть и другие программные балансировщики нагрузки и аппаратные опции.

Другие вопросы по тегам