«Миллион открытых каналов с данными по сети» – Илья...

21
Миллион конкурентных потоков по сети

Upload: avitotech

Post on 18-Feb-2017

57 views

Category:

Internet


4 download

TRANSCRIPT

Миллион конкурентных потоков по сети

Задача

• Есть два типа сервиса

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

• Задачу надо решать

• Много боли

Пакетная передача

UDP

• Легкий и простой

• Отсутствует понятие соединения

• Нет контроля доставки

• Нет контроля скорости передачи

UDPЛегкий и простой

Отсутствует понятие соединения Нет контроля доставки

Нет контроля скорости передачи

1 2 3 4 5 6

2 3 1 5 6 4

Sender

Receiver

Потоковая передача

TCP

• Легкий и простой в использовании. Очень сложный в реализации.

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

• Гарантирует порядок передачи данных

• Управляет скоростью передачи

TCPЛегкий и простой в использовании. Очень сложный в реализации.

Требует установления соединения Гарантирует порядок передачи данных

Управляет скоростью передачи

1 2 3 4 5 6

2 3 1 5 6 4

Retransmit

1 2 3 4 5 6

Sender

Receiver

Buffer

TCP алгоритмы

• Размер буфера отправки/получения

• Время ожидания доставки пакета

• Частота отправки пакетов

TCP multiplexing

• Решаем проблему ограниченности портов

• Решаем проблему “разгона” новых соединений

TCP multiplexing

• Решаем проблему ограниченности портов

• Решаем проблему “разгона” новых соединений

• Но есть один нюанс

Head-of-Line Blocking1 2 3 4 5 6 7 8 9 10 11 12

Worker1

Worker2 (stuck)

Worker3

Врем

я

Современные протоколы

• Современный мир стал гораздо более интерактивным, чем раньше

• HTTP2, решение для потоков данных client\server

• QUIC, решение для потоков данных client\server, server\server

HTTP2

• Работает поверх TCP

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

• Практически не улучшает ситуацию с HOLB

• Не подходит для server\server взаимодействия

QUIC• Анонсирован в 2013, после окончания работ над

HTTP2

• Работает поверх UDP

• Фактически этот протокол можно назвать “TCP с независимыми подканалами”

• Решает все проблемы. Но сырой, сложный для имплементации, нет реализаций, кроме референсной на C/C++

Что можно упростить• Все современные протоколы - общего пользования. То есть рассчитаны на работу в условиях сомнительного качества интернет канала.

• Внутри одного ДЦ сеть работает отлично.

• Значит можно делать кастомное решение поверх TCP (снимая с себя огромный кусок сложности)

Astranet1 2 3 4 5 6 7 8 9 10 11 12

Worker1

Врем

я

I’m ready

1 2

I’m ready

3 4

Worker2

I’m ready

2

I’m ready

4

Worker3

I’m ready

2

I’m ready

4

1

3

I’m stuck

1

3Still stuck

Astranet. Simple server

Astranet. Simple client

Astranet• Service discovery

• Sticky load-balancing

• Возможность запускать сервер за натом

• Простой (нативный для потоков) API

• Линейная производительность 50% от производительности чистого tcp стека

Ваши вопросы• Ilya Biin

[email protected]

• skype: biinilya

• Полезные ссылки:

• https://github.com/zenhotels/astranet

• https://en.wikipedia.org/wiki/QUIC

• https://en.wikipedia.org/wiki/HTTP/2

• https://en.wikipedia.org/wiki/Head-of-line_blocking

Обо мне