Сервер приложений С++::Журнал СА 10.2008
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6188
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6898
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4182
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2986
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3793
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3803
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6296
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3151
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3445
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7261
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10627
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12349
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13979
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9109
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7064
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5373
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4603
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3412
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3142
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3389
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3011
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Сервер приложений С++

Архив номеров / 2008 / Выпуск №10 (71) / Сервер приложений С++

Рубрика: Веб /  Веб

Андрей Шетухин, Илья Космодемьянский

Сервер приложений С++

Попытки создания удобных и одновременно высокопроизводительных веб-инструментариев регулярно предпринимаются еще со времен использования первых CGI-сценариев. К сожалению, из-за высокой сложности разработки подобных систем лишь немногие их них доводятся до состояния, пригодного для коммерческого использования.

Прототип CAS был разработан в ноябре 2003 года в компании «НетБридж Сервисез» (Mail.ru). Он представлял собой монолитное приложение, для каждой модификации требующее перекомпиляции кода проекта. Тем не менее в нем уже присутствовали все основные компоненты современного сервера приложений: класс представления (библиотека CTPP версий 1.X), классы моделей, реализующие конкретный интерфейс, наследованный от абстрактного класса и контроллер в виде массива объектов, содержащих имя обрабатываемого URL и набора исполняемых объектов-моделей.

Очевидные недостатки подобной схемы, а именно: требование пересборки всего проекта при изменении любого класса модели, негибкая организация объекта контроллера и единственный возможный шаблонизатор продиктовали необходимость разработки новой современной удобной версии.

Дальнейшее развитие этой системы привело к созданию сервера приложений C++ (C++ Application Server, CAS) – инструментария, лишенного недостатков предыдущей версии, обладающего широкими возможностями конфигурирования и расширения функционала и в то же время способного обрабатывать сотни и тысячи запросов в секунду.

Сейчас CAS – полноценный сервер приложений, имеющий в своей основе архитектуру MVC и поддерживающий ее дополнительные расширения. При проектировании и разработке этого продукта особое внимание уделялось удобству работы программистов с его API, простоте администрирования и эксплуатации.

Сервер приложений имеет интерфейсы для работы с Apache 1.3, Apache 2.X и FastCGI. Поддерживаются платформы: FreeBSD (i386, amd64), Linux 2.6 (i386, amd64), Solaris (i386, amd64, sparc, ultrasparc).

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

Классы моделей-обработчиков и других функциональных объектов можно загружать как в виде отдельных модулей, так и как монолитные библиотеки.

В случае необходимости возможна разработка собственных вариантов классов контроллера и представления. Таким образом, функциональность CAS можно изменять практически произвольно.

Мы расскажем, как использовать сервер приложений для разработки сложных высоконагруженных веб-проектов на языке С++.

Архитектура CAS и парадигма MVC

Сервер приложений CAS построен по многокомпонентной схеме, отделяющей сущности модели MVC друг от друга. Каждая из сущностей представляет собой отдельный загружаемый модуль и может быть заменена независимо от остальных. Классическая модель MVC выглядит следующим образом (см. рис. 1).

Рисунок 1. Общая схема архитектуры MVC

Рисунок 1. Общая схема архитектуры MVC

Пользователь отправляет запрос к серверу приложений. Контроллер выбирает необходимый набор моделей и, в зависимости от конфигурации, последовательно или параллельно исполняет их. Модели, взаимодействуя с внешними ресурсами, например, с различными (Р)СУБД создают набор данных, передаваемых в объект представления. Представление формирует требуемый ответ на основе переданного набора данных и загруженных шаблонов страниц и отправляет его пользователю.

В зависимости от конфигурации для разных URL, обрабатываемых сервером, могут быть использованы различные классы контроллеров, моделей и представления, что дает возможность сконфигурировать CAS для выполнения задач разных типов. К примеру, используя один и тот же сервер, можно одновременно построить портал для посетителей, пользующихся как обычными обозревателями (Microsoft Internet Explorer, Mozilla Firefox или Opera), так и WAP-обозревателями из мобильных телефонов.

Архитектуру сервера приложений проще всего описать на примере использования CAS как модуля веб-сервера Apache. Реализации CAS, поддерживающие интерфейсы FastCGI и CGI имеют несущественные архитектурные различия (см. рис. 2).

Рисунок 2. Схема загрузки и инициализации CAS

Рисунок 2. Схема загрузки и инициализации CAS

