Я настраиваю новый веб-сервер, и мне было интересно, допустим ли следующий стек:
Varnish спереди для кеширования и разделения трафика между nginx для статического содержимого и Apache с помощью mod_php для динамического содержимого.
Я бы также использовал APC в качестве кеша кода операции для PHP и memcached в качестве кеша данных.
Это допустимая конфигурация? Нужно ли мне беспокоиться о запуске APC, если часть моего PHP уже кэшируется Varnish?
Я вижу в вашем подходе некоторую избыточность. nginx довольно эффективен как веб-сервер и балансировщик нагрузки, и добавление второго балансировщика нагрузки поверх него кажется бессмысленным.
Я лично предпочел бы иметь фронтальный nginx, который обслуживает статический контент и запросы балансировки нагрузки к apache + php.
Для кеширования вы можете изучить Redis, я думаю, что он более мощный, чем memcached. Определенно лучше иметь кеширование кода операции в дополнение к балансировке нагрузки. Возможно, вы захотите рассмотреть xcache как кеширование кода операции для php.
Я бы максимально упростил вам архитектуру:
Во-первых, я бы избавился от apache и использовал nginx с php-fpm для динамического контента. Затем, если вы не используете краевые включения или некоторую расширенную инвалидацию кеша, я бы использовал nginx для кеширования динамического контента вместо varnish. Статическому содержимому должно быть присвоено большое время истечения срока действия в конфигурации nginx и использование управления версиями в имени файла, чтобы избежать обслуживания устаревшего содержимого.
APC (или xcache, если на то пошло) является хранителем, он избегает перекомпиляции исходного кода php в коды операций при каждом выполнении. Кроме того, если вы запускаете все на одном компьютере, вы можете использовать APC для кэширования данных и масштабирования до memcached позже, если вы с самого начала кодируете хорошую абстракцию.
Это допустимая установка, хотя я предполагаю, что она может быть слишком большой для большинства применений и потребует много оперативной памяти, чтобы действовать по назначению.
Есть несколько мест для уменьшения слоев ... например, веб-сервер nginx / static, вероятно, можно заменить умной стратегией кеширования и использованием только apache и varnish (кешируйте статический контент дольше и используйте методы аннулирования кеша, если вы меняете контент). Но это зависит от вашего конкретного приложения и потребностей.
memcached может не сильно улучшить вашу настройку в зависимости от ваших данных и использования.
«Нужно ли мне беспокоиться о запуске APC, если часть моего PHP уже кэшируется Varnish?» Кешируют они совершенно разные вещи. APC кэширует скомпилированный код PHP, а Varnish или любой другой веб-кэш кэширует контент (который может быть создан этим кодом). Итак, это действительная установка. Не о чем беспокоиться.