How-to: Как строится инфраструктура хостинг-провайдера

Бизнес хостинг-провайдеров является крайне технологичным — для того, чтобы обеспечить бесперебойную работу даже не самых крупных и популярных сайтов необходимо создание мощной инфраструктуры. Сегодня мы расскажем об архитектуре внешних систем проекта 1cloud.

Элементы инфраструктуры

При построении инфраструктуры было принято решение о максимально возможном разделении различных компонент продукта, который можно назвать «услуги хостинга». При увеличении нагрузки, этот подход позволит нам не разбивать единое приложение и не заниматься сложной миграцией, а просто перенести нужный сервис на новый сервер.

Система 1cloud состоит из следующих компонентов:

  • Внешний сайт;
  • Внутренняя панель;
  • Панель администратора и службы поддержки;
  • Сервис нотификации;
  • Сервис обработки задач;
  • Биллинг-сервис;
  • Сервис отработки ассинхронных по времени заданий;
  • Сервис мониторинга.

При создании сервисов использовались технологии C#, ASP.NET MVC 5, Entity Framework 6.1. Все перечисленные компоненты связаны общей программной частью, называемой DataLayer — она содержит информацию по моделям, статическим методам, общим словарям. В этом же решении определены так называемые data facade для работы с базой данных.

Схематично инфраструктуру можно представить подобным образом:

Рассмотрим отдельные элементы системы подробнее.

Внешний сайт и внутренняя панель

Основной сайт 1cloud, о редизайне которого мы недавно рассказывали, используется для привлечения новых клиентов и служит своеобразной витриной, которую в первую очередь видят посетители. Для повышения конверсии страниц сайта добавлены важные для пользователей элементы, вроде калькулятора, позволяющего произвести расчет стоимости услуг (данное решение было принято на основе анализа поведения посетителей прошлой версии сайта, где эта страница была разделена на две).

Внутренняя же панель ориентирована в первую очередь на выполнение типовых операций по управлению своими серверами и оплате услуг (осуществлена интеграция с платежным шлюзом «ДеньгиОнлайн»).

Существует также «административная» часть сайта, доступ к которой имеют работники службы поддержки.

Любое действие, совершаемое на вшнешнем сайте, «админке» или панели управления не исполняется сразу же, а ставится в очередь на асинхронную обработку (иначе говоря, создается соответствующее задание — таск). Моментально регистрируется только информация, внесенная в базу данных.

Сервис обработки задач

Создаваемые таски обрабатывает специальный сервис. Обработка ведется по методу fifo в параллельном режиме. Существует несколько типов обработчиков — именно от типа зависит то, какой обработчик будет взаимодействовать с поступившей задачей. Именно этот сервис отвечает за работу с API сторонних систем.

В ходе обработки тасков часто возникает необходимость в отправке оповещений, которые также не отправляются сразу, а ставятся в очередь на обработку.

Сервис нотификаций

Эта часть системы изначально проектировалась с расчетом на работу в условиях значительных нагрузок. В частности, благодаря этому, сервис не производит почти никакого анализа отправляемых сообщений (существует лишь защита от отправки дублирующих оповещений).

Все параметры корреспонденции (поля кому, от кого, тема, тело сообщения в html/plane text) определяются на уровне сервиса обработки задач. Сервис нотификации также работает по принципу fifo.

Биллинговая подсистема

Один из важнейших с точки зрения бизнеса элементов системы. Данный сервис отвечает за тарификацию услуг и списание денег с клиентов. Каждые 10 минут сервис осуществляет сбор параметров заказанных услуг, расчет стоимости и, соответственно, проводит списания с лицевых счетов пользователей. В настоящее время подсистема является не особенно сложной — и в этом один из ее главных плюсов, поскольку такую архитектуру проще поддерживать (хотя количество генерируемых операций в сутки поначалу доставляло нам сложности, с которыми пришлось справляться отдельно).

В будущем нам придется развивать биллинг, поскольку планируется введение новых услуг и модели оплаты за реально потребленные ресурсы (pay as you go) — в ходе этого проекта планируется работа с VMware vSphere API.

Сервис отправки асинхронных сообщений

Хостинг-провайдеру приходится периодически беспокоить клиентов автоматическими сообщениями (например, напоминаниям об удалении заблокированного сервера через 14 дней). Создавать подобные сообщения может лишь «специально обученный» сервис, который получает информацию от других модулей системы.

Система мониторинга

«Главный диагност» системы, который главным образом следит за ее внутренним здоровьем и ищет ошибки вроде зависших тасков или сбоев при их обработке, проблемы при осуществлении биллинга, отправке сообщений и парсинге логов (для логирования использован компонент log4net).

Планы

В будущем мы планируем запуск услуги балансировки нагрузки, которая позволит клиентам заказывать балансировку нагрузки на приложение, запущенное в том числе на серверах в территориально разнесенных ЦОД.

На сегодня все. Пишите в комментариях, о каких элементах инфраструктуры хостинг-провайдера вы хотели бы узнать больше?