При запуске Apache происходит загрузка CAS и его инициализация. После успешной инициализации, включающей в себя чтение и обработку файла глобальной конфигурации, загрузку и инициализацию модулей, чтение и инициализацию конфигураций виртуальных серверов, Apache создает пул процессов или нитей, обрабатывающих запросы от пользователей. До тех пор, пока работа CAS не окончена, в цикле производится обработка запросов и выдача результатов пользователям. По окончании работы модули выгружаются, освобождается использованная память и процессы или нити завершаются (см. рис. 3).

Рисунок 3. Цикл обработки запроса

Рисунок 3. Цикл обработки запроса

Обработка каждого запроса начинается с проверки URL. Если URL не обрабатывается сервером, управление возвращается без каких-либо действий со стороны CAS. Если URL обрабатывается, то производится поиск локации, ответственной за обработку URL. Для найденной локации выбираются объекты, подлежащие исполнению: контроллер, список моделей и представление.

Контроллер, если присутствует в описании локации, исполняется первым. Основное предназначение контроллера – изменение конфигурации локации в зависимости от полученных от пользователя данных. Например, если язык страницы зависит от географического положения пользователя, контроллер может вычислить язык по IP-адресу клиента.

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

Финализатор – объект, назначение которого состоит в коррекции возникшей в модели ошибки. В случае возникновения ошибки в объекте модели финализатор может предпринять определенные действия для ее исправления или, если ошибку исправить нельзя, вывести диагностическое сообщение пользователю.

Визуализация результатов производится в объекте представления. Представление производит наложение данных на шаблон и генерирует требуемый документ. Представление всегда выполняется последним.

Кратко остановимся на понятии локации. В идеологии CAS, локация – единица конфигурации сервера, включающая в себя список обрабатываемых URL, описание используемого контроллера, моделей, финализаторов и представления.

Каждая локация имеет уникальное имя. Выбор локации производится по совпадению запрашиваемого URL с URL, обрабатываемых локацией. Возможно как полное совпадение, так и совпадение с заданным регулярным выражением.

Чтобы сказанное было более понятно, рассмотрим пример создания простейшего приложения.

Простейшее приложение CAS

В нашем приложении мы не будем строить чего-либо сложного, а остановимся на широко известной новичкам программе «Hello, World!».

Чтобы разработать ее, нам потребуется:

  •   любой компьютер под управлением FreeBSD, Linux или Solaris;
  •  установленный сервер приложений;
  •  компилятор С++;
  •  программа cmake;
  •  программа make;
  •  10 минут свободного времени.

Первое, что следует сделать – создать проект модуля CAS. Для этого служит программа cas-xt – CAS eXtension Tool. Синтаксис ее ключей во многом повторяет синтаксис широкоизвестной программы apxs. Более подробную справку о cas-xt вы можете прочитать в разделе документации, посвященном установке и настройке сервера приложений.

Чтобы создать модуль, необходимо подать следующую команду:

cas-xt -t handler -g -n Hello

 

Using templates from directory "/usr/local/share/cas/xt"

Output directory is ""

Creating [DIR] Hello

Creating [DIR] Hello/include

Creating [DIR] Hello/src

Creating [FILE] Hello/src/Hello.cpp

Creating [FILE] Hello/CMakeLists.txt

 

 Смысл ключей следующий:

  •  -t – задает тип создаваемого ресурса, в нашем случае это «handler»;
  •  -g – указывает о необходимости сгенерировать набор шаблонов;
  • -n – указывает имя создаваемого модуля, у нас – «Hello».

Если все прошло успешно, будет создан каталог Hello, а в нем – два файла: CmakeLists.txt и Hello.cpp.

Все, что следует сделать – это открыть на редактирование файл Hello.cpp. и вписать в метод Handler вывод строки «Hello, World»:

//

// Initialize handler

//

INT_32 Hello::Handler(CTPP::CDT   & oData,

                      ASRequest   & oRequest,

                      ASResponse  & oResponse,

                      ASPool      & oGlobalPool,

                      ASPool      & oVhostPool,

                      ASPool      & oRequestPool,

                      CTPP::CDT   & oLocationConfig,

                      CTPP::CDT   & oIMC,

                      ASLogger    & oLogger)

