Здравствуйте уважаемые разработчики!
Есть проблема с производительностью nginx.
ситуация следующая:
0- разработан nginx-модуль, который при каждом http-запросе делает около 20 select'ов в MySQL
1- результат каждого запроса кешируем - т.е. получается около 20 кешей (реализованно несколько вариантов, см.ниже)
варианты рализации кешей:
0- "локальные" - для каждого воркера: хранение ассоцаитивный массив (std::map/rb-tree), нет блокировок, нет IPC
1- "общие" - общие для всех воркеров: хранение rb-tree, используется блокировки на запись, mmap
2- "внешние" - общие для всех воркеров - отдельный процесс: хранение rb-tree, нет блокировок, IPC (socketpair)
при сравнении производительности nginx'а (nginx_request): "без кешей" vs "с кешами" - всегда выигрывет вариант "без кешей"
выигрыш варианта "без кешей" всегда примерно один и тот же +100% (т.е. обрабатывает в 2 раза больше запросов)
Алгоритм вытеснения элементов кеша - удаляем по истечении "времени жизни записи" (ttl)
Я понимаю, что это лишь очень общее описание нашей системы. Вероятно есть какой-то архитектурный просчет, который может быть проблемой падения производительности nginx при кешировании sql-запросов.
Заранее спасибо за ответ!
PS: профилирование работы кешей - пока данных нет - сейчас делаем nginx-модуль для pinba_engine