А сейчас кто-нибудь есть на конференции highload?

iravik

субж

tokuchu

В смысле?

Realist

я по инету смотрю

Sharp

И есть что интересное?
Три раза туда ходил, ждал чего-то интересного, в этот раз решил забить и провести время с пользой :)

Realist

Мне, плюсовику и старперу, оч. даже интересно.

Sharp

Товарищ Шетухин еще не отжигал там? Докладчики из HighloadLab-а что-нить кроме саморекламы рассказывали?

okis

Товарищ Шетухин еще не отжигал там? Докладчики из HighloadLab-а что-нить кроме саморекламы рассказывали?
Он, вроде, не выступал, на докладе hll я не был

Spin

У Зайцева наверняка будет интересный доклад.

lubanj

А сейчас кто-нибудь есть на конференции highload?

есть. товарищ Баштанов

hwh2010

есть. товарищ Баштанов
не врёт

okunek

> Специализированные http-демона: круг решаемых задач, подходы и
> метод / Сергей Боченков, Александр Панков (Advaction)
знакомые имена...

slonishka

да, мы рассказывали про http-сервак, работающий так же хорошо, как nginx,
к которому в виде одной тупой простыни можно писать модули типа:
1. взять куку из запроса (если нет, отдать форму логина)
2. сходить с ней в демон сессий, получить json юзера (если не ответит, отдать форму логина)
3. вычленить что-то из этого json, сходить с этим в демон френдов, записей стены и логгер
4. из ответа френдов и записей стены скомпилировать ответ
код в стиле:
ugh_subreq_t *r = ugh_subreq_add(c, url);
ugh_subreq_set_body(r, cookie);
ugh_subreq_run(r);

ugh_subreq_wait(c);

...

ugh_subreq_t *r_wall = ...;
ugh_subreq_t *r_friends = ...;
ugh_subreq_t *r_logger = ...;

ugh_subreq_wait(c);

body = r_wall->body + r_friends->body;

return OK;

хорошие фичи из nginx постепенно перекочуют туда.
раздачи файлов, limit_zone итп, конечно, не будет.
то есть это сервак-сборщик, который умеет какую угодно логику сборки.
самые простые случаи можно прям из конфига писать (например, если просто два подзапроса надо склеить).
nginx такого не умеет по-человечески. собственно, это киллер-фича.
http://ugh.su/
http://github.com/bachan/ugh

slonishka

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

slonishka

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

pilot

да, мы рассказывали про http-сервак, работающий так же хорошо, как nginx,
к которому в виде одной тупой простыни можно писать модули типа:
Это вшмышле вы не нашли lua-модуль для nginx?

slonishka

а ты умеешь конфиг писать, который аналогично тому, как я описал, работает?

pilot

а ты умеешь конфиг писать, который аналогично тому, как я описал, работает?
Два подзапроса склеить? Да, насколько я помню. Но так как выглядит это некрасиво лучше все-таки http://github.com/chaoslawful/lua-nginx-module .
В общем ваше изделие — очередной велосипед с квадратными колесами, по-моему.

slonishka

Два подзапроса склеить? Да, насколько я помню. Но так как выглядит это некрасиво лучше все-таки http://github.com/chaoslawful/lua-nginx-module .
то есть ты умеешь даже на nginx из коробки склеить два запроса? =)
про модуль-то я понял, я про него и спрашивал: умеешь ли ты на нём склеивать два подзапроса?

pilot

то есть ты умеешь даже на nginx из коробки склеить два запроса? =)
Да. Лучше говорить "умел" — когда в Рамблере работал. По-моему ssi надо смотреть.
про модуль-то я понял, я про него и спрашивал: умеешь ли ты на нём склеивать два подзапроса?

Модулем я не пользовался, смотрел на него когда надоело конфиги писать. В нем есть честный subrequest.

slonishka

По-моему ssi надо смотреть.
ну ssi это совсем не то. я знаю, как на nginx такое делать модулями, я таких модулей много сделал.
но это ДИКО неудобно. это ОЧЕНЬ сложно писать.
а руками писать придётся, потому что в ssi ты не опишешь бизнес-логики.
Модулем я не пользовался, смотрел на него когда надоело конфиги писать.
В нем есть честный subrequest.
хорошо, я посмотрю на него, спасибо за наводку.
если это обертка над nginx-сущностью subrequest, то это тоже совсем не то.
во всех встроенных языках в nginx есть такие обертки.
с другой стороны, lua-модуль использует корутины и теоретически
можно сделать обёртку таким образом, чтобы она работала как надо.
но на практике надо смотреть, вероятно, вынужден буду с тобой не согласиться.

