LINUX.ORG.RU

О чудесном сервере OpenResty

 , , ,


0

1

Наткнулся на статью:
https://habr.com/ru/post/321864/ - OpenResty: превращаем NGINX в полноценный сервер приложений

У меня сразу возникло два вопроса:

  • Мне одному кажется, что автора статьи - бородатый школьник, который сам не разбирается в теме статьи, и половину онной кидает гнилые понты про «я с пелёнок пишу хайлоад»?
  • В чем преимущество OpenResty над альтернативными решениями?

Для тех, кто не в курсе, кратко расскажу про OpenResty. Кому-то в Taobao стукнуло в голову, что будет очень хорошим решением взять nginx и засунуть в него LuaJIT. Именно «в него», а не «к нему». Так родился модуль Lua для nginx, на основе которого был сделан OpenResty и еще пару подобных проектов. Nginx однопоточен, LuaJIT однопоточен, вот они как бы в event-driven модели должны хорошо согласовываться. Питон/php/node.js тоже однопоточны, но пожирнее и помедленнее будут. С тех пор OpenResty распространился в основном по китаю, хоть и в остальной мир потихоньку проникает.
Мотивация создателей мне ясна: берем самый быстрый веб-сервер (пусть и неполноценный), берем самый быстрый скриптовый язык, которым на 2011 года действительно был именно Lua c его LuaJIT, скрещиваем их вместе, говорим волшебные слова - получаем замечательный полноценный веб-сервер. Правда, уже на момент 2017 года дистанция между V8 и LuaJIT неумолимо сокращалась, и сейчас они имеют похожую производительность выполнения кода.

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

PS:

Если у вас, допустим, кодовая база на Perl, и вы не Booking, вы не найдёте перловых программистов. Потому что их нет, их всех забрали, а учить их долго и сложно

Палю годноту: Booking набирает кодеров без знания перла для работы с перлом. Так что если кто мечтает писать на перле - имейте в виду.

★★★★

О чем думали создатели, засовывая в поток nginx скриптовый язык со сборкой мусора?

хз.

воспользуюсь случаем и пропиарю njs

drsm ★★
()

Раздел Jobs в другом месте. И пост в таком случае оформлен с нарушением правил, без полноценного описания вакансии.

Deleted
()

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

xpahos ★★★★★
()

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

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

zolden ★★★★★
()

ngx_lua — это ядро openresty, но не весь проект. OpenResty — это набор компонентов, при помощи которых можно сделать не только сервер приложения, но и «умные» (программируемые) правила фильтрации, модификации трафика, кеширование, автоматическогое получение let's encrypt сертификатов на лету (lua-resty-auto-ssl) и т.д.

Пример: Бизнес Cloudflare основан на OpenResty.

Кому-то в Taobao стукнуло в голову

agentzh из Taobao?

Есть веб-фреймворк для OpenResty — lapis. Простенькие веб-проекты можно делать и на нём — пример.

avolver
()
Последнее исправление: avolver (всего исправлений: 1)

Мне одному кажется, что автора статьи - бородатый школьник

Он там в интервью утверждает, что работает по 16-18 часов. Это всё что нужно про него знать.

а при чем тут nginx вообще

Иногда удобно сделать какую-то сложную фильтрацию, или редирект прямо в nginx ну и т.п.

no-such-file ★★★★★
()

Потомучто в nginx слишком примитивный синтаксис конфигов

Deleted
()
Ответ на: комментарий от goingUp

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

ddidwyll ★★★★
()
Ответ на: комментарий от Deleted

Раздел Jobs в другом месте. И пост в таком случае оформлен с нарушением правил, без полноценного описания вакансии.

Не имею отношения к Booking и даже не знаю, набирают ли они до сих пор людей. С таким же успехом пост может оказаться 4.2.

byko3y ★★★★
() автор топика
Ответ на: комментарий от xpahos

Ну они используют lua для скритования части конфигов. Почему нет?

Если бы в конфиге были макросы на Lua, которые бы работали только на этапе разбора конфига - я бы сказал «да, хорошо, нет проблем». Но проблема в том, что они таки работают на каждом отдельном запросе, что переносит их уже в совершенно иную плоскость, читай «apache».

byko3y ★★★★
() автор топика
Ответ на: комментарий от zolden

Пока практики рассказывают про свои сакцесс стори, диванные кукаретики рассказывают про свой манямирок

