Назад |
Перейти на главную страницу
DNS с подстановочными знаками, размещенный DNS или DNS-сервер
Я создаю сайт, на котором пользователи могут создать свой собственный сайт. Пользователь вводит имя сайта (скажем, site1), и сайт создается с поддоменом site1.example.com. В настоящее время я настроил DNS с подстановочными знаками для одного сервера, на котором был создан сайт. Это нормально работает, но недостаточно масштабируемо для использования в будущем.
Я хотел бы иметь возможность контролировать, на каком сервере создается сайт. Например, site1 создается на server1, а site2 создается на server2. Я искал несколько решений.
- Настроить собственный DNS-сервер и создать поддомен до создания сайта.
- Использование какого-то размещенного DNS-сервера с API для создания домена.
- Используйте IIS каким-либо образом, чтобы я мог перенаправить свой DNS с подстановочными знаками на поддомен, размещенный на сервере.
Я предпочитаю решение IIS, но не нашел ни одного примера по его настройке, или если это вообще возможно.
Возможно, есть какие-то открытые или платные решения.
Есть много способов решить эту проблему, но лучшее решение зависит от ваших ограничений, среды, типов сайтов и т. Д. Например:
- Разве один сервер не может обрабатывать все сайты из-за размера контента на каждом сайте или из-за создаваемой нагрузки / трафика?
- Хранится ли контент в виде файлов или в базе данных?
- На сайтах запущено приложение, требующее общего состояния? Общее состояние хранится в памяти или на другом сервере или кластере серверов?
- Требуется ли для каждого сайта собственное развертывание приложения или приложение поддерживает мультитенантность (в основном, может ли оно посмотреть, какое имя хоста было запрошено, и использовать его в качестве своего сайта - именно так большинство CMS / e, размещенных на нескольких клиентах) -коммерческие приложения работают)
- Может ли один сайт вырасти настолько, что с ним не сможет справиться один сервер?
Я предполагаю, что у вас есть "типичное" веб-приложение, в котором приложение размещено на веб-сервере, состояние сеанса хранится локально в памяти (по умолчанию для многих платформ) и база данных. Я предполагаю, что хранилище находится в базе данных, а ваше приложение поддерживает мультитенантность.
"Типичный" способ настроить это - иметь несколько уровней:
- Уровень базы данных (очень мощная пара аварийного переключения, ведущая / ведомая системы или кластер, в зависимости от вашей платформы БД)
- Уровень состояния сеанса (может храниться на уровне БД, отдельной БД, сервере состояния сеанса IIS, memcached или чем-то подобном)
- Уровень приложения (ваш сервер приложений - IIS)
- Уровень балансировки нагрузки (выделенное оборудование, nginx, HAproxy и т. Д.)
Здесь есть несколько ключевых моментов:
- Любой сервер приложений может обработать запрос для любого «сайта» (потому что это одно и то же приложение, и все они подключаются к одной базе данных)
- Состояние вашего сеанса должно быть общим и доступным для всех серверов приложений.
- Уровень вашей базы данных должен выдерживать нагрузку одновременного доступа со всех серверов приложений. Большинство людей используют кеширование в разных точках, чтобы эта работа работала.
- Если вы стремитесь к высокой доступности, вам необходимо иметь емкость N + 1: например, если для вашей пиковой нагрузки требуется 10 серверов приложений, у вас должно быть как минимум 11.
- Часто на большом сайте люди выгружают свой статический контент (изображения, CSS и т. Д.) На другой сервер или даже в CDN, например Akami или Amazon CloudFront.
Настройка довольно гибкая. Вы можете добавить МНОГО серверов приложений. Вы можете самостоятельно изменить настройку любого тира. У вас нет единой точки отказа (например, вы можете терпеть потерю одного или двух серверов, чтобы никто этого не заметил).
Даже если ваше приложение не поддерживает мультитенантность, у вас есть несколько вариантов:
- Разверните каждый сайт на каждом сервере (примечание: для этого требуется, чтобы у вас был способ также синхронизировать все файлы для установки / обновлений, и чтобы вы не хранили какой-либо контент локально)
- Разверните каждый сайт на каждом сервере, но храните контент на централизованном (и избыточном) NAS или SAN
- Разверните сайты выборочно, а затем используйте балансировщик нагрузки для направления трафика на соответствующий сервер на основе имени хоста.
Взгляни на Настройка StackExchange, что на самом деле довольно близко к тому, что я только что описал:
Ваша проблема заключается в программном создании записей DNS?
В таком случае вы можете использовать NicTool. Он имеет обширный API для управления вашим DNS и может работать со многими серверами имен.
Отказ от ответственности: я использую NicTool на работе, и я установил автоматизацию, которая сэкономила нам значительные средства.
Для этого есть несколько решений. А как насчет статического определения места назначения сервера на основе домена? Например, после создания site12, если хеш site12 четный, то он переходит на server1, иначе он переходит на server2.