Как данные распределяются между процессами fastCGI? - PullRequest
3 голосов
/ 12 мая 2010

Я написал простой Perl-скрипт, который я запускаю через fastCGI на Apache. Приложение загружает набор файлов данных XML, которые используются для поиска значений на основе параметров запроса входящего запроса. Насколько я понимаю, если я хочу увеличить количество одновременных запросов, которые может обрабатывать мое приложение, мне нужно разрешить fastCGI порождать несколько процессов. Придется ли каждому из этих процессов хранить в памяти дублированные копии данных XML? Есть ли способ настроить все так, чтобы я мог загружать в память одну копию данных XML, одновременно увеличивая способность обрабатывать параллельные запросы?

Ответы [ 2 ]

9 голосов
/ 12 мая 2010

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

Еще одна возможность состоит в том, чтобы постоянный процесс, не относящийся к FastCGI, считывал файл XML и выполнял роль сервера данных для процессов FastCGI. Эффективность этого зависит от того, насколько сложны запросы и сколько данных необходимо передавать и выводить, но это позволит одной копии данных оставаться в памяти.

8 голосов
/ 12 мая 2010

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

(FastCGI позволяет одному процессу обрабатывать несколько запросов последовательно, избегая необходимости повторной инициализации, перечитывания данных конфигурации и XML, например, с каждым запросом после первого обслуживания этим процессом . )

С другой стороны, любая техника, которая будет работать, чтобы уменьшить объем памяти в вашем XML между отдельными процессами, должна работать здесь. Вы можете прочитать файлы в общей памяти (что может быть сложно синхронизировать и обновить), выбрать синтаксический анализатор XML с меньшей памятью или получить доступ к информации косвенно, скажем, через «скомпилированный» " GDBM ваших данных XML или пользовательского сервера, который вы пишете для ответа на запросы.

...