А сейчас кто-нибудь есть на конференции highload?
В смысле?
я по инету смотрю
Три раза туда ходил, ждал чего-то интересного, в этот раз решил забить и провести время с пользой
Мне, плюсовику и старперу, оч. даже интересно.
Товарищ Шетухин еще не отжигал там? Докладчики из HighloadLab-а что-нить кроме саморекламы рассказывали?
Товарищ Шетухин еще не отжигал там? Докладчики из HighloadLab-а что-нить кроме саморекламы рассказывали?Он, вроде, не выступал, на докладе hll я не был
У Зайцева наверняка будет интересный доклад.
А сейчас кто-нибудь есть на конференции highload?
есть. товарищ Баштанов
есть. товарищ Баштановне врёт
> метод / Сергей Боченков, Александр Панков (Advaction)
знакомые имена...
к которому в виде одной тупой простыни можно писать модули типа:
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
каждый запрос выполняется в отдельной корутине + одна главная корутина на эвент-луп
ф-ия ugh_subreq_wait переключает контекст на эвент-луповую корутину
когда приходит ответ от бекенда, эвент-луповая корутина возвращает контекст выполнения в модуль, обрабатывающий запрос.
идея с корутинами принадлежит пианисту
писал всё от начала и до конца я
я изначально хотел сделать демон, который просто из конфига будет позволять N подзапросов выполнить
а пианист предложил, как сделать разработку подобных модулей очень простой
поэтому нам этот софт очень удобен
да, мы рассказывали про http-сервак, работающий так же хорошо, как nginx,Это вшмышле вы не нашли lua-модуль для nginx?
к которому в виде одной тупой простыни можно писать модули типа:
а ты умеешь конфиг писать, который аналогично тому, как я описал, работает?
а ты умеешь конфиг писать, который аналогично тому, как я описал, работает?Два подзапроса склеить? Да, насколько я помню. Но так как выглядит это некрасиво лучше все-таки http://github.com/chaoslawful/lua-nginx-module .
В общем ваше изделие — очередной велосипед с квадратными колесами, по-моему.
Два подзапроса склеить? Да, насколько я помню. Но так как выглядит это некрасиво лучше все-таки http://github.com/chaoslawful/lua-nginx-module .то есть ты умеешь даже на nginx из коробки склеить два запроса? =)
про модуль-то я понял, я про него и спрашивал: умеешь ли ты на нём склеивать два подзапроса?
то есть ты умеешь даже на nginx из коробки склеить два запроса? =)Да. Лучше говорить "умел" — когда в Рамблере работал. По-моему ssi надо смотреть.
про модуль-то я понял, я про него и спрашивал: умеешь ли ты на нём склеивать два подзапроса?
Модулем я не пользовался, смотрел на него когда надоело конфиги писать. В нем есть честный subrequest.
По-моему ssi надо смотреть.ну ssi это совсем не то. я знаю, как на nginx такое делать модулями, я таких модулей много сделал.
но это ДИКО неудобно. это ОЧЕНЬ сложно писать.
а руками писать придётся, потому что в ssi ты не опишешь бизнес-логики.
Модулем я не пользовался, смотрел на него когда надоело конфиги писать.хорошо, я посмотрю на него, спасибо за наводку.
В нем есть честный subrequest.
если это обертка над nginx-сущностью subrequest, то это тоже совсем не то.
во всех встроенных языках в nginx есть такие обертки.
с другой стороны, lua-модуль использует корутины и теоретически
можно сделать обёртку таким образом, чтобы она работала как надо.
но на практике надо смотреть, вероятно, вынужден буду с тобой не согласиться.
ну ssi это совсем не тоТы сначала доки почитай нормально.
если это обертка над nginx-сущностью subrequest, то это тоже совсем не то.
во всех встроенных языках в nginx есть такие обертки.
с другой стороны, lua-модуль использует корутины и теоретически
можно сделать обёртку таким образом, чтобы она работала как надо.
но на практике надо смотреть, вероятно, вынужден буду с тобой не согласиться.
Свой велосипед конечно ближе к телу. А с практической точки зрения: глянул вашу презентацию — ничего интересного и особенного ваша поделка не умеет, чего нельзя достаточно просто на нгинксе сделать.
Хуже всего то что вы ее собираетесь развивать. Если б не собирались — можно было бы спорить на тему что тяжелее, написать велосипед или выучить нгинкс.
Ты сначала доки почитай нормально.покажи, пожалуйста, что я там должен увидеть?
я же читал их. =)
как на ssi в зависимости от заголовков первого подзапроса пойти на второй?
как на ssi в зависимости от заголовков первого подзапроса пойти на второй?Хитрыми трюками которых лучше не знать Там есть ssi с условиями и внутренние переменные, если ничо не путаю.
Но саму эту задачу ты только сейчас придумал, опять же, есть модуль и там решить ее просто.
Кстати, ты ведь конечно попробовал embedded perl перед тем как свою штуку писать?
И наверняка ты в курсе что подобных твоей штуке штук — тонны. Даже тот же Tornado. Я может быть не понимаю в чем принципиальное отличие?
Хитрыми трюками которых лучше не знать.это несерьёзно и последний раз когда я смотрел, это не работало как надо.
Там есть ssi с условиями и внутренние переменные, если ничо не путаю.
предполагаю, что даже после появления директивы wait у <!--#include, с этим всё равно были какие-нибудь проблемы.
это слишком сложно. я боюсь даже представить конфиг, который реализует мой пример из первого поста на ssi...
опять же, я не знаю никого, кто в продакшене ssi таким образом использует.
может ты знаешь?
Но саму эту задачу ты только сейчас придумал, опять же, есть модуль и там решить ее просто.ну почему только сейчас? у меня же в примере изначально была описана даже более сложная задача.
модуль-то я посмотрю, конечно, да.
Кстати, ты ведь конечно попробовал embedded perl перед тем как свою штуку писать?на встроенном перле я не смог такое написать. может что-то изменилось с тех пор, конечно, но я сомневаюсь.
торнадо медленный
торнадо медленныйторнадо быстрый
Кстати, ты ведь конечно попробовал embedded perl перед тем как свою штуку писать?слушай, там же вообще нет метода subrequest, судя по документации.
я этот XS последний раз чёрт знает когда смотрел, конечно, но я же в здравом уме от него отказался...
это несерьёзно и последний раз когда я смотрел, это не работало как надо.Ты писал свою прожку полдня? Тогда норм, свой велосипед лучше, потому как правильно готовить нгинкс тоже надо уметь — у меня получилось очень не сразу.
предполагаю, что даже после появления директивы wait у <!--#include, с этим всё равно были какие-нибудь проблемы.
это слишком сложно. я боюсь даже представить конфиг, который реализует мой пример из первого поста на ssi...
Ну да, в Яндексе тоже написали Фантом потому как конфиги нгинкса писать сложно
ну почему только сейчас? у меня же в примере изначально была описана даже более сложная задача.
Я там видел складывание двух запросов. Такое делается элементарно.
на встроенном перле я не смог такое написать. может что-то изменилось с тех пор, конечно, но я сомневаюсь.
Что значит "не смог"?
слушай, там же вообще нет метода subrequest, судя по документации.Конечно нет, для subrequest есть ssi. Я не спорю что на нгинксе это делается не слишком легко, потому и дал ссылку на lua-модуль — там всё есть и легко.
я этот XS последний раз чёрт знает когда смотрел, конечно, но я же в здравом уме от него отказался...
Конечно нет, для subrequest есть ssi.тогда при чём тут вообще встроенный перл?
Я не спорю что на нгинксе это делается не слишком легкоssi-ные if-ы не работают с переменными типа $upstream_http_...
они проверяют только переменные, заданные в начале обработки запроса.
скорей всего из-за какого-нибудь флажка у ngx_variable_t.
могу найти пруф в коде.
это опять же можно попатчить, но зачем.
я же знаю, что nginx не приспособлен для такой логики, которая мне нужна.
я же читал его исходники / писал ему патчи.
потому и дал ссылку на lua-модуль — там всё есть и легкоя понимаю, что всё вообще легко и просто, только я до этого lua-модуля видел еще несколько игрушечных модулей подобного рода.
ты так говоришь, как будто я nginx вчера увидел. лишь бы поспорить...
я завтра этот модуль посмотрю и скажу что-нибудь, если кому-нибудь вообще интересно моё мнение.
мой интерес к твоим постам заключается не в том, чтобы ты предполагал, что что-то можно сделать,
а в том, чтобы поделился опытом - как я вот таким конфигом сделал то-то.
было бы очень приятно, если бы ты так сделал.
Я там видел складывание двух запросов. Такое делается элементарно.мой изначальный пример сложней складывания двух запросов.
на lua по крайней мере элементарные вещи работают, круто!
спасибо за наводку. посмотрю, как она по скорости.
опять же, я не знаю никого, кто в продакшене ssi таким образом использует.Знаю. Рамблер.
может ты знаешь?
я завтра этот модуль посмотрю и скажу что-нибудь, если кому-нибудь вообще интересно моё мнение.Мне интересно.
мой интерес к твоим постам заключается не в том, чтобы ты предполагал, что что-то можно сделать,
а в том, чтобы поделился опытом - как я вот таким конфигом сделал то-то.
было бы очень приятно, если бы ты так сделал.
Не могу. Я конфиги нгинкса с такими хитрыми вещами делал 2.5 года назад и плохо это помню. Я помню что вещи про которые ты говоришь требуют высокого уровня кунфу — просто они не делаются, т.е. вспомнить их за разумное время не могу.
Задачи были ровно такие же как ты рассказываешь --- собрать ответ пользователю из кусков от разных сервисов. Помню только общее направление трюков.
Задачи были ровно такие же как ты рассказываешь --- собрать ответ пользователю из кусков от разных сервисов. Помню только общее направление трюковесли это можно реализовать только конфигами нгинкса, то разве Сысоев бы об этом тебе не сказал?
тогда при чём тут вообще встроенный перл?Запрос проходит через последовательность location. В одном location сделать всё нельзя, зато можно погонять по разным и в каждом сделать кусочек.
Для Perl : вызывается из SSI, умеет выставлять переменные, умеет отдавать данные клиенту.
SSI: Подзапросы - параллельные и последовательные.
Ну и напомню: я сразу говорил не про нгинкс из коробки. В нгинксе из коробки такие вещи делать сложно.
Посмотрел на ваш сайт — какая нагрузка у ваших сервисов?
простота разработки модулей достигнута с помощью механизма корутин.В плюсах?
В плюсах?Он же написал: переключается контекст. Если очень приблизительно, то можно рассматривать это как замену стека и выполняемого адреса в текущем потоке. Если бы речь шла про венду, то можно было бы почитать про fibers; я просто не в курсе, как это делается под другие OS.
Свой велосипед конечно ближе к телу. А с практической точки зрения: глянул вашу презентацию — ничего интересного и особенного ваша поделка не умеет, чего нельзя достаточно просто на нгинксе сделать.И чего ты так ополчился. Писать на этой штуке по идее гораздо проще, чем на nginx. Для написания первого модуля на nginx надо прочитать немаленький мануал, да и при наличии некоторого опыта все равно это очень сложно в плане защиты от ошибок. Я б попробовал такой сервер на корутинах где-нибудь использовать в реальных приложениях, правда предпочел бы встраивать его в свое приложение, а не наоборот.
Хуже всего то что вы ее собираетесь развивать. Если б не собирались — можно было бы спорить на тему что тяжелее, написать велосипед или выучить нгинкс.
Для написания первого модуля на nginx надо прочитать немаленький мануал, да и при наличии некоторого опыта все равно это очень сложно в плане защиты от ошибокЯ тут нигде не говорил что надо писать модуль для nginx.
Я б попробовал такой сервер на корутинах где-нибудь использовать в реальных приложениях, правда предпочел бы встраивать его в свое приложение, а не наоборот.
Таких серверов полно. Я не ополчился, это просто yet another бестолковая поделка — просто не вижу нового смысла.
Таких серверов полно. Я не ополчился, это просто yet another бестолковая поделка — просто не вижу нового смысла.
Где полно? Я знаю только один из открытых — ugh. Есть закрытые на корутинах поделки, но открытых я пока не знаю.
Такой демон я просил написать Бачана ещё с 2008 года, это реальный прорыв в области хайлоада.
Давай-ка ты тред прочитаешь перед тем как писать.
на lua по крайней мере элементарные вещи работают, круто!Ау! Ну так как, можно услышать мнение про lua?
тебе именно про lua или про модуль все-таки?
тебе именно про lua или про модуль все-таки?Про модуль, бачан вроде собирался посмотреть правильно ли он в нгинкс встроен.
я под нагрузкой думал посмотреть его, но не знаю,
мне не хочется синтетические тесты делать.
так-то хороший модуль.
Так вот, он разве не то же самое что ваш ugh делает? В чем разница?
идеологически то же самое (правда я не проверял, можно ли из него вернуть ответ, не дожидаясь бекенда). на практике мне негде проверить. синтетические тесты не хочется писать. если попадётся задача, в которой нужно будет что-то, что есть в nginx, но нет в ugh, я может и проверю.
идеологически то же самое (правда я не проверял, можно ли из него вернуть ответ, не дожидаясь бекенда). на практике мне негде проверить. синтетические тесты не хочется писать. если попадётся задача, в которой нужно будет что-то, что есть в nginx, но нет в ugh, я может и проверю.Ок.
ЗЫ: Теперь может и до alepar'а дойдет.
Оставить комментарий
iravik
субж