SlideShare a Scribd company logo
Frontend и
Backend
Общая архитектура
2
Задачи Frontend (web) сервера
•   отдача статических документов
•   проксирование (reverse proxy)
•   балансировка нагрузки
•   кеширование
•   сборка SSI
•   авторизация, SSL, нарезка картинок, gzip
3
Reverse proxy
•   frontend (медленно) читает запрос от клиента
•   frontend (быстро) передает запрос свободному backend
•   backend генерирует страницу
•   backend (быстро) возвращает ответ frontend серверу
•   frontend (медленно) возвращает ответ клиенту
Результат: backend занят минимально возможное время.
4
Настройка
проксирования
в nginx
Настройка проксирования в nginx
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
location / {
proxy_pass http://backend;
}
location /partner/ {
proxy_pass http://www.partner.com;
}
location ~ .www?w?$ {
root /www/static;
}
6
Настройка upstream в nginx
upstream backend {
server back1.example.com:8080 weight=1 max_fails=3;
server back2.example.com:8080 weight=2;
server unix:/tmp/backend.sock;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
7
Application
сервер
Backend (application) сервер
Роль application сервера заключается в исполнении бизнес-логики
приложения и генерации динамических документов.
На каждый HTTP запрос application сервер запускает некоторый
обработчик в приложении. Это может быть функция, класс или
программа, в зависимости от технологии.
9
Протоколы запуска приложения
•   Servlets и др. специализированные API
•   mod_perl, mod_python, mod_php
•   CGI
•   FastCGI
•   SCGI
•   PSGI, WSGI, Rack
10
CGI
CGI - Common Gateway Interface
•   Метод, QueryString, заголовки запроса - через переменные
окружения
•   Тело запроса передается через STDIN
•   Заголовки и тело ответа возвращаются через STDOUT
•   HTTP код ответа передается через псевдозаголовок Status
•   Поток ошибок STDERR направляется в лог ошибок сервера
12
13
Переменные окружения CGI
•   REQUEST_METHOD - метод запроса
•   PATH_INFO - путь из URL
•   QUERY_STRING - фрагмент URL после ?
•   REMOTE_ADDR - IP адрес пользователя
•   CONTENT_LENGTH - длина тела запроса
•   HTTP_COOKIE - Заголовок Cookie
•   HTTP_ANY_HEADER_NAME - любой другой HTTP заголовок
14
FastCGI и SCGI
FastCGI и SCGI
Основная проблема CGI - низкая производительность. Протоколы
FastCGI и SCGI призваны решить эту проблему путем демонизации
приложения. Иногда это возможно сделать даже без изменения
кода CGI приложения.
16
17
WSGI
WSGI - актуальный протокол
WSGI, PSGI, Rack - протоколы вызова функции обработчика из
application сервера. Сам application server при этом может
выполняться в отдельном процессе или совпадать с web сервером.
Как правило, при использовании этих протоколов в качестве
application сервера выступает отдельный легковесный процесс.
19
WSGI - обработчик
def wsgi_application(environ, start_response):
# бизнес-логика
status = '200 OK'
headers = [
('Content-Type', 'text/plain')
]
body = 'Hello, world!'
start_response(status, headers )
return [ body ]
20
Web Server Gateway Interface
•   Обработчик - функция или класс (callable)
•   Метод, QueryString, заголовки запроса - через аргумент environ
•   Тело запроса передается через file-handle wsgi.input
•   HTTP код ответа и заголовки ответа передаются через вызов
функции start_response
•   Тело ответа возвращается в виде списка (iterable) из обработчика
•   Поток ошибок должен быть направлен в file-handle wsgi.stderr
21
Переменные environ
•   CGI-like переменные: REQUEST_URI , ...
•   wsgi.version - версия WSGI протокола
•   wsgi.url_scheme - схема текущего URL: https или http
•   wsgi.input - file-handle для чтения тела запроса
•   wsgi.errors - file-handle для вывода ошибок
•   wsgi.multithreaded - ...
•   wsgi.multiprocess - ...
22
Развертывание WSGI
23
Что ложится на приложение ?
•   Анализ PATH_INFO и выбор конкретного обработчика
•   Разбор конкретных заголовков, например Cookie
•   Разбор QUERY_STRING
•   Разбор тела запроса:
•   x-www-form-urlencoded
•   multipart/form-data
•   Вывод правильных заголовков ответа
24

More Related Content

What's hot

Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
Andrey Smirnov
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
Andrey Smirnov
 
Михаил Юматов: SaltStack
Михаил Юматов: SaltStackМихаил Юматов: SaltStack
Михаил Юматов: SaltStack
it-people
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Ontico
 
WebSockets
WebSocketsWebSockets
WebSockets
plusnin
 

What's hot (20)

Chef
ChefChef
Chef
 
07 virtual hosts_ru
07 virtual hosts_ru07 virtual hosts_ru
07 virtual hosts_ru
 
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
Андрей Федоренчик- «Высоконагруженная система с аналитикой на InfoBright»
 
04 web server_deployment_ru
04 web server_deployment_ru04 web server_deployment_ru
04 web server_deployment_ru
 
03 web server_architecture_ru
03 web server_architecture_ru03 web server_architecture_ru
03 web server_architecture_ru
 
Twisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в PythonTwisted Framework - сетевые приложения в Python
Twisted Framework - сетевые приложения в Python
 
Доставка данных в реальном времени.
Доставка данных в реальном времени. Доставка данных в реальном времени.
Доставка данных в реальном времени.
 
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
Веб-разработка без наркотиков с помощью PostgreSQL, Nginx и c2h5oh / Миша Кир...
 
Major mistakes in site moving
Major mistakes in site movingMajor mistakes in site moving
Major mistakes in site moving
 
WWW
WWWWWW
WWW
 
06 php instalation_ru
06 php instalation_ru06 php instalation_ru
06 php instalation_ru
 
Применяем Ansible
Применяем AnsibleПрименяем Ansible
Применяем Ansible
 
Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)Анатомия веб сервиса (HighLoad-2014)
Анатомия веб сервиса (HighLoad-2014)
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 
«Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта» «Разработка и оптимизация высоконагруженного проекта»
«Разработка и оптимизация высоконагруженного проекта»
 