Success чего? Ты забыл уточнить. Успех освоения tutorial-а? Это вижу.

byko3y ★★★★
() автор топика

Эм ООП на lua жутко кривая - так что много чего там не напишешь.

тут nginx вообще? Смысл создания nginx заключался в то

Devops … - зачем запускать еще-что то, если мелкие вещи можно писать прямо в конфигах …

По поводу перца из статьи:

Я знаю больше 20 языков программирования. Это то, в чём мне пришлось разобраться в процессе работы. Тебе выдают код на Erlang, на C, на С++, на Lua, на Python, на Ruby, на чем-то еще, и тебе надо это всё пилить. В общем пришлось. Точное количество посчитать так и не удалось, но где-то на 20 число потерялось.

Ну вы и так все понимаете, да ?

Конкретно наш отдел пишет на Python 2. Мы занимаемся бизнесом и нам некогда внедрять модные технологии, поэтому мы страдаем. У нас Django, потому что в ней всё есть, а лишнее мы взяли и выкинули.

Слоупок

Jopich1
()
Последнее исправление: Jopich1 (всего исправлений: 2)
Ответ на: комментарий от avolver

OpenResty — это набор компонентов, при помощи которых можно сделать не только сервер приложения, но и «умные» (программируемые) правила фильтрации, модификации трафика, кеширование, автоматическогое получение let's encrypt сертификатов на лету (lua-resty-auto-ssl) и т.д.

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

Пример: Бизнес Cloudflare основан на OpenResty.

agentzh переехал из Taobao в Cloudflare.

byko3y ★★★★
() автор топика
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от byko3y

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

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

поломать там или сделать что-то криво, что будет медленнее чем сходить на бекенд - проблем никаких.

njs в этом плане получше.

из задач где реально нужно, ну например, чекнуть на фронтенде пришел ли POSTом валидный json и правильна ли его структура, проверить данные/подпись. далее отправить на бекенд или отфудболить заслав IP в бан лист.

drsm ★★
()
Ответ на: комментарий от no-such-file

Да он там вообще утверждает что знает 20+ языков. Это уровень «эникея».

Jopich1
()
Ответ на: комментарий от drsm

основная проблема с openresty, то что nginx там слишком сильно похачен, в местах для этого не предназначенных, сами разрабы пишут

А они не смогли бы иначе добиться приемлимой производительности. Я потому и писал, что он добавили LuaJIT в nginx, а не к нему. Прям распороли, вживили туда Lua, и зашили.

поломать там или сделать что-то криво, что будет медленнее чем сходить на бекенд - проблем никаких.
njs в этом плане получше.

Чем получше? Тем, что он всегда медленнее, чем сходить на бекенд?

чекнуть на фронтенде пришел ли POSTом валидный json и правильна ли его структура, проверить данные/подпись. далее отправить на бекенд или отфудболить заслав IP в бан лист.

Apache.

byko3y ★★★★
() автор топика
Ответ на: комментарий от drsm

более предсказуемо работает. как минимум из-за отсутствия GС

Нет, его просто там не сделали. Все данные запроса живут на протяжении запроса/потокосессии, которые могут быть очень длинными, из-за чего сервер имеет шансы просто рухнуть, если не принимать эту особенность работы с памятью во внимание. Причем, он рухнет даже если вы думаете, что ссылку на объект убрали, массивы очистили, а значит память не используется, но увы - ни одного байта памяти не было высвобождено.

Я хочу подчеркнуть, что при наивной реализации такая система будет жрать ресурсы пропорционально загрузке и пропорционально времени ответа одного запроса, что в итоге может привести к квадратичной, кубической, и в конечном итоге отвесной гиперболической зависимости потребления ресурсов от загрузки. В итоге тебе придется ограничивать кол-во одновременных запросов, а еще позже тебе придет мысль «а почему я сразу apache не использовал?».

byko3y ★★★★
() автор топика
Ответ на: комментарий от byko3y

если не принимать эту особенность работы с памятью во внимание.

так о чем и речь, что если это становится проблемой, то нужен бекенд нормальный.

Все данные запроса живут на протяжении запроса/потокосессии…

с длинными стримами, да, там сложности.

при наивной реализации такая система будет жрать ресурсы

самый лучший gc - никакого gc. просто освобождаем разом request pool.

drsm ★★
()

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

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

Iron_Bug ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.