首页 > 解决方案 > 在同一 docker-machine 中的多个 docker 容器之间共享 PHP OPcache

问题描述

我正在对 laravel 堆栈应用程序进行 dockerizing。

我有一个app正在运行的服务php-fpm,其中包含 laravel 源代码。
我想复制这项服务,这样我就可以从高可用性和零停机时间功能中受益。

我不知道如何处理 OPcache:

  1. 我应该在每个容器中运行 opache 优化app吗?如果是这样,这种方法会保留大量服务器的内存
  2. 有没有办法 app在同一台 docker 机器上的服务任务(容器)之间共享 opcache?
  3. 假设这是可能的,这种方法是纠正这类问题还是被认为是反模式?

标签: phpdockerdocker-composedocker-swarmopcache

解决方案


每当脚本编译时,该进程都会检查 PHP OPcode 缓存并在共享内存中找到已编译的代码。如果找不到代码,则自动启动编译并将其保存到内存生成输出之后。

在此处输入图像描述

集成-php-opcache

所以现在我们可以根据上面的 Opcache 流程来讨论你的问题

我应该在每个应用程序容器中运行 opcache 优化吗?如果是这样,这种方法会保留大量服务器的内存

是的,您应该在每个容器中运行 OpCache,因为每个容器都在自己的空间上运行,第二件事它将节省大量容器内存,否则如果没有 OpCache,您的容器将在负载过重的情况下无法响应。

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

opcache-configuration-to-avoid-caching-suprises

有没有办法在同一台 docker 机器上的应用服务的任务(容器)之间共享 opcache?

第一件事一个容器不能在没有高权限的情况下访问另一个容器的内存,为此你需要额外的配置,第二件事应该避免这样做,容器被设计为独立运行并管理每个容器的单个进程(经验法则) .

假设这是可能的,这种方法是纠正这类问题还是被认为是反模式?

不,在 Docker 容器中它不鼓励并且容器应该解耦。

一般来说,解耦架构是一个复杂工作的框架,它允许组件保持完全自主并且不知道彼此。云计算有时被称为具有解耦架构,因为云提供商管理物理基础设施,而不是托管在其上的应用程序或数据。


推荐阅读