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

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

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

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

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

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

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

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

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

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

ЧИТАТЬ  Атака ИИ: почему выживут только авторитетные компании | Зона Мартех

Теперь, когда мы рассмотрели такие важные критерии, как опыт разработчиков, поддержка сообщества, документация, безопасность и совместимость, крайне важно углубиться в аспекты производительности выявленных сред выполнения 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…

ЧИТАТЬ  Ключевые слова с длинным хвостом: изменение правил игры для трафика и рейтинга вашего сайта.

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

ЧИТАТЬ  Оптимизация взаимодействия с пользователем: тактика для повышения производительности и скорости веб-сайта

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

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



Source link