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

26
Сервер приложений С++ Андрей Шетухин, Илья Космодемьянский SUP Fabrik

Upload: mateja

Post on 23-Mar-2016

76 views

Category:

Documents


0 download

DESCRIPTION

Сервер приложений С++. Андрей Шетухин, Илья Космодемьянский SUP Fabrik. первые наработки - 2003 год нагруженный проект, много запросов, мало памяти, мало CPU компьютеры выросли, но выросли и нагрузки ; ничего не изменилось новые требования : модульность, упрощение API , переносимость. - PowerPoint PPT Presentation

TRANSCRIPT

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

Сервер приложений С++Андрей Шетухин, Илья КосмодемьянскийSUP Fabrik

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

• первые наработки - 2003 год• нагруженный проект, много

запросов, мало памяти, мало CPU• компьютеры выросли, но выросли

и нагрузки; ничего не изменилось• новые требования: модульность,

упрощение API, переносимость

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

Парадигма MVC и CAS• что такое MVC и зачем оно нужно?• наши модификации• достоинства предложенной схемы• архитектура CAS

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

Классическая архитектура MVC

Представление

Рез

ульт

ат

Результат

МодельДанные

ЗапросыКонтроллерШаблоны

Дан

ные

БД

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

Критика• плохо работает под большой

нагрузкой• сложность разработки моделей,

контроллеров и представлений• ненужный код в моделях• проблемы с масштабированием

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

Модификация MVC

Дан

ные

Функции

Представление

Вы

вод

Результат

МодельДанные

ЗапросыКонтроллерШаблоны

Дан

ные

БД

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

Достоинства• модели – универсальные• формирование ответа – только в

представлении• для генерации HTML/JSON/XML

кроме шаблона ничего не требуется

• простота внесения правок• высокая скорость работы

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

Проект CTPP• виртуальная

машина• библиотека

функций• компилятор• коллектор

результатов• кэш байткода

Данные

Байт-код

Виртуальная машина Результат

КомпиляторШаблон

Функции API шаблонизатора

Кэш

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

Результаты• CTPP2

• HTML::Template::JIT

• HTML::Template::Pro

• HTML::Template

• Template::Toolkit

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

Архитектура CAS• модульность• изоляция

сущностей• простота

разработки и сопровождения

• расширяемость• универсальность• интегрируемость

Контроллер

Handlers

Представление Шаблоны

ResourcesResourcesРесурсы

Ответ

Запр

осHandlersОбработчики

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

Жизненный цикл• загрузка

конфигурации• загрузка модулей• создание сервера

приложений• обработка

запросов• выход

Создание экземпляра сервера, загрузка шаблонов, подключение к ресурсам

fork

Заве

ршен

ие

Выход

fork

Заве

ршен

ие

Выход

fork

Заве

ршен

ие

Выход

Обработка запросов

Загрузка конфигурации

Обработка запросов Обработка запросов

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

Обработка запроса• контролллер

исполняется первым• модели запускаются

последовательно• если возникла ошибка –

работают финализаторы• представление

формирует данные

Контроллер

Представление

Модель

Модель

Модель Финализатор

Финализатор

Ошибка?

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

От слов – к делу!• необходимый инструментарий• пишем “Hello, World!”• тестируем результаты работы• пример посложнее – лента

новостей• сравним с mod_perl• и с PHP – тоже сравним

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

Инструменты• компилятор C++• система сборки cmake• сервер приложений C++• 10 минут свободного времени

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

Hello, World!• Создаем модуль

cas-xt -t handler -g -n Hello

Using templates from directory "/usr/share/cas/xt"Output directory is "."Creating [DIR] HelloCreating [DIR] Hello/includeCreating [DIR] Hello/srcCreating [FILE] Hello/src/Hello.cppCreating [FILE] Hello/CMakeLists.txt

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

Hello, World!• Пишем кодINT_32 Hello::Handler(CTPP::CDT & oData, ASRequest & oRequest, ASResponse & oResponse, ASLogger & oLogger){

// Put your code hereoData["hello"] = "Hello, World!";// 200 OKoResponse.SetHTTPCode(200);// Header oResponse.SetHeader("X-Module", "Hello");

return HANDLER_OK;}

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

Hello, World!• Создаем шаблон<html><head>

<title>My first example</title></head><body>

<TMPL_var hello></body></html>

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

Hello, World!• Проверяем результатlynx -source http://localhost/hello.html

<html><head> <title>My first example</title></head><body> Hello, World!</body>

</html>

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

Тоже самое – на mod_perlpackage CAS::Hello;use strict;use Apache::Constants qw(:common);

my $T = new HTML::CTPP2();my $B = $T -> parse_template('news.tmpl');

sub handler{ my $r = shift; $r -> content_type('text/html'); $T -> param({hello => 'Hello, World!'}); print $T -> output($B);return OK;}1;

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

И на PHP<?php $T = new ctpp();

$Bytecode = $T -> parse_template("newslist.ct2");

$T -> emit_params(Array(newslist => $Result));

echo $T -> output($Bytecode);?>

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

Пример посложнее• Лента новостей

SQL::NonTransaction oNT = GetSQLConnector(oResponse,oGlobalPool).NewNonTransaction();

oData["newslist"] = NTSQLayerCDT(oNT, "SELECT * FROM news ORDER BY date") << SQL::GetRowMap;

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

Интеграция• единые шаблоны для всего

проекта, независимо от “движка”• простота миграции между

технологиями• высокая скорость

прототипирования и разработки• поддержка популярных языков и

сред: Perl, PHP, Python

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

Интерфейсы• Apache 1.3.X• Apache 2.X• FastCGI

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

Платформы и архитектуры• Linux• FreeBSD• Solaris

• i386• amd64• UltraSPARC

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

Развитие проекта• сервер-сборщик (привет, Mail.ru ;)• несколько разных View: HTML, JSON,

XML• отдельные части сервера – в виде

самостоятельных библиотек• модули CAS для работы с

разнообразными поставщиками данных

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

Вопросы?