Михаил Юматов: SaltStack
Михаил Юматов: SaltStackМихаил Юматов: SaltStack
Михаил Юматов: SaltStack
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
 
WebSockets
WebSocketsWebSockets
WebSockets
 
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз» «Композитный сайт. Ускорение отдачи сайта в 100 раз»
«Композитный сайт. Ускорение отдачи сайта в 100 раз»
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
 

Viewers also liked

Viewers also liked (18)

05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы
 
презентация лекция 3 (1)
презентация лекция 3 (1)презентация лекция 3 (1)
презентация лекция 3 (1)
 
презентация 6
презентация 6презентация 6
презентация 6
 
презентация 4. введение в css
презентация 4. введение в cssпрезентация 4. введение в css
презентация 4. введение в css
 
Lesson1
Lesson1Lesson1
Lesson1
 
Эссе по теме браузеры
Эссе по теме браузерыЭссе по теме браузеры
Эссе по теме браузеры
 
Обзор интернет браузеров
Обзор интернет браузеровОбзор интернет браузеров
Обзор интернет браузеров
 
браузеры
браузерыбраузеры
браузеры
 
Brauzery
BrauzeryBrauzery
Brauzery
 
12 - Web-технологии. Django модели
12 - Web-технологии. Django модели12 - Web-технологии. Django модели
12 - Web-технологии. Django модели
 
16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX16 - Web-технологии. Технология AJAX
16 - Web-технологии. Технология AJAX
 
11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД11 - Web-технологии. Работа с СУБД
11 - Web-технологии. Работа с СУБД
 
66 - Spring. Spring и JSF
66 - Spring. Spring и JSF66 - Spring. Spring и JSF
66 - Spring. Spring и JSF
 
14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм14 - Web-технологии. Обработка форм
14 - Web-технологии. Обработка форм
 
13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных13 - Web-технологии. Отображение данных
13 - Web-технологии. Отображение данных
 
Virtual Security Lab Setup - OWASP Broken Web Apps, Webgoat, & ZAP
Virtual Security Lab Setup - OWASP Broken Web Apps, Webgoat, & ZAPVirtual Security Lab Setup - OWASP Broken Web Apps, Webgoat, & ZAP
Virtual Security Lab Setup - OWASP Broken Web Apps, Webgoat, & ZAP
 
Command
CommandCommand
Command
 
Warren 10 Crucial Reasons For Warren Buffett’s Unstoppable Success
Warren 10 Crucial Reasons For Warren Buffett’s Unstoppable SuccessWarren 10 Crucial Reasons For Warren Buffett’s Unstoppable Success
Warren 10 Crucial Reasons For Warren Buffett’s Unstoppable Success
 

