«Сетевые протоколы для веб разработчика — выжимаем...
DESCRIPTION
Автор: Александр Сербул, руководитель направления контроля качества и внедрений компании "1С-Битрикс". Pасскажет об эффективной работе с сетевыми технологиями (tcp/ip, dns, tls, spdy, websockets, long polling, http 2.0) при разработкеTRANSCRIPT
Сетевые протоколы для веб-разработчика - выжимаем максимум
Александр Сербул
руководитель направленияконтроля качества интеграции и внедрений 1С-Битрикс
Автомат Калашникова
• Понятный
• Надежный
• Стреляет пулями
• Всегда с тобой
Цена абстракции
Цена абстракции
Генеалогия...
Реинкарнации богов...
Ken Thompson (sitting) and
Dennis Ritchie at PDP-11
СтандартыRFC (Request for Comments) - «рабочее
предложение», «тема для обсуждения»
Internet Society (ISOC) — общество Интернета
Internet Engineering Task Force (IETF) —
Инженерный совет Интернета
World Wide Web Consortium (W3C) —
Консорциум Всемирной Паутины
TCP/IP, SCTP ...
Структура пакетов, tcpdump
Системные API
«Занимательные» стеки
Полезные книжечки, боевые проекты
Должно быть просто и удобно! :-)
Скорость света =
• ~300 000 км/сек в вакууме
• IP пакетам нужно время
Справа – Альберт Энштейн в детстве
Средняя скорость соединения
• Akamai, 2013 Q4
Последняя миля … портит всё
• Сосед играет в WOT
• Масштабные скачивания
• Wi-Fi
• 3-4G
Нередко +сотни миллисекунд.
Мониторинг: js->php->pinba->графики, тесты
3. W3C Navigation Timing API
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
TCP – «раскачка»
TCP – bandwidth-delay product, HOL
• «Простаиваемые мощности»
TCP – head of line blocking (HOL)
• Паровозик, ждем первый вагон
А тут на тебе: QUIC
• Quick UDP Internet Connections, Google
• Multiplexing/UDP
• Нет 3-way TCP handshake
Страшно ☺
Firewalls, NATS…
Может лучше SCTP?
• Stream Control Transmission Protocol
• Multihoming, message oriented,
multiplexing
• Уже задействован в WebRTC
DataChannel->SCTP/DTLS/UDP
• Текущая инфраструктура…
HTTP
• 1.1 – постоянные tcp
соединения!
• Сжатие трафика – nginx/
apache
• Проблемы TCP
• Пулы соединений браузеров
HTTP 2.0, SPDY
• Оптимизация передачи
заголовков
• Мультиплексирование
• Server Push
• TLS всех спасет ☺
TLS
• Transport Layer Security
• Очень «умные» прокси
• Туннель для SPDY/HTTP 2.0
• Туннель для WebSockets
• Ах да, безопасность
TLS - оптимизация
• nginx – TLS-сессии по-
умолчанию отключены
• Цепочки сертификатов,
валидация
• Динамический прокси,
ранняя терминация
• WireShark, tcpdump
Чеклист
• Помним о скорости света и latency
• Помним о высокой стоимости tcp, tls соединений
• HTTP 1.1 keepalive
• Стоим ближе к клиенту
• CDN
• «Обратный» CDN – POST, PUT, HTTP 1.1 keepalive …
• Религия = опиум для народа. Все проверяем:
WireShark, tcpdump
Программирование - ошибки
• HTTP 1.0 – открытие соединения каждый раз
• Последовательный перебор соединений в
цикле
• select/pool – почти || работа с сетью
• Изучайте протоколы, в конце концов!
• Аудит кода
На закуску• XHR
• Long Polling
• SSE
• Web Sockets
• Web RTC
• Беспроводные сети
Сначала думаем, потом кодим…
XHR, aka AJAX• XML HTTP Request, “Asynchronous Javascript and XML”
• А при чем тут XML? ;-)
• Высокоуровневое API
• CORS (Cross-Origin Resource Sharing)
• + сжатие, авторизация, кэширование
• - streaming
• - multiplexing
• - в одну сторону
• Long-Polling – просто, надежно, … дорого
SSE
• Server-Sent Events
• Простой протокол
• UTF-8, Base64 (+33% size)
• +streaming
• +compression
• -в одну сторону
• -Internet Explorer
• -firewals, прокси…
WebSockets
• duplex, сервер может сам инициировать запрос
• message oriented
• text UTF-8, binary
• - держит 1 TCP соединение
• - нет сжатия, делать самим
• - HOL (head of line blocking)
• - multiplexing
• - не понимают прокси (TLS поможет)
Сравним
Должно быть просто и удобно! :-)
WebRTC
• Real-time Communication Between Browsers
• WebRTC – это «ад», но он отлично работает!
WebRTC - возможности
• Audio/Video связь между браузерами
• Групповые конференции (небольшие)
• Передача данных - Data Channel
• Multiplexing
• Новейшие кодеки, отличное качество
• Безопасность
WebRTC - особенности
• Инфраструктура:
- STUN сервер
- TURN сервер
• Proxy, firewalls – UDP
• Relays ~10%
• ~ 1-2 Mbps на канал (HD)
• Тестирование соединения
• UDP/DTLS/SCTP
Беспроводные сети – технологии
Беспроводные сети – скорости
Беспроводные сети - особенности
• Аккумулятор разряжается!
• RRC (Radio Resource Controller)
WiFi: 30-200 mW
3G/4G: 15 mW, 1000 – 3500 mW!
• «Ходим» в сеть – по крайней необходимости
Чеклист
• Знайте особенности сетевых протоколов
• Постоянно учитесь и тренируйте мозги себе
• … и разработчикам
• Исследуйте потоки данных, полюбите
точность и математику
• Измеряйте (tcpdump, WireShark)
• Питайтесь правильно ☺
Спасибо за внимание! Вопросы?
Александр Сербул[email protected]@AlexSerbul