SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Web серверы
Дмитрий Смаль
Web серверы
Терминология
●Порт (port)
●Соединение (connection)
●Сокет (socket)
●Запрос (request)
●Локейшен (location)
●Файлы и директории (directory)
●Файл настроек (httpd.conf, nginx.conf)
●Лог доступа (access log)
●Лог ошибок (error log)
Запуск Web сервера
1) Команда на запуск
sudo /etc/init.d/httpd start
/usr/sbin/httpd -f /home/me/httpd.conf
2) Чтение файла конфигурации
3) Получение порта 80
4) Открытие (создание) логов
5) Понижение привелегий (*)
6) Запуск дочерних процесов/потоков (*)
7) Готов к обработке запроса
Файлы Web-сервера
1) Конфиг /etc/apache2/httpd.conf
Include /etc/apache2/mods-available/*
Include /etc/apache2/sites-available/*
2) Скрипт /etc/init.d/apache2 [start|stop|restart]
3) PID-файл /var/run/apache2.pid
4) Error-лог /var/log/apache2/error.log
/var/log/apache2/mydomain-error.log
5) Access-лог /var/log/apache2/access.log
/var/log/apache2/mydomain-access.log
Процессы Web-сервера
1) Master (root, 1 процесс)
– Чтение и валидация конфига
– Открытие сокета (ов)
– Открытие файлов логов
– Запуск и управление дочерними процессами
(worker)
– Graceful restart, Binary updates
7) Worker (www-data, 1+ процессов)
– Обработка входящих запросов
Доступ к файлам в UNIX
$ ls -lah server/core.c
-rw-r--r-- 1 nuf users 156K Feb 6 21:15 server/core.c
У файла (или директории) есть:
- пользователь (владелец)
- группа
- права доступа (read/write/execute)
У процесса есть:
- пользователь
- группа
Обработка запроса
Модульная архитектура
●web сервер – не монолитный
●LoadModule – загрузка модулей
●Этапы обработки запроса и модули
●Дополнительные директивы, контексты
●Примеры: mod_mime, mod_mime_magic,
mod_autoindex, mod_rewrite, mod_cgi, mod_perl,
mod_gzip
Конфигурация
Конфигурация Apache
Listen 80
User www
DirectoryIndex index.html
DocumentRoot /www/htdocs
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.domain.ru
DocumentRoot /www/domain
ErrorLog /var/log/domain/error_log
CustomLog /var/log/domain/access_log
<Directory "/var/www/html">
Options Indexes FollowSymLinks
</Directory>
<Location "/private/">
Order Allow, Deny
Deny from all
</Location>
</VirtualHost>
Секции и директивы
<VirtualHost> – конфигурация для домена
<Location /admin> </Location>
<LocationMatch .svn> </LocationMatch>
<Directory /htdocs> </Directory>
<DirectoryMatch /inc/> </DirectoryMatch>
DocumentRoot /www/htdocs
Alias /www/htdocs/
Порядок применения
1) VirtualHost – по заголовку Host
2) DocumentRoot / Alias – вычисление пути
3) Directory и .htaccess
4) DirectoryMatch
5) Files и FilesMatch
6) Location и LocationMatch
Приоритеты – в обратном порядке
Конфигурация Nginx
user www www;
error_log /var/log/nginx.error_log info;
http {
include conf/mime.types;
default_type application/octet-stream;
log_format simple '$remote_addr $request $status';
server {
listen one.example.com;
server_name one.example.com www.one.example.com;
access_log /var/log/nginx.access_log simple;
location / {
root /www/one.example.com;
}
location ~* ^.+.(jpg|jpeg|gif)$ {
root /www/images;
access_log off;
expires 30d;
}
}
}
Секции и директивы
http – конфигурация для HTTP сервера
server – конфигурация домена (вирт. Хоста)
location – локейшен (привет, Кэп!)
server_name – имена доменов
root, alias – откуда нужно брать файлы
error_log – лог ошибок сервера
access_log – лог запросов
Приоритеты локейшенов
В nginx:
В apache:
location = /img/1.jpg
location ^~ /pic/
location *~ .jpg$
location /img/
<Location> и <LocationMatch>
<Files> и <FilesMatch>
<DirectoryMatch>
<Directory>
Модели обработки сетевых
запросов
Простой TCP сервер
import socket
s = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
s.bind(('127.0.0.1', 8080))
s.listen(10)
while True:
conn, addr = s.accept()
request = conn.recv(1024).decode('utf8')
url = request.rstrip("rn")
file = open('/www' + str(url), 'r')
data = file.read(1024).encode('utf8')
conn.send(data)
file.close()
conn.close()
Blocking I/O
Более 1 клиента ?
1) Многопоточность (threads)
+ экономия памяти
+ быстрый запуск потока
— все библиотеки должны быть thread-safe
2) Дочерние процессы (prefork)
+ простота, не обязательно thread-safe
— потребление памяти
— медленый запуск процессов
3) Комбинированный режим (worker)
Non-blocking I/O
IO Multiplexing
readsocks = […] # список сокетов для чтения
writesocks = […] # список сокетов для записи
while True:
readables, writeables, exceptions = 
select(readsocks, writesocks, [])
for sockobj in readables:
data = sockobj.recv(1024)
if not data:
sockobj.close( )
readsocks.remove(sockobj)
else:
print 'tgot', data, 'on', id(sockobj)
AIO
Event-Driven programming
1) множество открытых файлов
2) select, kqueue, epoll, aio...
3) последовательное исполнение события→
4) “20 байт из сокета A”, “6 байт из файла B”
+ быстро, никакого сна
+ экономия памяти. 1 клиент – 1 структура
+ большое количество клиентов
— очень тяжело программировать
— блокирующие вызовы запрещены
Кто есть Who.
1) Apache – prefork, worker, С
2) ISS, Tomcat, Jetty – threads, Java
3) Starman, Hypnotoad – prefork, языки высокого уровня
4) nginx, lighttpd – асинхронные, С
5) Node.JS, Tornado, POE – асинхронные, языки высокого
уровня
6) Erlang!
7) Для разработки.
Front-end и Back-end
Front-end
1) отдача статических файлов
2) проксирование (reverse proxy)
3) балансировка нагрузки
4) кеширование
5) сборка SSI
6) авторизация, SSL, нарезка картинок, gzip
Легкий, быстрый, множество соединений
Проксирование в nginx
upstream backend {
server back1.example.com:8080 weight=1;
server back2.example.com:8080 weight=2;
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_read_timeout 60s;
location / {
proxy_pass http://backend;
}
location ~ /(img|css|js)/ {
root /www/static;
}
location /partner/ {
proxy_pass http://www.partner.com;
}
Back-end
1) CGI
2) FastCGI
3) mod_perl, mod_python, mod_php, PHP!!!
4) PSGI, WSGI, Rack
5) apache не нужен ?
Обработка сложных запросов,
запуск скриптов.
CGI
FastCGI
Comet
Полезные утилиты
1) top – список запущенных процессов
top -d 1
2) netstat – список сетевых соединений
netstat -t
3) telnet – элементарный tcp клиент
telnet mail.ru 80
4) ab – нагрузочное тестирование
ab -n 1000 -c 10 http://mail.ru/
Домашнее задание
Установить mysql
Создать пользователя и базу данных
Спроектировать схему БД (в виде моделей)
Подключить Django к СУБД
Спасибо за внимание
Дмитрий Смаль, smal@corp.mail.ru

Weitere ähnliche Inhalte

Was ist angesagt?

ХАРДЕНИНГ (Аринов Ильяс (determination))
ХАРДЕНИНГ (Аринов Ильяс (determination))ХАРДЕНИНГ (Аринов Ильяс (determination))
ХАРДЕНИНГ (Аринов Ильяс (determination))Kristina Pomozova
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один goBadoo Development
 
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Kristina Pomozova
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколыRoman Brovko
 
Web весна 2012 лекция 2
Web весна 2012 лекция 2Web весна 2012 лекция 2
Web весна 2012 лекция 2Technopark
 
The Atomic bomb for kiddies /exploring NSA exploits/
The Atomic bomb for kiddies /exploring NSA exploits/The Atomic bomb for kiddies /exploring NSA exploits/
The Atomic bomb for kiddies /exploring NSA exploits/defcon_kz
 
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.Anastasia Lubennikova
 
Linux basics. Занятие 3.
Linux basics. Занятие 3. Linux basics. Занятие 3.
Linux basics. Занятие 3. Vikentsi Lapa
 
Владислав Животнев - Основы DNS
Владислав Животнев - Основы DNSВладислав Животнев - Основы DNS
Владислав Животнев - Основы DNSYandex
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияMichael Pankov
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON
 
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервераRoman Brovko
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаAnastasia Lubennikova
 
Sphinx: распределяя индексы.
Sphinx: распределяя индексы.Sphinx: распределяя индексы.
Sphinx: распределяя индексы.MageCloud
 

Was ist angesagt? (19)

Веб-сервер
Веб-серверВеб-сервер
Веб-сервер
 
Анализ трафика
Анализ трафикаАнализ трафика
Анализ трафика
 
ХАРДЕНИНГ (Аринов Ильяс (determination))
ХАРДЕНИНГ (Аринов Ильяс (determination))ХАРДЕНИНГ (Аринов Ильяс (determination))
ХАРДЕНИНГ (Аринов Ильяс (determination))
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
Находим и эксплуатируем уязвимости. Теория и практические примеры уязвимых ре...
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы
 
Web весна 2012 лекция 2
Web весна 2012 лекция 2Web весна 2012 лекция 2
Web весна 2012 лекция 2
 
The Atomic bomb for kiddies /exploring NSA exploits/
The Atomic bomb for kiddies /exploring NSA exploits/The Atomic bomb for kiddies /exploring NSA exploits/
The Atomic bomb for kiddies /exploring NSA exploits/
 
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
Hacking PostgreSQL. Локальная память процессов. Контексты памяти.
 
Linux basics. Занятие 3.
Linux basics. Занятие 3. Linux basics. Занятие 3.
Linux basics. Занятие 3.
 
Владислав Животнев - Основы DNS
Владислав Животнев - Основы DNSВладислав Животнев - Основы DNS
Владислав Животнев - Основы DNS
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего внимания
 
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/LinuxSECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
SECON'2017, Клементьев Михаил, Обнаружение руткитов в GNU/Linux
 
HTTP протокол
HTTP протоколHTTP протокол
HTTP протокол
 
07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера07 - Web-технологии. Web-сервера
07 - Web-технологии. Web-сервера
 
Perl in da shell
Perl in da shellPerl in da shell
Perl in da shell
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
Sphinx: распределяя индексы.
Sphinx: распределяя индексы.Sphinx: распределяя индексы.
Sphinx: распределяя индексы.
 

Ähnlich wie Web осень 2012 лекция 3

Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3Technopark
 
Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"Yandex
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor SysoevMedia Gorod
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersPositive Hack Days
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеAlexey Androsov
 
Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajaxYandex
 
Стажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTPСтажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTP7bits
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxYandex
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаAlexei Smolyanov
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)Александр Сигачев
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 67bits
 
Web весна 2013 лекция 2
Web весна 2013 лекция 2Web весна 2013 лекция 2
Web весна 2013 лекция 2Technopark
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)Ontico
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkOleksandr Torosh
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3Dima Dzuba
 
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)xasima
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковYandex
 

Ähnlich wie Web осень 2012 лекция 3 (20)

Web осень 2013 лекция 3
Web осень 2013 лекция 3Web осень 2013 лекция 3
Web осень 2013 лекция 3
 
Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"Алексей Андросов "HTML5 в Я.Почте"
Алексей Андросов "HTML5 в Я.Почте"
 
Nginx Igor Sysoev
Nginx   Igor SysoevNginx   Igor Sysoev
Nginx Igor Sysoev
 
WWW
WWWWWW
WWW
 
О безопасном использовании PHP wrappers
О безопасном использовании PHP wrappersО безопасном использовании PHP wrappers
О безопасном использовании PHP wrappers
 
Практическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.ПочтеПрактическое применение HTML5 в Я.Почте
Практическое применение HTML5 в Я.Почте
 
Mihail davidov js-ajax
Mihail davidov js-ajaxMihail davidov js-ajax
Mihail davidov js-ajax
 
Стажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTPСтажировка-2013, разработчики, занятие 7. Web, HTTP
Стажировка-2013, разработчики, занятие 7. Web, HTTP
 
Михаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, AjaxМихаил Давыдов — Транспорт, Ajax
Михаил Давыдов — Транспорт, Ajax
 
Node.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчикаNode.JS: возможности для РНР-разработчика
Node.JS: возможности для РНР-разработчика
 
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)Elasticsearch(java) fluentbit(c++)    fluentd(ruby) kibana(javascript)
Elasticsearch(java) fluentbit(c++) fluentd(ruby) kibana(javascript)
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 6
 
Web весна 2013 лекция 2
Web весна 2013 лекция 2Web весна 2013 лекция 2
Web весна 2013 лекция 2
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
Phalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP FrameworkPhalcon - самый быстрый PHP Framework
Phalcon - самый быстрый PHP Framework
 
МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3МАИ, Сети ЭВМ, Лекция №3
МАИ, Сети ЭВМ, Лекция №3
 
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)
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр ВолковОпенсорс-инструменты на страже безопасности бэкенда — Петр Волков
Опенсорс-инструменты на страже безопасности бэкенда — Петр Волков
 

Mehr von Technopark

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeperTechnopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 

Mehr von Technopark (20)

Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 

Web осень 2012 лекция 3

  • 3. Терминология ●Порт (port) ●Соединение (connection) ●Сокет (socket) ●Запрос (request) ●Локейшен (location) ●Файлы и директории (directory) ●Файл настроек (httpd.conf, nginx.conf) ●Лог доступа (access log) ●Лог ошибок (error log)
  • 4. Запуск Web сервера 1) Команда на запуск sudo /etc/init.d/httpd start /usr/sbin/httpd -f /home/me/httpd.conf 2) Чтение файла конфигурации 3) Получение порта 80 4) Открытие (создание) логов 5) Понижение привелегий (*) 6) Запуск дочерних процесов/потоков (*) 7) Готов к обработке запроса
  • 5. Файлы Web-сервера 1) Конфиг /etc/apache2/httpd.conf Include /etc/apache2/mods-available/* Include /etc/apache2/sites-available/* 2) Скрипт /etc/init.d/apache2 [start|stop|restart] 3) PID-файл /var/run/apache2.pid 4) Error-лог /var/log/apache2/error.log /var/log/apache2/mydomain-error.log 5) Access-лог /var/log/apache2/access.log /var/log/apache2/mydomain-access.log
  • 6. Процессы Web-сервера 1) Master (root, 1 процесс) – Чтение и валидация конфига – Открытие сокета (ов) – Открытие файлов логов – Запуск и управление дочерними процессами (worker) – Graceful restart, Binary updates 7) Worker (www-data, 1+ процессов) – Обработка входящих запросов
  • 7. Доступ к файлам в UNIX $ ls -lah server/core.c -rw-r--r-- 1 nuf users 156K Feb 6 21:15 server/core.c У файла (или директории) есть: - пользователь (владелец) - группа - права доступа (read/write/execute) У процесса есть: - пользователь - группа
  • 9. Модульная архитектура ●web сервер – не монолитный ●LoadModule – загрузка модулей ●Этапы обработки запроса и модули ●Дополнительные директивы, контексты ●Примеры: mod_mime, mod_mime_magic, mod_autoindex, mod_rewrite, mod_cgi, mod_perl, mod_gzip
  • 11. Конфигурация Apache Listen 80 User www DirectoryIndex index.html DocumentRoot /www/htdocs NameVirtualHost *:80 <VirtualHost *:80> ServerName www.domain.ru DocumentRoot /www/domain ErrorLog /var/log/domain/error_log CustomLog /var/log/domain/access_log <Directory "/var/www/html"> Options Indexes FollowSymLinks </Directory> <Location "/private/"> Order Allow, Deny Deny from all </Location> </VirtualHost>
  • 12. Секции и директивы <VirtualHost> – конфигурация для домена <Location /admin> </Location> <LocationMatch .svn> </LocationMatch> <Directory /htdocs> </Directory> <DirectoryMatch /inc/> </DirectoryMatch> DocumentRoot /www/htdocs Alias /www/htdocs/
  • 13. Порядок применения 1) VirtualHost – по заголовку Host 2) DocumentRoot / Alias – вычисление пути 3) Directory и .htaccess 4) DirectoryMatch 5) Files и FilesMatch 6) Location и LocationMatch Приоритеты – в обратном порядке
  • 14. Конфигурация Nginx user www www; error_log /var/log/nginx.error_log info; http { include conf/mime.types; default_type application/octet-stream; log_format simple '$remote_addr $request $status'; server { listen one.example.com; server_name one.example.com www.one.example.com; access_log /var/log/nginx.access_log simple; location / { root /www/one.example.com; } location ~* ^.+.(jpg|jpeg|gif)$ { root /www/images; access_log off; expires 30d; } } }
  • 15. Секции и директивы http – конфигурация для HTTP сервера server – конфигурация домена (вирт. Хоста) location – локейшен (привет, Кэп!) server_name – имена доменов root, alias – откуда нужно брать файлы error_log – лог ошибок сервера access_log – лог запросов
  • 16. Приоритеты локейшенов В nginx: В apache: location = /img/1.jpg location ^~ /pic/ location *~ .jpg$ location /img/ <Location> и <LocationMatch> <Files> и <FilesMatch> <DirectoryMatch> <Directory>
  • 18. Простой TCP сервер import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('127.0.0.1', 8080)) s.listen(10) while True: conn, addr = s.accept() request = conn.recv(1024).decode('utf8') url = request.rstrip("rn") file = open('/www' + str(url), 'r') data = file.read(1024).encode('utf8') conn.send(data) file.close() conn.close()
  • 20. Более 1 клиента ? 1) Многопоточность (threads) + экономия памяти + быстрый запуск потока — все библиотеки должны быть thread-safe 2) Дочерние процессы (prefork) + простота, не обязательно thread-safe — потребление памяти — медленый запуск процессов 3) Комбинированный режим (worker)
  • 22. IO Multiplexing readsocks = […] # список сокетов для чтения writesocks = […] # список сокетов для записи while True: readables, writeables, exceptions = select(readsocks, writesocks, []) for sockobj in readables: data = sockobj.recv(1024) if not data: sockobj.close( ) readsocks.remove(sockobj) else: print 'tgot', data, 'on', id(sockobj)
  • 23. AIO
  • 24. Event-Driven programming 1) множество открытых файлов 2) select, kqueue, epoll, aio... 3) последовательное исполнение события→ 4) “20 байт из сокета A”, “6 байт из файла B” + быстро, никакого сна + экономия памяти. 1 клиент – 1 структура + большое количество клиентов — очень тяжело программировать — блокирующие вызовы запрещены
  • 25. Кто есть Who. 1) Apache – prefork, worker, С 2) ISS, Tomcat, Jetty – threads, Java 3) Starman, Hypnotoad – prefork, языки высокого уровня 4) nginx, lighttpd – асинхронные, С 5) Node.JS, Tornado, POE – асинхронные, языки высокого уровня 6) Erlang! 7) Для разработки.
  • 27.
  • 28. Front-end 1) отдача статических файлов 2) проксирование (reverse proxy) 3) балансировка нагрузки 4) кеширование 5) сборка SSI 6) авторизация, SSL, нарезка картинок, gzip Легкий, быстрый, множество соединений
  • 29. Проксирование в nginx upstream backend { server back1.example.com:8080 weight=1; server back2.example.com:8080 weight=2; } proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 60s; location / { proxy_pass http://backend; } location ~ /(img|css|js)/ { root /www/static; } location /partner/ { proxy_pass http://www.partner.com; }
  • 30. Back-end 1) CGI 2) FastCGI 3) mod_perl, mod_python, mod_php, PHP!!! 4) PSGI, WSGI, Rack 5) apache не нужен ? Обработка сложных запросов, запуск скриптов.
  • 31. CGI
  • 33. Comet
  • 34. Полезные утилиты 1) top – список запущенных процессов top -d 1 2) netstat – список сетевых соединений netstat -t 3) telnet – элементарный tcp клиент telnet mail.ru 80 4) ab – нагрузочное тестирование ab -n 1000 -c 10 http://mail.ru/
  • 35. Домашнее задание Установить mysql Создать пользователя и базу данных Спроектировать схему БД (в виде моделей) Подключить Django к СУБД