Similar to 08 - Web-технологии. Архитектура frontend-backend

HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3
Technopark
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
Media Gorod
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
Ontico
 

Similar to 08 - Web-технологии. Архитектура frontend-backend (20)

HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Веб-сервер
Веб-серверВеб-сервер
Веб-сервер
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
 
Николай Сиварев "Приручая сайты"
Николай Сиварев "Приручая сайты"Николай Сиварев "Приручая сайты"
Николай Сиварев "Приручая сайты"
 
Ускоряем Wordpress: кеширование, CDN, Varnish Cache
Ускоряем Wordpress: кеширование, CDN, Varnish CacheУскоряем Wordpress: кеширование, CDN, Varnish Cache
Ускоряем Wordpress: кеширование, CDN, Varnish Cache
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
Meet Magento Belarus - Alexander Kaigorodov
Meet Magento Belarus - Alexander KaigorodovMeet Magento Belarus - Alexander Kaigorodov
Meet Magento Belarus - Alexander Kaigorodov
 
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)Webuibasics - Lesson 3 - Nginx, SSI (in russian)
Webuibasics - Lesson 3 - Nginx, SSI (in russian)
 
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
Андрей Светлов-«Делаем своё решение для оптимальной загрузки кластера»
 
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
Подходы и технологии, используемые в разработке iOS-клиента Viber, Кирилл Лаш...
 
The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview Release
 
Speed Up Your Website
Speed Up Your WebsiteSpeed Up Your Website
Speed Up Your Website
 
Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.Максим Дунин, Nginx, Inc.
Максим Дунин, Nginx, Inc.
 
Jiramania презентации @augspb
Jiramania презентации   @augspbJiramania презентации   @augspb
Jiramania презентации @augspb
 
Magento performance
Magento performanceMagento performance
Magento performance
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 

More from Roman Brovko

Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
Roman Brovko
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
Roman Brovko
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
Roman Brovko
 

More from Roman Brovko (20)

Individual task Networking
Individual task NetworkingIndividual task Networking
Individual task Networking
 
Networking essentials lect3
Networking essentials lect3Networking essentials lect3
Networking essentials lect3
 
Gl embedded starterkit_ethernet
Gl embedded starterkit_ethernetGl embedded starterkit_ethernet
Gl embedded starterkit_ethernet
 
Networking essentials lect2
Networking essentials lect2Networking essentials lect2
Networking essentials lect2
 
Networking essentials lect1
Networking essentials lect1Networking essentials lect1
Networking essentials lect1
 
Bare metal training_07_spi_flash
Bare metal training_07_spi_flashBare metal training_07_spi_flash
Bare metal training_07_spi_flash
 
Bare metal training_06_I2C
Bare metal training_06_I2CBare metal training_06_I2C
Bare metal training_06_I2C
 
Glesk worshop
Glesk worshopGlesk worshop
Glesk worshop
 
Bare metal training_05_uart
Bare metal training_05_uartBare metal training_05_uart
Bare metal training_05_uart
 
Bare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensorBare metal training_04_adc_temp_sensor
Bare metal training_04_adc_temp_sensor
 
Bare metal training_03_timers_pwm
Bare metal training_03_timers_pwmBare metal training_03_timers_pwm
Bare metal training_03_timers_pwm
 
Bare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttonsBare metal training_02_le_ds_and_buttons
Bare metal training_02_le_ds_and_buttons
 
Bare metal training_01_hello_world
Bare metal training_01_hello_worldBare metal training_01_hello_world
Bare metal training_01_hello_world
 
Bare metal training_00_prerequisites
Bare metal training_00_prerequisitesBare metal training_00_prerequisites
Bare metal training_00_prerequisites
 
C language lect_23_advanced
C language lect_23_advancedC language lect_23_advanced
C language lect_23_advanced
 
C language lect_22_advanced
C language lect_22_advancedC language lect_22_advanced
C language lect_22_advanced
 
C language lect_21_advanced
C language lect_21_advancedC language lect_21_advanced
C language lect_21_advanced
 
подготовка рабочего окружения
подготовка рабочего окруженияподготовка рабочего окружения
подготовка рабочего окружения
 
C language lect_20_advanced
C language lect_20_advancedC language lect_20_advanced
C language lect_20_advanced
 
C language lect_19_basics
C language lect_19_basicsC language lect_19_basics
C language lect_19_basics
 

08 - Web-технологии. Архитектура frontend-backend

  • 3. Задачи Frontend (web) сервера •   отдача статических документов •   проксирование (reverse proxy) •   балансировка нагрузки •   кеширование •   сборка SSI •   авторизация, SSL, нарезка картинок, gzip 3
  • 4. Reverse proxy •   frontend (медленно) читает запрос от клиента •   frontend (быстро) передает запрос свободному backend •   backend генерирует страницу •   backend (быстро) возвращает ответ frontend серверу •   frontend (медленно) возвращает ответ клиенту Результат: backend занят минимально возможное время. 4
  • 6. Настройка проксирования в nginx proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; location / { proxy_pass http://backend; } location /partner/ { proxy_pass http://www.partner.com; } location ~ .www?w?$ { root /www/static; } 6
  • 7. Настройка upstream в nginx upstream backend { server back1.example.com:8080 weight=1 max_fails=3; server back2.example.com:8080 weight=2; server unix:/tmp/backend.sock; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; } 7
  • 9. Backend (application) сервер Роль application сервера заключается в исполнении бизнес-логики приложения и генерации динамических документов. На каждый HTTP запрос application сервер запускает некоторый обработчик в приложении. Это может быть функция, класс или программа, в зависимости от технологии. 9
  • 10. Протоколы запуска приложения •   Servlets и др. специализированные API •   mod_perl, mod_python, mod_php •   CGI •   FastCGI •   SCGI •   PSGI, WSGI, Rack 10
  • 11. CGI
  • 12. CGI - Common Gateway Interface •   Метод, QueryString, заголовки запроса - через переменные окружения •   Тело запроса передается через STDIN •   Заголовки и тело ответа возвращаются через STDOUT •   HTTP код ответа передается через псевдозаголовок Status •   Поток ошибок STDERR направляется в лог ошибок сервера 12
  • 13. 13
  • 14. Переменные окружения CGI •   REQUEST_METHOD - метод запроса •   PATH_INFO - путь из URL •   QUERY_STRING - фрагмент URL после ? •   REMOTE_ADDR - IP адрес пользователя •   CONTENT_LENGTH - длина тела запроса •   HTTP_COOKIE - Заголовок Cookie •   HTTP_ANY_HEADER_NAME - любой другой HTTP заголовок 14
  • 16. FastCGI и SCGI Основная проблема CGI - низкая производительность. Протоколы FastCGI и SCGI призваны решить эту проблему путем демонизации приложения. Иногда это возможно сделать даже без изменения кода CGI приложения. 16
  • 17. 17
  • 18. WSGI
  • 19. WSGI - актуальный протокол WSGI, PSGI, Rack - протоколы вызова функции обработчика из application сервера. Сам application server при этом может выполняться в отдельном процессе или совпадать с web сервером. Как правило, при использовании этих протоколов в качестве application сервера выступает отдельный легковесный процесс. 19
  • 20. WSGI - обработчик def wsgi_application(environ, start_response): # бизнес-логика status = '200 OK' headers = [ ('Content-Type', 'text/plain') ] body = 'Hello, world!' start_response(status, headers ) return [ body ] 20
  • 21. Web Server Gateway Interface •   Обработчик - функция или класс (callable) •   Метод, QueryString, заголовки запроса - через аргумент environ •   Тело запроса передается через file-handle wsgi.input •   HTTP код ответа и заголовки ответа передаются через вызов функции start_response •   Тело ответа возвращается в виде списка (iterable) из обработчика •   Поток ошибок должен быть направлен в file-handle wsgi.stderr 21
  • 22. Переменные environ •   CGI-like переменные: REQUEST_URI , ... •   wsgi.version - версия WSGI протокола •   wsgi.url_scheme - схема текущего URL: https или http •   wsgi.input - file-handle для чтения тела запроса •   wsgi.errors - file-handle для вывода ошибок •   wsgi.multithreaded - ... •   wsgi.multiprocess - ... 22
  • 24. Что ложится на приложение ? •   Анализ PATH_INFO и выбор конкретного обработчика •   Разбор конкретных заголовков, например Cookie •   Разбор QUERY_STRING •   Разбор тела запроса: •   x-www-form-urlencoded •   multipart/form-data •   Вывод правильных заголовков ответа 24