Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: платформа для REST сервисов
- To: nginx-ru@xxxxxxxxx
- Subject: Re: платформа для REST сервисов
- From: "Sergey Shepelev" <temotor@xxxxxxxxx>
- Date: Fri, 2 Jan 2009 17:37:13 +0300
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references; bh=SbB8ev341x/FON0yuN17EsQ7whHI8MzDx7UcCndErL4=; b=vcdHBHHIF9xiN80Ybyl+g+GqH4/Lz3GZiD0LnrrHNVEjJvRDvMQbA7uveCtgBNroZq gKhExFz9oIxHOBlC3egzocQOr+y1I7UiNJIHxLnLyQfqyKikorkTNy6zzJzI7V7dd2xX Nll8UBeNo2DoDRz2qMZbrfq9ca4M0OamDOo78=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references; b=HDO3KdY+wk7CRYQ01/QuNaXayknTQ3Bhcu55bs7V9ent0vMpSuJasFA+gj/TRzEGDE MeG4RXhuAMlQnlgr6ZMe0mVWTme9aiJacY+O2BBKSmYBHu6aZ8stlpXnrh0PhKmWAtUD FkbJZp6puWXhqo1wloziCSZaNGdyVu0SzNbqg=
- In-reply-to: <187213305.20081231184037@xxxxxxxxxxxxx>
- References: <2d8fb9950812301424t5a8aaa40k975c2cf08d318abd@xxxxxxxxxxxxxx> <187213305.20081231184037@xxxxxxxxxxxxx>
Сообщения отдельно, таймауты отдельно.
У меня есть некий асинхронный движок. Допустим я по какому-то внешнему
событию (например запуск) хочу подконектиться к другому серверу и
послать ему строчку.
Для этого я говорю своему асинхронному движку: конектись(адрес, порт,
за 10 секунд).
В это время движок делает соответствующий системный вызов... и таки
да, никаких таймаутов. Но он либо
а) устанавливает еще один колбек от системы - на время 10 секунд и
ждет какое событие наступит раньше (реализация таймаута)
б) либо периодически очень-очень часто теребит ОС, мол, а не
наступило ли там событие. И в процессе этого теребления инкрементит
прошедшее время. И опять-таки получается реализация таймаута.
Конечно может быть есть еще куча гораздо более лучших способов. Я
просто хотел сказать, что если в сисколе select/epoll/etc нет понятия
таймаута - это не значит, что асихнронные приложения их не ждут.
Асинхронщина без реализации таймаутов (в любом виде, мне правда пофигу
на каком уровне и как именно) - бесполезна.
2008/12/31 <postmaster@xxxxxxxxxxxxx>:
> Здравствуйте, Sergey.
>
> Вы не совсем правильно представляете работу асинхронных приложений.
> Они не ждут таймаут, они получают сообщения от ОС и по ним что-то делают.
>
>> Почитал тред про CGI в nginx, утром обсуждали смежную задачку с колегом.
>> Только у меня идея была написать всю асинхронщину на питоне, а в
>> реальной жизни мы используем nginx + fastcgi на питоне.
>
>> И в общем идея примерно такая.
>> Есть некий слой "А" асинхронной обработки запросов снаружи (повторюсь,
>> сейчас его роль офигительно выполняет nginx).
>> "А" знает, что в его распоряжении имеется, скажем 100 бекендов - 100
>> процессов. Думаю, оптимальное количество можно определить для
>> конкретной материнки и проца. (RFC)
>> Приходит внешний запрос от клиента. "А" здесь быстро принимает запрос
>> и ищет свободный воркер
>> если есть свободный воркер, (RFC)
>> помечает его как занятый
>> асинхронно шлёт запрос ему,
>> (и продолжает работать дальше)
>> если нет свободного воркера
>> ждем таймаут, если в течение таймаута свободного воркера не
>> появилось - возвращаем клиенту "таймаут" (RFC, кажется, nginx именно
>> так и умеет)
>> когда воркер вернул результат
>> отдаём клиенту,
>> помечаем воркер как свободный.
>
>> К этому счастью нужно прикрутить админку бекендов с графиками и
>> полуавтоматическим контроллером пула воркеров, то есть чтоб некий
>> третий процесс контроллировал сколько нужно прибить лишних воркеров,
>> сколько нужно открыть новых (RFC).
>
>> Получится наверно что-то вроде веб-части Google AppEngine.
>
>
>
>
> --
> С уважением,
> postmaster mailto:postmaster@xxxxxxxxxxxxx
>
>
>
|