Насколько хорошо масштабируется Rebol в конфигурации FCGI?

Я планирую написать довольно приличное веб-приложение на Rebol (на данный момент CGI на Apache 2), но первоначальные тесты производительности были очень обескураживающими. Я получаю всего 4-5 запросов в секунду, когда запускаю тест Apache в приложении. Я хотел бы знать, были ли у других подобные проблемы и действительно ли им помог FastCGI.

И, на самом деле, Rebol поддерживает FastCGI только в версиях Command и SDK. Изменится ли это в ближайшее время, так как исходный код R3 стал открытым?


person rebnoob    schedule 02.03.2013    source источник
comment
В чате для Rebol и Red появилось сообщение (пожалуйста, присоединяйтесь, если можете), что нам нужен mod_rebol, но и ваш сценарий звучит подозрительно странно с точки зрения производительности, давайте отладим его в чате.   -  person HostileFork says dont trust SE    schedule 12.03.2013


Ответы (4)


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

Никто еще не воссоздал схему fastcgi:// для R3. Я говорю «воссоздан», потому что R3 имеет совершенно другую модель порта, чем R2, поэтому схемы портов вообще не переносимы между двумя платформами. И это в дополнение к тому, что схема порта R2/Command является встроенным собственным кодом, который также нельзя было бы перенести на R3, даже если бы он был с открытым исходным кодом, поскольку модель системы R3 также отличается. И, несмотря на свою переносимость, R2 содержит много кода с коммерческой лицензией, исходный код которого Rebol Technologies не имеет права открывать — почти все, что она могла открыть, уже попало в R3. Поэтому, если его еще нет, можно с уверенностью предположить, что он вообще несовместим или не открывается.

Было бы быстрее и проще начать с нуля в R3 с совершенно новой схемой fastcgi://, которая следует модели R3. Максимум, с чем мог бы помочь исходный код R2, даже если бы он у нас был, — это документирование протокола FastCGI, и, насколько мне известно, этот протокол лучше документирован в другом месте. Вероятно, в этом случае было бы неплохо создать хост-порт, оптимизированный для таких вещей, что немного проще сделать в R3.

С положительной стороны, насколько я помню, протокол FastCGI не так уж и сложен, а новая модель порта R3 намного лучше подходит для такого рода вещей, поэтому начать с нуля может быть не так уж сложно. И если нам повезет, все это можно будет сделать в пользовательском коде, который просто работает на обычном интерпретаторе R3, без необходимости адаптации кода хоста. Так что новости не обязательно должны быть такими уж плохими.

Теперь попробуем ответить на ваш первый вопрос: это зависит от обстоятельств.

Это действительно зависит от того, что вы пытаетесь сделать, и как у вас все настроено. CGI имеет накладные расходы на запуск процесса каждый раз, поэтому он быстр только в том случае, если накладные расходы на запуск процесса значительно меньше, чем остальные накладные расходы запроса (например, доступ к файловой системе или базе данных). Rebol, особенно R2, имеет значительные накладные расходы при запуске процесса, потому что это интерпретатор, который имеет некоторый встроенный интерпретируемый код для загрузки при запуске. Вы можете свести к минимуму эти накладные расходы при запуске, используя SDK для создания своего приложения только с тем кодом, который вам нужен, но в вашем конкретном случае этого может быть недостаточно (не зная, что вы пытаетесь сделать).

FastCGI — это способ избавиться от накладных расходов, связанных с запуском этого процесса, путем запуска внепроцессного сервера приложений вместо запуска нового процесса для каждого запроса. Для чего-то вроде Rebol, у которого есть значительные накладные расходы на запуск процесса, экономия может быть столь же значительной.

Одна вещь, которую вам нужно учитывать, это то, что R2 по большей части имеет модель с одним потоком на процесс, поэтому, если вы хотите обрабатывать несколько одновременных запросов, вам нужно либо выполнять их по частям в одном процессе (например, Node. js) или пусть FastCGI выделяет несколько серверных процессов для независимой обработки нескольких запросов, или, возможно, и то, и другое. Обязательно обратитесь за советом к экспертам Rebol, если перспектива этого пугает, или просто настройте FastCGI, чтобы запустить больше серверов приложений для одновременной работы.

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

Это говорит о том, что вы получаете 4-5 запросов в секунду в режиме CGI. Это необычно медленно. Накладные расходы Rebol при запуске в худшем случае не так медленны. Это означает, что либо ваши запросы делают много, либо у вас недостаточно оперативной памяти для одновременного запуска нескольких процессов CGI, либо у вас плохо настроена CGI. Я не уверен, что FastCGI может помочь в этом случае так же, как использование более качественного оборудования или более качественная настройка Apache. Тем не менее, убедитесь, что у вас достаточно рабочих процессов FastCGI, и напишите свой обработчик для одновременной обработки нескольких запросов, и вы сэкономите как можно больше накладных расходов.

Удачи!