{

    DEBUG_HELPER(&oLogger, "Hello::Handler");

 

    // Put your code here

    oData["hello"] = "Hello, World!";

 

    // 200 OK

    oResponse.SetHTTPCode(200);

 

    // Set HTTP header

    oResponse.SetHeader("X-Module", "Hello");

 

return HANDLER_OK;

}

Для сборки модуля следует перейти в каталог Hello и выполнить команду:

cmake . && make install

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

Шаблон генерируемой страницы, который необходимо будет сохранить в файле /home/www/example.com/tmpl/login.tmpl, будет очень простым:

<html>

<head>

<title>My first example</title>

</head>

<body>

<TMPL_var hello>

</body>

</html>

Теперь осталось только настроить CAS для обработки HTTP-запросов.

CAS использует два файла конфигурации: глобальный и конфигурации виртуального сервера. Глобальный файл, global-config.xml, в зависимости от операционной системы, обычно размещается в каталогах /etc/cas, /usr/local/etc/cas или /opt/CASWserver/conf.

Чтобы добавить модуль, в глобальный файл конфигурации, в секцию Modules следует внести строку с описанием имени модуля, его типа и файла динамической библиотеки, в которой он содержится:

<Modules>

....

<Module Name="Hello" Library="mod_hello.so"

ModuleType="Handler"/>

....

</Modules>

Следующий шаг – указать, как и где будет использоваться подключенный нами обработчик. Делается это путем изменения файла конфигурации виртуального сервера CAS. Его имя задается в конфигурации сервера Apache директивой CASConfigFile. По умолчанию сервер приложений отключен, поэтому, чтобы разрешить работу CAS с указанным виртуальным сервером Apache, требуется также выставить флаг CASEnable в положение On. Пример для виртуального сервера дан ниже:

<VirtualHost *:80>

ServerName example.com

CASEnable On

CASConfigFile /home/www/example.com/example.xml

DocumentRoot /home/www/example.com

</VirtualHost>

В файле /home/www/example.com/example.xml в секции Locations указываем URL и имя модуля:

<Locations>

  ...

  <Location name="HelloExample">

     <URIList>

        <URI type="plain">/hello.html</URI>

     <URIList>

     <Templates>

        <Template>/home/example.com/tmpl/hello.tmpl</Template>

     </Templates>

     <Handlers>

        <Handler name="Hello"/>

     </Handlers>

     <View>

        <Handler name="CTPP2View"/>

     </View>

  </Location>

  ....

</Locations>

После этого можно перезапустить Apache.

apachectl restart

/usr/local/sbin/apachectl restart: httpd restarted

Вот и все. Настало время насладиться результатами работы:

lynx -mime_header http://localhost/hello.html

 

HTTP/1.1 200 OK

Date: Wed, 30 Jul 2008 12:00:41 GMT

Server: Apache/1.3.41 (Unix) mod_cas/3.1.4(Feather)

X-Powered-By: C++ Application Server v 3.1.4(Feather)

X-Module: Hello

Connection: close

Content-Type: text/html

 

<html>

<head>

<title>My first example</title>

</head>

<body>

Hello, World!

</body>

</html>

Как мы видим, разработка модулей для CAS не представляет особой сложности: для реализации базового функционала достаточно выполнения нескольких простых действий.

Разумеется, для построения больших и сложных систем, безусловно, потребуются глубокие знания архитектуры и реализации CAS.

Интеграция с популярными технологиями

Разумеется, мы не призываем полностью отказаться от использования традиционных веб-технологий. Используя CAS вместе с библиотекой CTPP для Perl или PHP, вы можете создавать проекты, высоконагруженная часть которых реализована на технологии сервера приложений, а низконагруженная – на классических Perl или PHP.

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

Выводы

  • сервер приложений С++ – зрелый, высокотехнологичный Open Source-продукт, готовый к коммерческому использованию;
  • производительность CAS является наиболее высокой среди популярных веб-технологий, а потребление памяти и процессорного времени – самым низким, что в совокупности своей позволяет использовать CAS в высоконагруженных проектах любой сложности;
  • модульность системы дает возможность параллельной разработки проекта большим коллективом программистов;
  • продемонстрированные примеры свидетельствуют о простоте разработки, настройки и обслуживания CAS;
  • совместное использование с другими средами (Perl, PHP, Python) допускает быстрое прототипирование и эффективную технологическую миграцию проекта;
  • использованный язык шаблонов содержит в своей основе синтаксические соглашения широкоизвестных модулей Perl, а значит – прост в понимании и освоении верстальщиками HTML.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru