«Сетевые протоколы для веб разработчика — выжимаем...

46
Сетевые протоколы для веб-разработчика - выжимаем максимум Александр Сербул руководитель направления контроля качества интеграции и внедрений 1С-Битрикс

Upload: -

Post on 16-Jun-2015

139 views

Category:

Engineering


0 download

DESCRIPTION

Автор: Александр Сербул, руководитель направления контроля качества и внедрений компании "1С-Битрикс". Pасскажет об эффективной работе с сетевыми технологиями (tcp/ip, dns, tls, spdy, websockets, long polling, http 2.0) при разработке

TRANSCRIPT

Page 1: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Сетевые протоколы для веб-разработчика - выжимаем максимум

Александр Сербул

руководитель направленияконтроля качества интеграции и внедрений 1С-Битрикс

Page 2: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Автомат Калашникова

• Понятный

• Надежный

• Стреляет пулями

• Всегда с тобой

Page 3: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Цена абстракции

Page 4: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Цена абстракции

Page 5: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Генеалогия...

Page 6: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Реинкарнации богов...

Ken Thompson (sitting) and

Dennis Ritchie at PDP-11

Page 7: «Сетевые протоколы для веб разработчика — выжимаем максимум»

СтандартыRFC (Request for Comments) - «рабочее

предложение», «тема для обсуждения»

Internet Society (ISOC) — общество Интернета

Internet Engineering Task Force (IETF) —

Инженерный совет Интернета

World Wide Web Consortium (W3C) —

Консорциум Всемирной Паутины

Page 8: «Сетевые протоколы для веб разработчика — выжимаем максимум»

TCP/IP, SCTP ...

Page 9: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Структура пакетов, tcpdump

Page 10: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Системные API

Page 11: «Сетевые протоколы для веб разработчика — выжимаем максимум»

«Занимательные» стеки

Page 12: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Полезные книжечки, боевые проекты

Page 13: «Сетевые протоколы для веб разработчика — выжимаем максимум»
Page 14: «Сетевые протоколы для веб разработчика — выжимаем максимум»
Page 15: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Должно быть просто и удобно! :-)

Page 16: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Скорость света =

• ~300 000 км/сек в вакууме

• IP пакетам нужно время

Справа – Альберт Энштейн в детстве

Page 17: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Средняя скорость соединения

• Akamai, 2013 Q4

Page 18: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Последняя миля … портит всё

• Сосед играет в WOT

• Масштабные скачивания

• Wi-Fi

• 3-4G

Нередко +сотни миллисекунд.

Мониторинг: js->php->pinba->графики, тесты

Page 19: «Сетевые протоколы для веб разработчика — выжимаем максимум»

3. W3C Navigation Timing API

Page 20: «Сетевые протоколы для веб разработчика — выжимаем максимум»

TCP

• Соединение – 1 RTT

• Новые ядра

• Congestion window size (cwnd):

Linux 2.6.39+

ip route change … initcwnd 10 (4->10)

sysctl -w net.ipv4.tcp_slow_start_after_idle=0

Page 21: «Сетевые протоколы для веб разработчика — выжимаем максимум»

TCP – «раскачка»

Page 22: «Сетевые протоколы для веб разработчика — выжимаем максимум»

TCP – bandwidth-delay product, HOL

• «Простаиваемые мощности»

Page 23: «Сетевые протоколы для веб разработчика — выжимаем максимум»

TCP – head of line blocking (HOL)

• Паровозик, ждем первый вагон

Page 24: «Сетевые протоколы для веб разработчика — выжимаем максимум»

А тут на тебе: QUIC

• Quick UDP Internet Connections, Google

• Multiplexing/UDP

• Нет 3-way TCP handshake

Страшно ☺

Firewalls, NATS…

Page 25: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Может лучше SCTP?

• Stream Control Transmission Protocol

• Multihoming, message oriented,

multiplexing

• Уже задействован в WebRTC

DataChannel->SCTP/DTLS/UDP

• Текущая инфраструктура…

Page 26: «Сетевые протоколы для веб разработчика — выжимаем максимум»

HTTP

• 1.1 – постоянные tcp

соединения!

• Сжатие трафика – nginx/

apache

• Проблемы TCP

• Пулы соединений браузеров

Page 27: «Сетевые протоколы для веб разработчика — выжимаем максимум»

HTTP 2.0, SPDY

• Оптимизация передачи

заголовков

• Мультиплексирование

• Server Push

• TLS всех спасет ☺

Page 28: «Сетевые протоколы для веб разработчика — выжимаем максимум»

TLS

• Transport Layer Security

• Очень «умные» прокси

• Туннель для SPDY/HTTP 2.0

• Туннель для WebSockets

• Ах да, безопасность

Page 29: «Сетевые протоколы для веб разработчика — выжимаем максимум»

TLS - оптимизация

• nginx – TLS-сессии по-

умолчанию отключены

• Цепочки сертификатов,

валидация

• Динамический прокси,

ранняя терминация

• WireShark, tcpdump

Page 30: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Чеклист

• Помним о скорости света и latency

• Помним о высокой стоимости tcp, tls соединений

• HTTP 1.1 keepalive

• Стоим ближе к клиенту

• CDN

• «Обратный» CDN – POST, PUT, HTTP 1.1 keepalive …

• Религия = опиум для народа. Все проверяем:

WireShark, tcpdump

Page 31: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Программирование - ошибки

• HTTP 1.0 – открытие соединения каждый раз

• Последовательный перебор соединений в

цикле

• select/pool – почти || работа с сетью

• Изучайте протоколы, в конце концов!

• Аудит кода

Page 32: «Сетевые протоколы для веб разработчика — выжимаем максимум»

На закуску• XHR

• Long Polling

• SSE

• Web Sockets

• Web RTC

• Беспроводные сети

Page 33: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Сначала думаем, потом кодим…

Page 34: «Сетевые протоколы для веб разработчика — выжимаем максимум»

XHR, aka AJAX• XML HTTP Request, “Asynchronous Javascript and XML”

• А при чем тут XML? ;-)

• Высокоуровневое API

• CORS (Cross-Origin Resource Sharing)

• + сжатие, авторизация, кэширование

• - streaming

• - multiplexing

• - в одну сторону

• Long-Polling – просто, надежно, … дорого

Page 35: «Сетевые протоколы для веб разработчика — выжимаем максимум»

SSE

• Server-Sent Events

• Простой протокол

• UTF-8, Base64 (+33% size)

• +streaming

• +compression

• -в одну сторону

• -Internet Explorer

• -firewals, прокси…

Page 36: «Сетевые протоколы для веб разработчика — выжимаем максимум»

WebSockets

• duplex, сервер может сам инициировать запрос

• message oriented

• text UTF-8, binary

• - держит 1 TCP соединение

• - нет сжатия, делать самим

• - HOL (head of line blocking)

• - multiplexing

• - не понимают прокси (TLS поможет)

Page 37: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Сравним

Page 38: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Должно быть просто и удобно! :-)

Page 39: «Сетевые протоколы для веб разработчика — выжимаем максимум»

WebRTC

• Real-time Communication Between Browsers

• WebRTC – это «ад», но он отлично работает!

Page 40: «Сетевые протоколы для веб разработчика — выжимаем максимум»

WebRTC - возможности

• Audio/Video связь между браузерами

• Групповые конференции (небольшие)

• Передача данных - Data Channel

• Multiplexing

• Новейшие кодеки, отличное качество

• Безопасность

Page 41: «Сетевые протоколы для веб разработчика — выжимаем максимум»

WebRTC - особенности

• Инфраструктура:

- STUN сервер

- TURN сервер

• Proxy, firewalls – UDP

• Relays ~10%

• ~ 1-2 Mbps на канал (HD)

• Тестирование соединения

• UDP/DTLS/SCTP

Page 42: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Беспроводные сети – технологии

Page 43: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Беспроводные сети – скорости

Page 44: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Беспроводные сети - особенности

• Аккумулятор разряжается!

• RRC (Radio Resource Controller)

WiFi: 30-200 mW

3G/4G: 15 mW, 1000 – 3500 mW!

• «Ходим» в сеть – по крайней необходимости

Page 45: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Чеклист

• Знайте особенности сетевых протоколов

• Постоянно учитесь и тренируйте мозги себе

• … и разработчикам

• Исследуйте потоки данных, полюбите

точность и математику

• Измеряйте (tcpdump, WireShark)

• Питайтесь правильно ☺

Page 46: «Сетевые протоколы для веб разработчика — выжимаем максимум»

Спасибо за внимание! Вопросы?

Александр Сербул[email protected]@AlexSerbul