Асинхронные веб-серверы - конспект доклада IFF

Асинхронные сервера =
рассмотрим вопрос - че они отличаются от обычных -
а также как правильно использовать данную технологию.

Tornado Python - один из фрэймворков позволяющих создавать параллельные срвера.

Сервер - это некий код который "слушает" канал и даёт ответы на определённые запросы.

Чтобы будет если, для ответа необходимы длительные вычисления.

Под "блокирующим" - мы в целом будем подразумевтаь такой запрос, который не даёт возможности выполнять другие запросы.

Тогда придумали запускать много потоков - каждый из них - полноценный "сервер" -
но что делать, если закончился пул потоков? Если он ограничен, то наш сервер окажется уязвимым к DDoS атакам...но даже если без них - сколько процессов нам делать?

дело в том, что большое число процессов создат в добавок ко всему "метанагрузку" на планировщик.

главная причина появления асинхронной архитекутры - появление спец. технологии Comet & Long Polling

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

Вот тут нам на помощь и приходит асинхронный сервер.

АСИНХРОННЫЕ НЕБЛОКИРУЮЩИЕ СЕРВЕРЫ

а почему нет анимации?)))
ответ: анимации нет, так как BBB переводит презентации в картинки.

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

куда перебрасывают блокирующий вызов?
ответ: его перебрасывают в другой поток - как именно - пока не важно (поговорим об этом после) - главное ,чтобы наш основонй поток, котрый всё обрабатывает не заблокировался, а мог быть дальше обрабатывать другие запросы.

Как определяют, что запрос "блокирующий" если это не опредлено явно? по времени выполнения?

Ответ: надо знать архитектуру процесса в ОС. дело в том, что сам процесс не читает ничего с диска - контроллер винчестера "читает" сам.

ну а как определить чтобы перекинуть?
ответ: самый простой способ - без вычислений - все блокирующие вызовы - работа с файлами, базами и т.д. - перебрасывают в другие потоки, если же чисто вычисления - то тут надо смотреть на производительность.

ДОСТОИНСТВА И НЕДОСТАТКИ АСИНХРОННОЙ АРХИТЕКТУРЫ

Проблема 10к - 10k - обработать 10 тысяч процессов оказывается очень неэффективным - таким образом решение проблемы 10000 подключений достигается с помощью асинхронной архитектуры.

Достоинства асинхронной архитектуры:
- повышается живучесть при DDoS атаках.
- нет проблем с реализацией кэширования - так как у нас один процесс.

Недостатки:
1) если реализуем неправильно - всё будет работать крайне медленно и ужасно.
2) Имеет более высокий "порог вхождения"
3) Трудно разрабатывать многопоточные приложения.
4) Плохая документация к существующим фрэймворкам.

первые кто столкнулись - это ФБ, гугл и их братья =)

торнадо - каркас на питоне,
но есть и ещё один питон - Twisted Matrix Labs - по слухам разрабатывать на нём легко и приятно)))

Но для некоторых задач он может оказаться несколько перегружен -
да некоторым ещё и "неохота" читать документацию.

АСИНХРОННЫЕ ФРЭЙМВОРКИ (КАРСКАСЫ)

В последнее время очень популярным оказывается Node JS - правда, некоторые не любят сам ява скрипт ))

Netty project - асинхронный подарок для Java

Докладчик вычитал, что NGINX - сервер использует асинхронную архитектуру.

торнадо сам может решить стоит ли перекидывать запрос?
то есть он асинхронный фрэймворк только потому что есть функция создания нового процесса?
ответ: нет - мы саvи решаем когда создавать, фрэйморк же содержит ряд приятных документов