Производительность веб-приложения — Docker против Native/BareMetal [закрыто]Apache

Ответить
Anonymous
 Производительность веб-приложения — Docker против Native/BareMetal [закрыто]

Сообщение Anonymous »

Я развернул веб-приложение на VPS Contabo (8 ЦП, 24 ГБ оперативной памяти, 300 ГБ NVME) для своего клиента. Все работает нормально, никаких проблем не возникло.
Из-за изменений в моих привычках развертывания я решил переместить все в контейнер Docker.
Чтобы сравнить «голое железо» и Docker, я арендовал идентичный сервер в Contabo, настроил и развернул мой контейнер. Все получилось.
Но что-то было странно. Более высокая задержка, ощутимая задержка при загрузке – незначительная, но все же достаточная, чтобы спрашивать себя каждый раз, когда я загружаю страницу: есть ли у меня проблема?
Покопавшись глубже, я проверил этот инструмент: ab из Apache Foundation.
Результаты были шокирующими: (

Код: Выделить всё

ab -n 1000 -c 100 
)
  • собственное развертывание: полных запросов: 1000, невыполненных запросов: 0
  • Docker: завершенных запросов : 1000, Неудачных запросов: 996 (+/- 200)
Мой тест Docker на разных конфигурациях был следующим:
  • 4 контейнер: mariadb, php, apache, traefik
  • 3 контейнер: mariadb, php-apache, traefik
    2 контейнер: mariadb, php-apache< /li>
Ни одна из этих комбинаций не имела никакого значения. Даже с изображениями из webdevops/php-apache:8.3 и php:8.3-apache — никаких изменений. Всегда одни и те же результаты.
Теперь я начинаю задаваться вопросом, могут ли Docker иметь недостатки, вызывающие эти проблемы.
Я дважды проверил конфигурацию php-fpmn, попытался ее оптимизировать. .. никаких изменений. Все, что я делал, по сути было пустой тратой времени.
Это содержимое моего файла compose.yml:

Код: Выделить всё

services:

myapp-db:
image: mariadb:11.5.2
container_name: myapp-db
restart: unless-stopped
environment:
MYSQL_DATABASE: ${DB_NAME}
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_USER: ${DB_USER}
TZ: Europe/Berlin
volumes:
- myapp-dbdata:/var/lib/mysql
ports:
- "3306:3306"

myapp-apache-php:
build:
context: ./
dockerfile: .docker/Dockerfile-prod-ssl
container_name: myapp-apache-php
restart: unless-stopped
working_dir: /var/www/html
ports:
- "80:80"
- "443:443"
depends_on:
- myapp-db
volumes:
- myapp-webdata:/var/www/html

volumes:
myapp-dbdata:
myapp-webdata:
А это Dockerfile-prod-ssl

Код: Выделить всё

FROM ubuntu:24.04

# No tty
ENV DEBIAN_FRONTEND noninteractive

# Add repository for PHP 8.3 and Apache
RUN apt-get update
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:ondrej/php
RUN add-apt-repository -y ppa:ondrej/apache2
RUN apt-get update

# Apache 2.4.xx and PHP
RUN apt-get update && apt-get -y install \
curl \
zip \
unzip \
php8.3-fpm \
libapache2-mod-php8.3 \
apache2 \
nano \
git \
certbot \
python3-certbot-apache

# Copy Certificate Script
COPY ./.docker/enable-ssl.sh /etc/apache2/enable-ssl.sh

# Install PHP extensions
RUN apt-get update && apt-get install -y \
php8.3-cli \
php8.3-fpm \
php8.3-common \
php8.3-pdo \
php8.3-mysql \
php8.3-zip \
php8.3-gd \
php8.3-mbstring \
php8.3-curl \
php8.3-xml \
php8.3-bcmath \
php8.3-intl \
php8.3-opcache

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Apache Configuration
COPY ./.docker/000-default.conf /etc/apache2/sites-available/000-default.conf
RUN a2ensite 000-default.conf

# PHP Configuration
COPY ./.docker/custom-php.ini /etc/php/8.3/fpm/conf.d/custom-php.ini

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Disable Mod to switch to mpm_event
RUN a2dismod php8.3 && a2dismod mpm_prefork

# Copy root to WorkDir
COPY . /var/www/html

# Set working directory
WORKDIR /var/www/html

# Enable necessary Mods
RUN a2enmod mpm_event headers rewrite proxy_fcgi setenvif ssl expires

# Copy startscript
COPY ./.docker/start.sh /usr/local/bin/start.sh
RUN chmod +x /usr/local/bin/start.sh

# Starting Apache and PHP-FPM
CMD ["/usr/local/bin/start.sh"]

Что делать дальше? Какая информация вам нужна, чтобы получить лучшее представление и, возможно, решение. Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -baremetal
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Apache»