ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re[2]: платформа для REST сервисов



Можно? Приделайте, выложите модулем/патчем, ребятам будет приятно. Особенно, если они, напустив на него ab, получат нормальные результаты.

10 января 2009 г. 21:38 пользователь Peter A Leonov <gojpeg@xxxxxxxxx> написал:
Согласен с вами, к нжинксу можно приделать цги. И можно замудрить так, что все будет вполне себе рилтайм. Только, боюсь, это не очень интересная задача, раз ребята так противятся самой мысли о ней.

С уважением,
Петр Леонов.
+7 (905) 758-12-73


On 10.01.2009, at 7:26, "Sergey Shepelev" <temotor@xxxxxxxxx> wrote:

OMFG уважаемые господа, речь шла о таймаутах событийной машины.
Конект за 10 секунд - что-то произойдет раньше - либо конект, либо 10 секунд.
В nginx есть proxy_connect_timeout. Речь об этом была, йолки.

2009/1/8 Sergey Bondari <bondari@xxxxxxxxxxx>:
Hello Sergey,

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

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


SS> У меня есть некий асинхронный движок. Допустим я по какому-то внешнему
SS> событию (например запуск) хочу подконектиться к другому серверу и
SS> послать ему строчку.
SS> Для этого я говорю своему асинхронному движку: конектись(адрес, порт,
SS> за 10 секунд).
SS> В это время движок делает соответствующий системный вызов... и таки
SS> да, никаких таймаутов. Но он либо
SS>   а) устанавливает еще один колбек от системы - на время 10 секунд и
SS> ждет какое событие наступит раньше (реализация таймаута)
SS>   б) либо периодически очень-очень часто теребит ОС, мол, а не
SS> наступило ли там событие. И в процессе этого теребления инкрементит
SS> прошедшее время. И опять-таки получается реализация таймаута.

SS> Конечно может быть есть еще куча гораздо более лучших способов. Я
SS> просто хотел сказать, что если в сисколе select/epoll/etc нет понятия
SS> таймаута - это не значит, что асихнронные приложения их не ждут.
SS> Асинхронщина без реализации таймаутов (в любом виде, мне правда пофигу
SS> на каком уровне и как именно) - бесполезна.

SS> 2008/12/31  <postmaster@xxxxxxxxxxxxx>:
Здравствуйте, Sergey.

Вы не совсем правильно представляете работу асинхронных приложений.
Они не ждут таймаут, они получают сообщения от ОС и по ним что-то делают.

Почитал тред про CGI в nginx, утром обсуждали смежную задачку с колегом.
Только у меня идея была написать всю асинхронщину на питоне, а в
реальной жизни мы используем nginx + fastcgi на питоне.

И в общем идея примерно такая.
Есть некий слой "А" асинхронной обработки запросов снаружи (повторюсь,
сейчас его роль офигительно выполняет nginx).
"А" знает, что в его распоряжении имеется, скажем 100 бекендов - 100
процессов. Думаю, оптимальное количество можно определить для
конкретной материнки и проца. (RFC)
Приходит внешний запрос от клиента. "А" здесь быстро принимает запрос
и ищет свободный воркер
если есть свободный воркер, (RFC)
 помечает его как занятый
 асинхронно шлёт запрос ему,
(и продолжает работать дальше)
если нет свободного воркера
  ждем таймаут, если в течение таймаута свободного воркера не
появилось - возвращаем клиенту "таймаут" (RFC, кажется, nginx именно
так и умеет)
когда воркер вернул результат
  отдаём клиенту,
  помечаем воркер как свободный.

К этому счастью нужно прикрутить админку бекендов с графиками и
полуавтоматическим контроллером пула воркеров, то есть чтоб некий
третий процесс контроллировал сколько нужно прибить лишних воркеров,
сколько нужно открыть новых (RFC).

Получится наверно что-то вроде веб-части Google AppEngine.




--
С уважением,
postmaster                          mailto:postmaster@xxxxxxxxxxxxx







--
Best regards,
Sergey






--
С уважением, Борис Долгов.
icq 77556665
e-mail boris@xxxxxxxxxxx


 




Copyright © Lexa Software, 1996-2009.