В постоянно меняющемся мире разработки веб-приложений сложности возникают по мере появления новых технологий. Эта быстрая трансформация предоставляет разработчикам широкий спектр возможностей, но также создает проблемы при принятии правильного выбора. Symfony, будучи гибкой и мощной платформой PHP для веб-приложений, предлагает разработчикам широкий спектр возможностей выполнения. Однако правильный выбор между этими вариантами имеет решающее значение для производительности, масштабируемости и простоты обслуживания приложения.

Критерии выбора среды выполнения

Конечно, при выборе среды выполнения производительность, несомненно, является решающим фактором, но она зависит не только от производительности. Другие важные факторы включают в себя:

  1. Опыт разработчика: Выбор среды выполнения влияет на опыт разработчика. Разработчики могут работать более эффективно, если используют среду выполнения, которая соответствует их предпочтениям. Такие факторы, как удобные инструменты мониторинга, возможности отладки и документация, существенно влияют на опыт разработчиков.

  2. Поддержка сообщества и экосистемы: наличие сильного сообщества и обширной экосистемы поддержки среды выполнения обеспечивает разработчикам более легкий доступ к ресурсам и более быстрое решение проблем. Среды выполнения, поддерживаемые сообществом, могут иметь преимущества с точки зрения добавления новых функций и предоставления обновлений безопасности.

  3. Требования к проекту: Конкретные характеристики и требования проекта могут иметь решающее значение при выборе подходящей среды выполнения. Например, некоторые среды выполнения могут лучше интегрироваться с конкретными базами данных или другими внешними системами.

  4. Масштабируемость и использование ресурсов: Размер и масштаб проекта могут повлиять на выбор подходящей среды выполнения. Легкие и масштабируемые среды выполнения могут быть выгодны для небольших проектов, тогда как более надежные среды выполнения, которые эффективно управляют использованием ресурсов, могут быть предпочтительными для крупномасштабных приложений.

  5. Совместимость с существующей инфраструктурой: совместимость с другими инструментами, службами и элементами инфраструктуры, используемыми в вашем проекте, может повлиять на выбор среды выполнения. Очень важно, чтобы среда выполнения была совместима с существующей инфраструктурой и облегчала интеграцию.

  6. Политики безопасности и обновления: среда выполнения должна соответствовать стандартам безопасности и получать регулярные обновления для обеспечения долгосрочной безопасности проекта.

Эти факторы, помимо производительности, играют решающую роль при выборе идеальной среды выполнения. Сбалансированная оценка этих соображений может улучшить общий успех и устойчивость проекта.

ЧИТАТЬ  Google Реклама прекращает поддержку расширенной стратегии назначения ставок CPC

Теперь, когда мы рассмотрели такие важные критерии, как опыт разработчиков, поддержка сообщества, документация, безопасность и совместимость, крайне важно углубиться в аспекты производительности выявленных сред выполнения Symfony. Проведение углубленного анализа производительности включает изучение ключевых показателей, таких как количество запросов в секунду (RPS), значения задержки и скорости передачи данных в различных сценариях. Тщательно изучая, как каждая среда выполнения обрабатывает эти показатели производительности, мы можем получить представление об их эффективности в различных условиях рабочей нагрузки. Эта глубокая оценка производительности поможет нам принять обоснованные решения, гарантируя, что выбранная среда выполнения не только соответствует нефункциональным требованиям проекта, но также обеспечивает оптимальную скорость и оперативность, что имеет решающее значение для успешного приложения Symfony.

Конечная точка теста

Эти конечные точки представляют три разных маршрута API в вашем приложении Symfony, каждый из которых имеет свою цель:

  1. Конечные точки контроля работоспособности ( **/health-check** ): Эта конечная точка используется для оценки общего состояния приложения. При вызове он выполняет проверку работоспособности, оценивая состояние целевых служб, и возвращает ответ HTTP 204 No Content. Это свидетельствует о том, что основной функционал приложения активен и состояние здоровья положительное.

  2. Конечная точка статической информации ( **/static** ): Эта конечная точка предоставляет статическую информацию о вашем приложении, возвращая простой ответ JSON. Ответ JSON обычно включает постоянные значения, версии или другие статические сведения о приложении. Эта конечная точка обеспечивает клиентам быстрый и простой доступ для сбора базовой информации о приложении.

  3. Конечная точка 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…

ЧИТАТЬ  Банк Хлынов ответил на критику своего сервиса «Плати из дома», пообещав завершить обслуживание и перечислив банковское программное обеспечение для Linux.

Пример проекта Symfony Benchmark для серверов времени выполнения Symfony — GitHub — thecaliskan/symfony-benchmark: Symfony…

github.com

Монтаж

Чтобы запустить тесты производительности на вашем сервере, выполните следующие действия для настройки приложения:

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 в целом, положительно повлияв на удобство работы пользователей и повысив эффективность процесса разработки приложений.

ЧИТАТЬ  Два лучших игровых ноутбука RTX 4060, которые вы можете купить, в настоящее время имеют скидку 500 долларов.

Когда дело доходит до выбора среды выполнения для проектов Symfony, какие ключевые факторы влияют на ваше решение? Какую среду выполнения вы предпочитаете для своих проектов и какие факторы, такие как производительность, опыт разработчика или требования, специфичные для проекта, играют роль в вашем выборе? Поделитесь своими личными предпочтениями и причинами, которые вы учитываете при принятии этих решений.

Кредиты и источник статьи ВОЗ.



Source link