совместное использование PHP OPcache между несколькими док-контейнерами на одной док-машине - PullRequest
0 голосов
/ 22 сентября 2019

Я нахожусь в процессе стыковки приложения стека laravel.

У меня есть служба с именем app, которая работает php-fpm и включает в себя исходный код laravel.
Я хочу скопироватьэта услуга, так что я могу воспользоваться преимуществами высокой доступности и нулевого времени простоя.

Я не знаю, как справиться с OPcache:

  1. если я запускаю opache optimize в каждом app контейнере? Если так, то такой подход резервирует много памяти сервера
  2. существует ли какой-либо способ совместного использования opcache между задачами (контейнерами) службы app на одной и той же докер-машине?
  3. Предположим, что это возможно, корректирует ли этот подход проблемы такого рода или его считают антишаблоном?

1 Ответ

1 голос
/ 22 сентября 2019

Всякий раз, когда скрипт компилируется, процесс проверяет кэширование PHP-кода PHP и находит уже скомпилированный код в общей памяти.Если код не найден, автоматически запускает компиляцию и сохраняет его в памяти, генерирующей вывод после этого.

enter image description here

интегрировать-php-opcache

Итак, теперь мы можем обсудить ваш вопрос на основе описанного выше потока Opcache

Должен ли я запускать opcache optimize в каждом контейнере приложения?в таком случае этот подход резервирует много памяти сервера

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

Both tests reported about 50% decrease in response time after installing OpCache.

opcache-configuration-to-избежать-caching-suprises

Есть ли какие-либоспособ совместного использования opcache между задачами (контейнерами) службы приложений на одной и той же докер-машине?

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

Предположим, что это возможно, является ли такой подход решением проблем такого рода илиэто считается анти-паттерном?

Нет, в контейнере Docker этоне рекомендуется, и контейнер должен быть отделен.

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

...