Основы дизайна систем: опрос, потоковая передача, сокеты

В современную эпоху непрерывных обновлений, push-уведомлений, потокового контента и данных в реальном времени важно понимать основные принципы, лежащие в основе этих технологий. Чтобы данные в вашем приложении обновлялись регулярно или мгновенно, необходимо использовать один из двух следующих подходов.

Опрос (Polling)

Опрос - это просто проверка вашего клиента на сервере путем отправки ему сетевого запроса и запроса обновленных данных. Эти запросы обычно выполняются через регулярные интервалы, например 5 секунд, 15 секунд, 1 минуту или любой другой интервал, необходимый для вашего варианта использования.

Опрос каждые несколько секунд все же не совсем то же самое, что и в реальном времени, и также имеет следующие недостатки, особенно если у вас более миллиона одновременных пользователей:

  • почти постоянные сетевые запросы (не очень удобно для клиента)
  • почти постоянные входящие запросы (не очень хорошо для серверных нагрузок - 1 млн + запросов в секунду!)

Таким образом, быстрый опрос не является действительно эффективным или производительным, и опрос лучше всего использовать в обстоятельствах, когда небольшие пробелы в обновлениях данных не являются проблемой для вашего приложения.

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

Потоковая передача решает проблему постоянного опроса. Если необходимо постоянно обращаться к серверу, то лучше использовать так называемые веб-сокеты.

Это сетевой протокол связи, предназначенный для работы через TCP. Он открывает двусторонний выделенный канал (сокет) между клиентом и сервером, что-то вроде открытой горячей линии между двумя конечными точками.

В отличие от обычной связи TCP/IP, эти сокеты являются «долгоживущими», так что это один запрос к серверу, который открывает эту горячую линию для двусторонней передачи данных, а не несколько отдельных запросов. Под долгоживущим мы подразумевали, что сокетное соединение между машинами будет длиться до тех пор, пока одна из сторон не закроет его или сеть не разорвется.

IP, TCP и HTTP работают, отправляя «пакеты» данных для каждого цикла запрос-ответ. Веб-сокеты означают, что существует единственное взаимодействие запроса-ответа (на самом деле это не цикл, если вы думаете об этом!), Открывается канал, по которому два набора данных отправляются в «потоке».

Большая разница с опросом и всеми «обычными» IP-коммуникациями заключается в том, что в то время как при опросе клиент делает запросы к серверу для данных через равные промежутки времени («извлекает» данные), при потоковой передаче клиент находится «в режиме ожидания», ожидая сервер, чтобы «протолкнуть» некоторые данные. Сервер будет отправлять данные, когда они меняются, и клиент всегда их ожидает. Следовательно, если изменение данных является постоянным, тогда оно становится «потоком», который может быть лучше для того, что нужно пользователю.

Например, при использовании IDE для совместного кодирования, когда один из пользователей что-то вводит, это может отображаться на другом, и это делается через веб-сокеты, потому что вы хотите сотрудничать в реальном времени. Было бы ужасно, если бы то, что я напечатал, появилось на вашем экране после того, как вы попытались ввести то же самое или через 3 минуты ожидания, гадая, что я делаю!

Или подумайте о сетевых многопользовательских играх - это идеальный вариант использования потоковой передачи игровых данных между игроками!

В заключение, вариант использования определяет выбор между опросом и потоковой передачей. В общем, вы хотите выполнять потоковую передачу, если ваши данные «в реальном времени»; если для вашего случая нормально, что присуствует задержка, тогда опрос может быть хорошим вариантом. Но все зависит от того, сколько у вас одновременных пользователей и ожидают ли они мгновенного получения данных. Часто используемым примером потокового сервиса является Apache Kafka.


Читайте также:

Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Нормальные формы, пример нормализации в базе данных

Хэш-таблица: разрешение коллизий