2013-03-02 2 views
3

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

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

+0

Он появился в [чат-комнате для Rebol и Red] (http://chat.stackoverflow.com/rooms/291/rebol-and-red) (пожалуйста, присоединяйтесь, если сможешь), что нам нужен mod_rebol , но и ваш сценарий звучит подозрительно странно с точки зрения производительности, давайте отлаживаем его в чате. – HostileFork

ответ

5

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

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

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

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

Теперь попытка ответить на ваш первый вопрос: от этого зависит.

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

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

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

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

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

Удачи вам!

+0

Штукатурка! Я действительно надеялся, что скоро напишу приложение в Rebol. Похоже, мне придется сейчас выбрать другую платформу. В настоящее время мой скрипт не является тяжелым, никаких зависимостей или вызовов базы данных, однако у меня есть очень большие, глубокие (6-7 уровней) вложенные блоки, которые я анализирую для каждого запроса, но я заметил, что это не кажется влияют на производительность вообще, что говорит мне, что у вас есть это место. Это исполняемое время запуска, это неудачник. – rebnoob

+0

Также 4-5 запросов - это то, что я получаю в окне Debian. Интересно, что у меня есть похожий скрипт (оригинал, исполняемый как скрипт cgi) в Ruby, который делает намного больше, и я получаю ~ 30 т/с в одном окне. Это бьет меня! Но еще интереснее то, что я обойду около 30 рпс (как версии Rebol, так и Ruby) на Windows-сервере под управлением Apache! Иди цифра! – rebnoob

+0

Теперь я не знаю, как сложно писать модуль Apache, но я серьезно подумываю написать мод для Rebol, так как я не могу отказаться от этой идеи. Но на самом деле, боюсь, я буду втянута в это на полный рабочий день и не буду иметь времени для настоящего проекта! Ха! Думаю, посмотрим. Спасибо за ваш вклад. – rebnoob

4

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

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

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

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

также вы проверили скорость исходящей сети на сервере?

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

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

+0

Я дам Шайенну попробовать. К сожалению, я боюсь, что не могу поделиться сценарием здесь, но будьте уверены, что он не пытается сделать что-то необычное. Пожалуйста, см. Мои комментарии к сообщению Брайана выше. Спасибо за ваш вклад. – rebnoob

+0

Мне любопытно, какая платформа вы используете? Могла ли ваша проблема основываться только на том, как она там установлена? также, какую версию rebol вы используете. Посмотреть? ядро? – moliad

+0

Я нахожусь на Ubuntu на VirtualBox. На нем много процессора и памяти. Я думал, что у меня слишком мало ресурсов, но, учитывая тот же сценарий, Ruby, похоже, превосходит Rebol, что довольно удивительно. Я использую R2 Core. – rebnoob

1

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

  • Пусть апачский игры прокси реальной помощью Rebol-сервер, как Шайенн. Более сложный, чтобы поддерживать его при запуске и т. Д.

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

  • Запустите rebol как tcp-daemon, позвоните по адресу fastcgi-language.

+0

Спасибо dt2. Я пробовал Cheyenne, но я боюсь, что это не может быть и речи, так как это довольно медленно. Я не знал о вариантах 2 и 3. Не могли бы вы рассказать обо мне? – rebnoob

+0

http://shairosenfeld.blogspot.de/2011/01/parent-and-child-pipe-ipc-in-ruby.html Вместо exec "/ bin/sh" вы запускаете скрипт rebol. Подайте cgi-запрос из ruby ​​в rebol, дождитесь ответа, подайте следующий запрос. Вам нужен протокол makeup для разделения запросов, передачи их размера или чего-то еще. – dt2

3

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

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

Смежные вопросы