person BrianH    schedule 02.03.2013
comment
Слей это! Я действительно надеялся на полной скорости написать приложение в Rebol. Похоже, теперь мне придется выбирать другую платформу. Мой скрипт на данный момент не тяжелый, никаких зависимостей или вызовов базы данных, однако у меня есть очень большие, глубоко (6-7 уровней) вложенные блоки, которые я анализирую для каждого запроса, но я заметил, что это не похоже на влияет на производительность вообще, что говорит мне о том, что у вас все в порядке. Это время запуска исполняемого файла, которое подавляет. - person rebnoob; 04.03.2013
comment
Также 4-5 запросов — это то, что я получаю на коробке Debian. Интересно, что у меня есть аналогичный скрипт (оригинал, работающий как cgi-скрипт) в Ruby, который делает гораздо больше, и я получаю ~30 rps на той же машине. Это бьет меня! Но что еще более интересно, так это то, что я получаю около 30 об/с (обе версии Rebol и Ruby) на компьютере с Windows, на котором работает Apache! Иди разберись! - person rebnoob; 04.03.2013
comment
Теперь я не знаю, насколько сложно написать модуль Apache, но я серьезно подумываю написать мод для Rebol, так как не могу отказаться от этой идеи. Но на самом деле, я боюсь, что я буду втянут в это все время и у меня не будет времени на настоящий проект под рукой! Ха! Я думаю, мы увидим. Спасибо за ваш вклад. - person rebnoob; 04.03.2013
comment
Проверьте другие ответы. В самом Rebol нет встроенной причины, по которой вы должны получать 4-5 запросов в секунду. В 10 раз быстрее, чем обычно, сравнимо с Ruby (который имеет аналогичные накладные расходы при запуске); В некоторых случаях в 100 раз быстрее, в зависимости от оборудования и конфигурации. Глубоко вложенные блоки легко разобрать, так что дело не в этом. - person BrianH; 12.03.2013

Трудно ответить на какие-либо проблемы с производительностью, когда мы понятия не имеем, какой скрипт вы пытаетесь запустить. :-) некоторые из следующих вопросов могут показаться глупыми, но я действительно мало знаю о контексте, в котором вы пробуете Rebol CGI.

4-5 запросов в секунду — это ненормально для CGI-приложения, работающего под Apache. Я могу заверить вас, что с любым типом H / W, которому даже десять лет, вы должны получать НАМНОГО больше, чем это.

какие тесты делаете? Для меня rebol запускается так быстро, что может открыться, показать свою консоль и закрыться между обновлениями (на частоте 60 Гц), так что я даже не вижу его появления.

возможно, какая-то небольшая часть вашего кода (или библиотеки, которую вы используете) имеет задержку или небольшое ожидание (возможно, некоторая сетевая задержка для сервера БД).

Кроме того, вы проверяли скорость исходящего трафика сервера?

вы также можете попробовать cheyenne — веб-сервер, созданный с помощью Rebol, способный обслуживать несколько сотен запросов в секунду, когда сами сценарии, очевидно, не занимают слишком много времени.

На самом деле, cheyenne и apache должны быть в состоянии относительно легко насытить сетевую скорость вашего сервера... если у вас длинные сценарии и вам нужна большая пропускная способность, просто добавьте больше рабочих процессов, чтобы иметь больше параллельных задач (при условии, что использование памяти находится в допустимых пределах). пределы)

person moliad    schedule 03.03.2013
comment
Я попробую Шайенн. К сожалению, боюсь, я не могу поделиться здесь сценарием, но будьте уверены, он не пытается сделать что-то необычное. Пожалуйста, смотрите мои комментарии к сообщению Брайана выше. Спасибо за ваш вклад. - person rebnoob; 04.03.2013
comment
Мне интересно, а какую платформу вы используете? Может ли ваша проблема быть основана исключительно на том, как он там установлен? также, какую версию rebol вы используете. Посмотреть? основной? - person moliad; 04.03.2013
comment
Я на Ubuntu на VirtualBox. У него много процессора и памяти. Я думал, что у меня тоже мало ресурсов, но с учетом того же сценария Ruby, кажется, превосходит Rebol, что весьма удивительно. Я использую R2 Core. - person rebnoob; 12.03.2013
comment
очень странно. вы упомянули, что шайенн тоже медленный... Я начинаю думать, что у вас могут быть проблемы с установкой. Мне интересно, есть ли замедление при загрузке rebol. у вас есть что-нибудь в user.r или видимая задержка при запуске в оболочке? это должно быть мгновенно. - person moliad; 12.03.2013
comment
Работающий стоковый Debian/Ubuntu/Cheyenne. Не знаете, может ли запуск в виртуальной коробке вызывать эти аберрации? Я попробую запустить ту же настройку прямо на своем ноутбуке с Linux и дам вам знать. Спасибо за вашу помощь! - person rebnoob; 12.03.2013

Если вы можете получить ~30 об/с на одном и том же компьютере, используя Ruby, и одинаковую производительность между Ruby и Rebol на компьютере с Windows, скорее всего, что-то не так с вашим Rebol CGI и/или конфигурацией.

Попробуйте запустить свой скрипт Rebol CGI из командной строки в цикле, чтобы увидеть, является ли причиной медлительности скрипт или ваша конфигурация Apache.

person DocKimbel    schedule 11.03.2013

Некоторые другие способы:

  • Пусть apache использует прокси для реального веб-сервера rebol, например, cheyenne. Более сложно поддерживать его работу при запуске и т. Д.

  • Запустите ребол за другим языком через канал. Используйте язык с поддержкой fastcgi.

  • Запустите rebol как tcp-daemon, пусть с ним свяжется язык fastcgi.

person dt2    schedule 11.03.2013
comment
Спасибо дт2. Я пробовал Cheyenne, но боюсь, что об этом не может быть и речи, так как он тоже довольно медленный. Я не знал о вариантах 2 и 3. Не могли бы вы уточнить для меня? - person rebnoob; 12.03.2013
comment
shairosenfeld.blogspot.de/2011/ 01/ Вместо exec /bin/sh вы запускаете rebol-скрипт. Подайте cgi-запрос от ruby ​​к rebol, дождитесь ответа, подайте следующий запрос. Вам нужен составленный протокол для разделения запросов, передачи их размера или чего-то еще. - person dt2; 12.03.2013