pilot

ну ssi это совсем не то
Ты сначала доки почитай нормально.
если это обертка над nginx-сущностью subrequest, то это тоже совсем не то.
во всех встроенных языках в nginx есть такие обертки.
с другой стороны, lua-модуль использует корутины и теоретически
можно сделать обёртку таким образом, чтобы она работала как надо.
но на практике надо смотреть, вероятно, вынужден буду с тобой не согласиться.

Свой велосипед конечно ближе к телу. А с практической точки зрения: глянул вашу презентацию — ничего интересного и особенного ваша поделка не умеет, чего нельзя достаточно просто на нгинксе сделать.
Хуже всего то что вы ее собираетесь развивать. Если б не собирались — можно было бы спорить на тему что тяжелее, написать велосипед или выучить нгинкс.

slonishka

Ты сначала доки почитай нормально.
покажи, пожалуйста, что я там должен увидеть?
я же читал их. =)
как на ssi в зависимости от заголовков первого подзапроса пойти на второй?

pilot

как на ssi в зависимости от заголовков первого подзапроса пойти на второй?
Хитрыми трюками которых лучше не знать :) Там есть ssi с условиями и внутренние переменные, если ничо не путаю.
Но саму эту задачу ты только сейчас придумал, опять же, есть модуль и там решить ее просто.
Кстати, ты ведь конечно попробовал embedded perl перед тем как свою штуку писать?

pilot

И наверняка ты в курсе что подобных твоей штуке штук — тонны. Даже тот же Tornado. Я может быть не понимаю в чем принципиальное отличие?

slonishka

Хитрыми трюками которых лучше не знать.
Там есть ssi с условиями и внутренние переменные, если ничо не путаю.
это несерьёзно и последний раз когда я смотрел, это не работало как надо.
предполагаю, что даже после появления директивы wait у <!--#include, с этим всё равно были какие-нибудь проблемы.
это слишком сложно. я боюсь даже представить конфиг, который реализует мой пример из первого поста на ssi...
опять же, я не знаю никого, кто в продакшене ssi таким образом использует.
может ты знаешь?
Но саму эту задачу ты только сейчас придумал, опять же, есть модуль и там решить ее просто.
ну почему только сейчас? у меня же в примере изначально была описана даже более сложная задача.
модуль-то я посмотрю, конечно, да.
Кстати, ты ведь конечно попробовал embedded perl перед тем как свою штуку писать?
на встроенном перле я не смог такое написать. может что-то изменилось с тех пор, конечно, но я сомневаюсь.

slonishka

торнадо медленный

pilot

торнадо медленный
торнадо быстрый

slonishka

Кстати, ты ведь конечно попробовал embedded perl перед тем как свою штуку писать?
слушай, там же вообще нет метода subrequest, судя по документации.
я этот XS последний раз чёрт знает когда смотрел, конечно, но я же в здравом уме от него отказался...

pilot

это несерьёзно и последний раз когда я смотрел, это не работало как надо.
предполагаю, что даже после появления директивы wait у <!--#include, с этим всё равно были какие-нибудь проблемы.
Ты писал свою прожку полдня? Тогда норм, свой велосипед лучше, потому как правильно готовить нгинкс тоже надо уметь — у меня получилось очень не сразу.
это слишком сложно. я боюсь даже представить конфиг, который реализует мой пример из первого поста на ssi...

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

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

Что значит "не смог"?

pilot

слушай, там же вообще нет метода subrequest, судя по документации.
я этот XS последний раз чёрт знает когда смотрел, конечно, но я же в здравом уме от него отказался...
Конечно нет, для subrequest есть ssi. Я не спорю что на нгинксе это делается не слишком легко, потому и дал ссылку на lua-модуль — там всё есть и легко.

slonishka

