В постоянно меняющемся мире разработки веб-приложений сложности возникают по мере появления новых технологий. Эта быстрая трансформация предоставляет разработчикам широкий спектр возможностей, но также создает проблемы при принятии правильного выбора. Symfony, будучи гибкой и мощной платформой PHP для веб-приложений, предлагает разработчикам широкий спектр возможностей выполнения. Однако правильный выбор между этими вариантами имеет решающее значение для производительности, масштабируемости и простоты обслуживания приложения.
Содержание
Критерии выбора среды выполнения
Конечно, при выборе среды выполнения производительность, несомненно, является решающим фактором, но она зависит не только от производительности. Другие важные факторы включают в себя:
-
Опыт разработчика: Выбор среды выполнения влияет на опыт разработчика. Разработчики могут работать более эффективно, если используют среду выполнения, которая соответствует их предпочтениям. Такие факторы, как удобные инструменты мониторинга, возможности отладки и документация, существенно влияют на опыт разработчиков.
-
Поддержка сообщества и экосистемы: наличие сильного сообщества и обширной экосистемы поддержки среды выполнения обеспечивает разработчикам более легкий доступ к ресурсам и более быстрое решение проблем. Среды выполнения, поддерживаемые сообществом, могут иметь преимущества с точки зрения добавления новых функций и предоставления обновлений безопасности.
-
Требования к проекту: Конкретные характеристики и требования проекта могут иметь решающее значение при выборе подходящей среды выполнения. Например, некоторые среды выполнения могут лучше интегрироваться с конкретными базами данных или другими внешними системами.
-
Масштабируемость и использование ресурсов: Размер и масштаб проекта могут повлиять на выбор подходящей среды выполнения. Легкие и масштабируемые среды выполнения могут быть выгодны для небольших проектов, тогда как более надежные среды выполнения, которые эффективно управляют использованием ресурсов, могут быть предпочтительными для крупномасштабных приложений.
-
Совместимость с существующей инфраструктурой: совместимость с другими инструментами, службами и элементами инфраструктуры, используемыми в вашем проекте, может повлиять на выбор среды выполнения. Очень важно, чтобы среда выполнения была совместима с существующей инфраструктурой и облегчала интеграцию.
-
Политики безопасности и обновления: среда выполнения должна соответствовать стандартам безопасности и получать регулярные обновления для обеспечения долгосрочной безопасности проекта.
Эти факторы, помимо производительности, играют решающую роль при выборе идеальной среды выполнения. Сбалансированная оценка этих соображений может улучшить общий успех и устойчивость проекта.
Теперь, когда мы рассмотрели такие важные критерии, как опыт разработчиков, поддержка сообщества, документация, безопасность и совместимость, крайне важно углубиться в аспекты производительности выявленных сред выполнения Symfony. Проведение углубленного анализа производительности включает изучение ключевых показателей, таких как количество запросов в секунду (RPS), значения задержки и скорости передачи данных в различных сценариях. Тщательно изучая, как каждая среда выполнения обрабатывает эти показатели производительности, мы можем получить представление об их эффективности в различных условиях рабочей нагрузки. Эта глубокая оценка производительности поможет нам принять обоснованные решения, гарантируя, что выбранная среда выполнения не только соответствует нефункциональным требованиям проекта, но также обеспечивает оптимальную скорость и оперативность, что имеет решающее значение для успешного приложения Symfony.
Конечная точка теста
Эти конечные точки представляют три разных маршрута API в вашем приложении Symfony, каждый из которых имеет свою цель:
-
Конечные точки контроля работоспособности (
**/health-check**
): Эта конечная точка используется для оценки общего состояния приложения. При вызове он выполняет проверку работоспособности, оценивая состояние целевых служб, и возвращает ответ HTTP 204 No Content. Это свидетельствует о том, что основной функционал приложения активен и состояние здоровья положительное. -
Конечная точка статической информации (
**/static**
): Эта конечная точка предоставляет статическую информацию о вашем приложении, возвращая простой ответ JSON. Ответ JSON обычно включает постоянные значения, версии или другие статические сведения о приложении. Эта конечная точка обеспечивает клиентам быстрый и простой доступ для сбора базовой информации о приложении. -
Конечная точка HTTP-запроса (
**/http-request**
): Эта конечная точка использует сервисHttp
Symfony для отправки HTTP-запроса GET другому API. Полученный ответ демонстрирует способность приложения Symfony взаимодействовать с внешними ресурсами. Эту функцию можно использовать в таких сценариях, как получение данных из внешних API или доступ к ресурсам.
трафик/воами — это простой пример приложения, которое при получении HTTP-запроса предоставляет подробную информацию об источнике запроса. Это приложение возвращает информационный ответ, содержащий заголовки HTTP, IP-адрес клиента, временную метку запроса и другие важные сведения.
Эти три конечные точки представляют разные сценарии использования, что позволяет выполнять разные тесты для оценки общей производительности приложения.
json([
'status' => true,
]);
#[Route('/http-request', name: 'http_request')]
public function httpRequest(HttpService $httpService): JsonResponse
{
return $this->json(json_decode($httpService->get('
}
}
Докер-образы
Открыть Свул
FROM php:8.3-alpine
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
RUN install-php-extensions pcntl sockets openswoole
COPY . /var/www
WORKDIR /var/www
RUN composer install --no-dev
ENV APP_RUNTIME="Runtime\\\Swoole\\\Runtime"
ENTRYPOINT ["php", "public/index.php"]
Свул
FROM php:8.3-alpine
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
RUN install-php-extensions pcntl sockets swoole
COPY . /var/www
WORKDIR /var/www
RUN composer install --no-dev
ENV APP_RUNTIME="Runtime\\\Swoole\\\Runtime"
ENTRYPOINT ["php", "public/index.php"]
РоудРаннер
FROM php:8.3-alpine
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
COPY --from=ghcr.io/roadrunner-server/roadrunner:latest /usr/bin/rr /usr/local/bin/rr
RUN install-php-extensions pcntl sockets
COPY . /var/www
WORKDIR /var/www
RUN composer install --no-dev
ENV APP_RUNTIME="Runtime\\\RoadRunnerSymfonyNyholm\\\Runtime"
ENTRYPOINT ["rr", "serve"]
ФранкенPHP
FROM php:8.3-alpine
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
RUN install-php-extensions pcntl sockets
COPY . /var/www
WORKDIR /var/www
RUN apk add jq
RUN wget -O/usr/local/bin/frankenphp $(wget -O- | jq '.assets[] | select(.name=="frankenphp-linux-x86_64") | .browser_download_url' -r) && chmod +x /usr/local/bin/frankenphp
RUN composer install --no-dev
ENV APP_RUNTIME="Runtime\\\FrankenPhpSymfony\\\Runtime"
ENV APP_PUBLIC_PATH="/var/www/public"
ENV MAX_REQUESTS="500"
ENV REQUEST_MAX_EXECUTION_TIME="500"
ENV CADDY_SERVER_ADMIN_PORT="3823"
ENV CADDY_SERVER_LOG_LEVEL="WARN"
ENV CADDY_SERVER_LOGGER="json"
ENV CADDY_SERVER_SERVER_NAME="
ENV CADDY_SERVER_WORKER_COUNT="16"
ENV CADDY_SERVER_EXTRA_DIRECTIVES=""
ENTRYPOINT ["frankenphp","run", "-cCaddyfile"]
Докер Составление
version: "3.9"
services:
whoami:
container_name: "whoami"
image: "containous/whoami"
openswoole:
container_name: "openswoole"
image: "ghcr.io/thecaliskan/symfony-benchmark:openswoole"
ports:
- "9801:9801"
swoole:
container_name: "swoole"
image: "ghcr.io/thecaliskan/symfony-benchmark:swoole"
ports:
- "9802:9802"
roadrunner:
container_name: "roadrunner"
image: "ghcr.io/thecaliskan/symfony-benchmark:roadrunner"
ports:
- "9803:9803"
frankenphp:
container_name: "frankenphp"
image: "ghcr.io/thecaliskan/symfony-benchmark:frankenphp"
ports:
- "9804:9804"
GitHub – thecaliskan/symfony-benchmark: Пример проекта Symfony Benchmark
для Symfony Runtime…
Пример проекта Symfony Benchmark для серверов времени выполнения Symfony — GitHub — thecaliskan/symfony-benchmark: Symfony…
Монтаж
Чтобы запустить тесты производительности на вашем сервере, выполните следующие действия для настройки приложения:
wget
docker compose up -d
Контрольный показатель
Теперь, когда ваше приложение Symfony запущено, вы можете выполнить тесты производительности для различных вариантов сервера. Используйте следующие команды для каждого сервера:
OpenSwoole
wrk -t16 -c100 -d30s --latency
wrk -t16 -c100 -d30s --latency
wrk -t16 -c100 -d30s --latency
Свул
wrk -t16 -c100 -d30s --latency
wrk -t16 -c100 -d30s --latency
wrk -t16 -c100 -d30s --latency
РоудРаннер
wrk -t16 -c100 -d30s --latency
wrk -t16 -c100 -d30s --latency
wrk -t16 -c100 -d30s --latency
ФранкенPHP
wrk -t16 -c100 -d30s --latency
wrk -t16 -c100 -d30s --latency
wrk -t16 -c100 -d30s --latency
Куча
Программное обеспечение
Аппаратное обеспечение
-
Intel i9 9900K (8 ядер/16 потоков, 3,6 ГГц, турбо 5,0 ГГц)
-
32 ГБ DDR4 3200 МГц
-
Твердотельный накопитель Samsung 970 EvoPlus (3500 Вт/3300 МБ/с)
Результаты теста
Выводы
Тесты производительности Symfony Framework показывают явное преимущество сред выполнения OpenSwoole и Swoole над другими. Это особенно заметно в сценариях «Проверка работоспособности», «Статический» и «Http-запрос», где очевидны низкие значения задержки и высокие показатели количества запросов в секунду (RPS).
Превосходство OpenSwoole и Swoole в этих аспектах является значительным преимуществом, обеспечивающим быструю и эффективную работу приложений. Эти среды выполнения эффективно отвечают на запросы пользователей с низкими значениями задержки и успешно обрабатывают высокие запросы благодаря высоким показателям RPS.
Разработчикам следует сосредоточиться на оптимизации RoadRunner и FrankenPHP на основе результатов этих тестов. Это поможет улучшить производительность проектов Symfony в целом, положительно повлияв на удобство работы пользователей и повысив эффективность процесса разработки приложений.
Когда дело доходит до выбора среды выполнения для проектов Symfony, какие ключевые факторы влияют на ваше решение? Какую среду выполнения вы предпочитаете для своих проектов и какие факторы, такие как производительность, опыт разработчика или требования, специфичные для проекта, играют роль в вашем выборе? Поделитесь своими личными предпочтениями и причинами, которые вы учитываете при принятии этих решений.
Кредиты и источник статьи ВОЗ.