Как данные распределяются между процессами fastCGI?
Я написал простой Perl-скрипт, который я запускаю через fastCGI на Apache. Приложение загружает набор файлов данных XML, которые используются для поиска значений на основе параметров запроса входящего запроса. Насколько я понимаю, если я хочу увеличить количество одновременных запросов, которые может обрабатывать мое приложение, мне нужно разрешить fastCGI порождать несколько процессов. Придется ли каждому из этих процессов хранить в памяти дублированные копии данных XML? Есть ли способ настроить все так, чтобы я мог загружать в память одну копию данных XML, одновременно увеличивая способность обрабатывать параллельные запросы?
2 ответа
Как правильно ответил pilcrow, FastCGI не предоставляет особого способа обмена данными между процессами и перечисляет традиционные способы сокращения использования памяти.
Еще одна возможность состоит в том, чтобы постоянный процесс, не относящийся к FastCGI, считывал файл XML и выступал в качестве сервера данных для процессов FastCGI. Эффективность этого зависит от того, насколько сложны запросы и сколько данных нужно передавать и выводить, но это позволит одной копии данных оставаться в памяти.
Память распределяется между отдельными процессами FastCGI так же, как и между обычными, отдельными процессами, то есть для наших целей данные не разделяются.
(FastCGI позволяет одному процессу обрабатывать несколько запросов последовательно, избегая необходимости повторной инициализации, перечитывания данных конфигурации и XML, например, с каждым запросом после первого, обслуживаемого этим процессом.)
С другой стороны, любая техника, которая будет работать, чтобы уменьшить объем памяти вашего XML в памяти между отдельными процессами, должна работать здесь. Вы можете прочитать файлы в разделяемую память (что может быть сложно синхронизировать и обновить), выбрать XML-анализатор с меньшим объемом памяти или получить косвенный доступ к информации, скажем, через "скомпилированную" GDBM ваших данных XML или через пользовательский сервер, который вы пишете отвечать на вопросы.