Конечно нет, для subrequest есть ssi.
тогда при чём тут вообще встроенный перл?
Я не спорю что на нгинксе это делается не слишком легко
ssi-ные if-ы не работают с переменными типа $upstream_http_...
они проверяют только переменные, заданные в начале обработки запроса.
скорей всего из-за какого-нибудь флажка у ngx_variable_t.
могу найти пруф в коде.
это опять же можно попатчить, но зачем.
я же знаю, что nginx не приспособлен для такой логики, которая мне нужна.
я же читал его исходники / писал ему патчи.
потому и дал ссылку на lua-модуль — там всё есть и легко
я понимаю, что всё вообще легко и просто, только я до этого lua-модуля видел еще несколько игрушечных модулей подобного рода.
ты так говоришь, как будто я nginx вчера увидел. лишь бы поспорить...
я завтра этот модуль посмотрю и скажу что-нибудь, если кому-нибудь вообще интересно моё мнение.
мой интерес к твоим постам заключается не в том, чтобы ты предполагал, что что-то можно сделать,
а в том, чтобы поделился опытом - как я вот таким конфигом сделал то-то.
было бы очень приятно, если бы ты так сделал.

slonishka

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

pilot

опять же, я не знаю никого, кто в продакшене ssi таким образом использует.
может ты знаешь?
Знаю. Рамблер.

pilot

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

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

iravik

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

pilot

тогда при чём тут вообще встроенный перл?
Запрос проходит через последовательность location. В одном location сделать всё нельзя, зато можно погонять по разным и в каждом сделать кусочек.
Для Perl : вызывается из SSI, умеет выставлять переменные, умеет отдавать данные клиенту.
SSI: Подзапросы - параллельные и последовательные.
Ну и напомню: я сразу говорил не про нгинкс из коробки. В нгинксе из коробки такие вещи делать сложно.
Посмотрел на ваш сайт — какая нагрузка у ваших сервисов?

apl13

простота разработки модулей достигнута с помощью механизма корутин.
В плюсах? :spy:

kokoc88

В плюсах?
Он же написал: переключается контекст. Если очень приблизительно, то можно рассматривать это как замену стека и выполняемого адреса в текущем потоке. Если бы речь шла про венду, то можно было бы почитать про fibers; я просто не в курсе, как это делается под другие OS.

erotic

Свой велосипед конечно ближе к телу. А с практической точки зрения: глянул вашу презентацию — ничего интересного и особенного ваша поделка не умеет, чего нельзя достаточно просто на нгинксе сделать.
Хуже всего то что вы ее собираетесь развивать. Если б не собирались — можно было бы спорить на тему что тяжелее, написать велосипед или выучить нгинкс.
И чего ты так ополчился. Писать на этой штуке по идее гораздо проще, чем на nginx. Для написания первого модуля на nginx надо прочитать немаленький мануал, да и при наличии некоторого опыта все равно это очень сложно в плане защиты от ошибок. Я б попробовал такой сервер на корутинах где-нибудь использовать в реальных приложениях, правда предпочел бы встраивать его в свое приложение, а не наоборот.

pilot

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

Таких серверов полно. Я не ополчился, это просто yet another бестолковая поделка — просто не вижу нового смысла.

Werdna

Таких серверов полно. Я не ополчился, это просто yet another бестолковая поделка — просто не вижу нового смысла.
:facepalm:
Где полно? Я знаю только один из открытых — ugh. Есть закрытые на корутинах поделки, но открытых я пока не знаю.
Такой демон я просил написать Бачана ещё с 2008 года, это реальный прорыв в области хайлоада.

pilot

Давай-ка ты тред прочитаешь перед тем как писать.

pilot

на lua по крайней мере элементарные вещи работают, круто!
Ау! Ну так как, можно услышать мнение про lua?

serega1604

>Ау! Ну так как, можно услышать мнение про lua?
тебе именно про lua или про модуль все-таки?

pilot

тебе именно про lua или про модуль все-таки?
Про модуль, бачан вроде собирался посмотреть правильно ли он в нгинкс встроен.

slonishka

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

pilot

Так вот, он разве не то же самое что ваш ugh делает? В чем разница?

slonishka

идеологически то же самое (правда я не проверял, можно ли из него вернуть ответ, не дожидаясь бекенда). на практике мне негде проверить. синтетические тесты не хочется писать. если попадётся задача, в которой нужно будет что-то, что есть в nginx, но нет в ugh, я может и проверю.

pilot

идеологически то же самое (правда я не проверял, можно ли из него вернуть ответ, не дожидаясь бекенда). на практике мне негде проверить. синтетические тесты не хочется писать. если попадётся задача, в которой нужно будет что-то, что есть в nginx, но нет в ugh, я может и проверю.
Ок.
ЗЫ: Теперь может и до alepar'а дойдет. :grin:
Оставить комментарий
Имя или ник:
Комментарий: