php 使用自定义网络在Rocky Linux 9上使用Swoole,Laravel 9和Docker的显著性能损失

pkln4tw6  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(110)

我一直在用Swoole运行Laravel 9应用程序作为微服务。一切都很好,直到我在Rocky Linux 9上使用Docker容器化应用程序。我注意到在使用自定义Docker网络时性能急剧下降。

设置详情:

主机操作系统:Rocky Linux
Laravel版本:9
Swoole版本:4.8.4
自定义Docker网络:后端,前端,mongodb

堆栈

后端微服务:Laravel 9前端:ReactJS数据库:MongoDB缓存:Redis Web服务器前端:Nginx后端服务器:每个应用程序都有自己的容器。

观察结果:

当使用network_mode = host时,应用程序运行平稳,API调用延迟约为63 ms。
当使用自定义Docker网络(后端,前端,mongodb)时,相同的API调用需要超过6000 ms。

步骤:

已检查Docker主机资源。
已查看卷装载并尝试使用Docker的delegated和cached mount选项。
已验证Swoole和Laravel配置。
测试了不同的Docker网络配置。
我对这种巨大的性能差异感到困惑,我正在寻找任何见解或建议来优化我的设置的性能。是否有其他人遇到过类似的问题或有任何关于如何解决此问题的建议?
感谢您的时间和协助!

更新

Dockerfile

FROM php:8.0-alpine AS php
WORKDIR /app
RUN apk add --no-cache \
    autoconf \
    build-base \
    libpng-dev \
    oniguruma-dev \
    libxml2-dev \
    imagemagick-dev \
    libzip-dev \
    git \
    curl \
    unzip \
    openssl \
    zip \
    freetype-dev \
    jpeg-dev \
    libwebp-dev \
    && pecl install imagick \
    && docker-php-ext-enable imagick \
    && pecl install mongodb \
    && docker-php-ext-enable mongodb \
    && docker-php-ext-configure gd --with-freetype --with-webp --with-jpeg \
    && docker-php-ext-install pdo_mysql opcache gd zip \
    && pecl install swoole-4.8.4 \
    && docker-php-ext-enable swoole

# Stage - Production Image
FROM php:8.0-alpine
# Install runtime system dependencies for PHP extensions
RUN apk add --no-cache \
    libpng \
    imagemagick-libs \
    libzip\
    libgomp \
    freetype \
    jpeg \ 
    libwebp \
    libstdc++
COPY --from=php /usr/local/etc/php/conf.d/ /usr/local/etc/php/conf.d/
COPY --from=php /usr/local/lib/php/extensions/ /usr/local/lib/php/extensions/
COPY --from=php /usr/lib/ /usr/lib/
COPY . /var/www
WORKDIR /var/www
CMD ["php", "artisan", "octane:start","--port=8000", "--host=0.0.0.0"]

docker-compose.yml

version: "3"

x-shared-configuration: &shared-config

services:
    api:
    build:
        context: .
        dockerfile: Dockerfile
    image: test-api
    # network_mode: host
    restart: unless-stopped
    tty: true
    working_dir: /var/www
    ports:
      - 8000:8000

networks:
    frontend:
        external: true
    backend:
        external: true
    mongodb:
        external: true

  # volumes:
  #  storage:
  #  bootstrap_cache:
s1ag04yj

s1ag04yj1#

我在微服务中修改了.env文件。它负责将请求路由到其他微服务。我使用服务名称(API)将API请求从一个微服务转发到另一个微服务。将服务名称更改为IPv4网关(例如172.20.0.1),此更改解决了性能问题。

相关问题