我一直在用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:
1条答案
按热度按时间s1ag04yj1#
我在微服务中修改了.env文件。它负责将请求路由到其他微服务。我使用服务名称(API)将API请求从一个微服务转发到另一个微服务。将服务名称更改为IPv4网关(例如172.20.0.1),此更改解决了性能问题。